Skip to content

Releases: shoplive/shoplive-sdk-flutter

3.0.3

Choose a tag to compare

@mb-kyle-k mb-kyle-k released this 20 Oct 01:21
02073ea

Shoplive SDK for Flutter 3.0.3 is built on Shoplive Android SDK 3.0.3 and iOS SDK 3.0.3.

There is no Dart breaking change from 3.0.2. Update all three packages to the same version.

Highlights

  • Streamer web page. ShopliveStreamer.instance.start(campaignKey, webPageUrl: ...) shows a web page when the broadcaster swipes on the broadcast screen (Android and iOS). The URL must start with http:// or https:// and have a host. An invalid URL fails with INVALID_ARGUMENT before the broadcast screen opens. null keeps the 3.0.2 behavior.
  • PIP drag-out to close. New ShoplivePipOptions.isDragOutToCloseEnabled sets whether the in-app PIP window closes when it is dragged off the screen (Android and iOS). If you omit it, the current value stays (SDK default: true).
  • Player restart fix. start while a session is open (or after close) now opens a new player with the configuration of that call. Before, Android reused the previous player and ignored the new settings (for example, a live start after a preview session showed a black preview screen). iOS now also closes the current player and opens a new one. To change the campaign and keep the current settings, use play.
  • Same coupon / custom-action default on both platforms. If you omit alertType in respond, both platforms now use toast. Before, Android sent no value.

Changes

shoplive_core

  • ShopliveConfiguration.appVersion is deprecated and ignored. SDK 3.0.3 reads the app version itself. A warning is logged if you set it.
  • ShopliveError.rawCode is now set on both platforms.
  • Error code values are the SDK 3.0.3 constant names. Android 3.0.3 removed NOT_INITIALIZED_CONFIG and NOT_INITIALIZED_CAMPAIGN_KEY and added new codes (for example, AUTHENTICATION_FAILED and PIP_*). Treat code as an opaque string.

shoplive_player

  • Added ShoplivePipOptions.isDragOutToCloseEnabled. getConfiguration() returns it.
  • Fixed: start on an open session now applies the new configuration (see Highlights).
  • iOS: ShoplivePlayerType.preview also sets the SDK 3.0.3 ShoplivePlayerConfiguration.type.
  • Error events: rawCode is now always set on iOS. The event keys (code, message, rawCode, recoverable) are unchanged.
  • An omitted alertType now means toast on both platforms. The fallback result is unchanged (success: false, status: keep, alertType: toast).

shoplive_streamer

  • Added the named parameter webPageUrl to start.
  • Error events: rawCode is now always set on iOS.

Note

Existing calls to start still compile. But if your test double implements ShopliveStreamer and overrides start(String), change its signature to start(String campaignKey, {String? webPageUrl}).

Installation

dependencies:
  shoplive_player: 3.0.3      # player, includes shoplive_core
  # shoplive_streamer: 3.0.3  # broadcast, includes shoplive_core

Requirements

No change from 3.0.2.

Minimum
Flutter / Dart 3.22 / 3.4
Android Gradle Plugin / Gradle / JDK 8.7 / 8.9 / 17
Android minSdk / compileSdk 23 / 36
iOS 15.0 (Xcode with Swift 5.9 or later)

Upgrade notes

Android

  • The SDK 3.0.3 artifacts are only in https://sdk.shoplive.cloud/maven-repo (not in Maven Central). Keep the exclusiveContent rule for the cloud.shoplive group. The shoplive-media3 conflict of 3.0.2 no longer applies.

iOS

  • During pod install, the plugins download the iOS SDK 3.0.3 XCFrameworks and verify the new sha256 checksums. Run pod install (or flutter run) again after you update.

For the full list, refer to the CHANGELOG of each package: shoplive_core · shoplive_player · shoplive_streamer.

Links


Full Changelog: 3.0.2...3.0.3

1.9.0

Choose a tag to compare

@mb-kyle-k mb-kyle-k released this 20 Oct 01:22
d8665d8

What's changed

  • Updated Shoplive iOS/Android SDK from 1.8.13 to 1.9.0.
    • Android: shoplive_sdk_version 1.9.0, ExoPlayer 2.19.1.20
    • iOS: ShopLive and ShopliveSDKCommon 1.9.0
  • Removed the shortform API. Shortform is not in SDK 1.9.0. The ShopLiveShortform class and its data classes are removed, and the plugin no longer depends on the Shoplive shortform SDK (ShopliveShortformSDK on iOS, shoplive-short-form on Android).
  • Minimum iOS version is now 15.0 (was 11.0).

Breaking changes

  • If your app uses ShopLiveShortform, remove that code before you upgrade, or stay on 1.8.14.
  • Set platform :ios, '15.0' in ios/Podfile.

Required setup

Android

  • The plugin now gets the SDK from https://sdk.shoplive.cloud/maven-repo. If your project declares repositories itself, add this repository:

    allprojects {
        repositories {
            google()
            mavenCentral()
            maven { url = uri("https://sdk.shoplive.cloud/maven-repo") }
        }
    }

Installation

dependencies:
  shoplive_player: ^1.9.0

Note

1.9.0 is a maintenance release of the 1.x line. For new integrations, use 3.0.3.


Full Changelog: 1.8.14...1.9.0
pub.dev: https://pub.dev/packages/shoplive_player/versions/1.9.0

1.8.14

Choose a tag to compare

@Tabber-shoplive Tabber-shoplive released this 14 Aug 08:41
c41f425

What's changed

  • Added ShopLivePlayer.setResizeMode(). It passes the native setResizeMode API through for the live player (ShopLiveResizeMode.auto / centerCrop / fit).
  • Updated Shoplive iOS/Android SDK from 1.8.11 to 1.8.13.

Example

final player = ShopLivePlayer();

player.setResizeMode(mode: ShopLiveResizeMode.centerCrop);
player.play(data: ShopLivePlayerData(campaignKey: '<campaign key>'));

Installation

dependencies:
  shoplive_player: ^1.8.14

Note

The native ShopLiveResizeMode enums declare their values in a different order on iOS and Android. For this reason, the plugin sends the value as a name string, not as an integer. You only use the Dart enum. No other step is necessary.


Full Changelog: 1.8.13...1.8.14
pub.dev: https://pub.dev/packages/shoplive_player/versions/1.8.14

3.0.2

Choose a tag to compare

@mb-kyle-k mb-kyle-k released this 15 Oct 01:35

Shoplive SDK for Flutter 3.0.2 is built on Shoplive Android SDK 3.0.2 and iOS SDK 3.0.2.

Important

This is a major rewrite. The 1.x Dart API is removed. To upgrade from 1.x, read Migrating from 1.x before you update your dependencies.

Highlights

  • Three packages. Add only the packages your app needs. All three must use the same version.

    Package Provides
    shoplive_core Shoplive.initialize, user, stream token, logout, conversion events
    shoplive_player ShoplivePlayer live/VOD player (re-exports shoplive_core)
    shoplive_streamer ShopliveStreamer broadcast (re-exports shoplive_core)

    An app that only plays videos adds only shoplive_player. The streamer binaries are then not included in the app.

  • Async API with typed errors. All methods return a Future. Failures throw a PlatformException with a code: INVALID_ARGUMENT, NO_HOST_SCREEN, NOT_RUNNING or SDK_ERROR. In 1.x, some void methods ignored errors.

  • Coupon and custom-action responses. Listen to couponRequests / customWebActionRequests and call request.respond(...). In 1.x, coupon requests got no response. Custom actions are no longer answered with success automatically: if there is no listener, or no respond before the timeout (default 10 s, range 1–120 s), the SDK receives success: false.

  • Configuration. start / setConfiguration merge the given configuration with the current settings. The new getConfiguration returns the current settings.

  • In-app PIP fixes on Android.

    • Playback no longer stops when the player changes from fullscreen to in-app PIP on a default FlutterActivity host. You do not need to change MainActivity.
    • The ClassCastException during the PIP transition is fixed.
  • Streamer. shoplive_streamer is now a separate package (it was part of shoplive_player).

Installation

dependencies:
  shoplive_player: 3.0.2      # player, includes shoplive_core
  # shoplive_streamer: 3.0.2  # broadcast, includes shoplive_core
import 'package:shoplive_player/shoplive_player.dart';

await Shoplive.initialize(const ShopliveConfiguration(accessKey: 'YOUR_ACCESS_KEY'));
await Shoplive.setUser(const ShopliveUser.guest());

final player = ShoplivePlayer.instance;
player.events.listen((event) { /* ShoplivePlayerEvent */ });
await player.start('CAMPAIGN_KEY');

Requirements

Minimum
Flutter / Dart 3.22 / 3.4
Android Gradle Plugin / Gradle / JDK 8.7 / 8.9 / 17
Android minSdk / compileSdk 23 / 36
iOS 15.0 (Xcode with Swift 5.9 or later)

Required setup

Android

  • The plugins get the SDK from https://sdk.shoplive.cloud/maven-repo. If your project declares repositories itself, restrict the cloud.shoplive group to that repository with exclusiveContent. Maven Central has a conflicting shoplive-media3:1.10.1.2. Refer to "Android: Maven repository setup" in the package README.
  • For in-app PIP to continue as system PIP when the app goes to the background, add android:supportsPictureInPicture="true" to your host Activity. If you do not, the player reports PIP_ACTIVITY_NOT_DECLARED.

iOS

  • Set platform :ios, '15.0' in ios/Podfile. During pod install, the plugins download the iOS SDK 3.0.2 XCFrameworks and verify their sha256 checksums. If you run pod install manually, use a UTF-8 locale (for example, LANG=en_US.UTF-8).
  • If you use shoplive_streamer, add NSCameraUsageDescription and NSMicrophoneUsageDescription to Info.plist. If they are missing, iOS terminates the app when the broadcast screen requests the camera.

Streamer

  • Call Shoplive.setStreamToken(token) before ShopliveStreamer.instance.start. Without a token, the server returns no ingest address and the broadcast screen shows a "failed to start" dialog.

Migrating from 1.x

Breaking changes:

  • The 1.x Dart API (ShopLivePlayer, ShopLiveCommon and their data and event classes) is removed. Class names change from ShopLive* to Shoplive*.
  • ShopLiveCommon (setAccessKey, setAuth, setAuthToken, setUser, setUtm*, clearAuth) is replaced by Shoplive.initialize, setUser, setStreamToken, logout and sendConversionEvent. The profile id is now required.
  • The Shortform API is removed. Shortform is not available in SDK 3.x.
  • showPreview is replaced by start with presentationStyle: pip and configuration.type: preview.
  • These APIs have no SDK 3.0.2 equivalent and are removed: closeButtonConfig, hidePreview, the previewClose stream, and the preview options pipRadius, enableSwipeOut and pipMaxSize. setResizeMode now supports only fill and fit.
  • sendDownloadCouponResult / sendCustomActionResult are replaced by respond on the request objects. getSdkVersion() moved to Shoplive.getSdkVersion().
  • Sharing: use configuration.navigation.shareScheme. SDK 3.x has no share handler.

Steps:

  1. Update your code with the migration table in the shoplive_player README.
  2. Run flutter clean once after you upgrade. If you do not, old 1.x iOS build products cause the error "'ShoplivePlayerPlugin' has different definitions in different modules".

Known limitations

  • You cannot reset nullable settings (navigation.shareScheme, android.isVolumeKeyEnabled) to null from Dart.
  • After the Flutter engine is detached and attached again, you cannot control a session that the previous engine left open.
  • The streamer does not expose appearance options or the headless streamer API.

For the full list, refer to the CHANGELOG of each package: shoplive_core · shoplive_player · shoplive_streamer.

Links


Full Changelog: 1.8.14...3.0.2

1.8.13

Choose a tag to compare

@mb-kyle-k mb-kyle-k released this 15 Oct 01:38
2d41837

What's changed

  • Updated Shoplive iOS/Android SDK from 1.8.10 to 1.8.11.
    • Android: shoplive_sdk_version 1.8.11, ExoPlayer 2.19.1.19
    • iOS: ShopLive, ShopliveSDKCommon and ShopliveShortformSDK 1.8.11

There is no Dart API change.

Installation

dependencies:
  shoplive_player: ^1.8.13

pub.dev: https://pub.dev/packages/shoplive_player/versions/1.8.13