react-native-firework-sdk 2.2.4 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/FireworkVideoUI.xcframework/ios-arm64/FireworkVideoUI.framework/FireworkVideoUI +0 -0
  2. package/FireworkVideoUI.xcframework/ios-arm64/FireworkVideoUI.framework/Info.plist +0 -0
  3. package/FireworkVideoUI.xcframework/ios-arm64/FireworkVideoUI.framework/Modules/FireworkVideoUI.swiftmodule/arm64-apple-ios.abi.json +2 -9
  4. package/FireworkVideoUI.xcframework/ios-arm64_x86_64-simulator/FireworkVideoUI.framework/FireworkVideoUI +0 -0
  5. package/FireworkVideoUI.xcframework/ios-arm64_x86_64-simulator/FireworkVideoUI.framework/Info.plist +0 -0
  6. package/FireworkVideoUI.xcframework/ios-arm64_x86_64-simulator/FireworkVideoUI.framework/Modules/FireworkVideoUI.swiftmodule/arm64-apple-ios-simulator.abi.json +2 -9
  7. package/FireworkVideoUI.xcframework/ios-arm64_x86_64-simulator/FireworkVideoUI.framework/Modules/FireworkVideoUI.swiftmodule/x86_64-apple-ios-simulator.abi.json +2 -9
  8. package/FireworkVideoUI.xcframework/ios-arm64_x86_64-simulator/FireworkVideoUI.framework/_CodeSignature/CodeResources +9 -9
  9. package/android/build.gradle +9 -39
  10. package/android/gradle/wrapper/gradle-wrapper.properties +1 -1
  11. package/android/gradle.properties +7 -5
  12. package/android/proguard-rules.pro +5 -26
  13. package/android/src/main/AndroidManifest.xml +0 -3
  14. package/android/src/main/java/com/fireworksdk/bridge/FireworkSDKPackage.kt +1 -1
  15. package/android/src/main/java/com/fireworksdk/bridge/components/base/FWBaseFragment.kt +10 -0
  16. package/android/src/main/java/com/fireworksdk/bridge/components/storyblock/StoryBlockFragment.kt +157 -0
  17. package/android/src/main/java/com/fireworksdk/bridge/components/storyblock/StoryBlockFrameLayout.kt +19 -0
  18. package/android/src/main/java/com/fireworksdk/bridge/components/videofeed/FWVideoFeed.kt +15 -5
  19. package/android/src/main/java/com/fireworksdk/bridge/models/FWAdBadgeConfigModel.kt +6 -7
  20. package/android/src/main/java/com/fireworksdk/bridge/models/FWAdBadgeConfigModelDeserializer.kt +5 -1
  21. package/android/src/main/java/com/fireworksdk/bridge/models/FWAdBadgeConfigModelSerializer.kt +22 -0
  22. package/android/src/main/java/com/fireworksdk/bridge/models/FWFontInfoModel.kt +3 -5
  23. package/android/src/main/java/com/fireworksdk/bridge/models/FWFontInfoModelDeserializer.kt +2 -1
  24. package/android/src/main/java/com/fireworksdk/bridge/models/FWFontInfoModelSerializer.kt +18 -0
  25. package/android/src/main/java/com/fireworksdk/bridge/models/FWGradientDrawableModel.kt +8 -0
  26. package/android/src/main/java/com/fireworksdk/bridge/models/FWGradientDrawableModelDeserializer.kt +35 -0
  27. package/android/src/main/java/com/fireworksdk/bridge/models/FWGradientDrawableModelSerializer.kt +27 -0
  28. package/android/src/main/java/com/fireworksdk/bridge/models/FWLiveStreamEventDetailsModel.kt +1 -5
  29. package/android/src/main/java/com/fireworksdk/bridge/models/FWLiveStreamMessageDetailsModel.kt +1 -5
  30. package/android/src/main/java/com/fireworksdk/bridge/models/FWProductInfoViewConfiguration.kt +5 -15
  31. package/android/src/main/java/com/fireworksdk/bridge/models/FWProductInfoViewConfigurationDeserializer.kt +2 -9
  32. package/android/src/main/java/com/fireworksdk/bridge/models/FWProductInfoViewConfigurationSerializer.kt +42 -0
  33. package/android/src/main/java/com/fireworksdk/bridge/models/FWSDKInitOptionsModel.kt +3 -5
  34. package/android/src/main/java/com/fireworksdk/bridge/models/FWSDKInitOptionsModelDeserializer.kt +2 -1
  35. package/android/src/main/java/com/fireworksdk/bridge/models/FWSDKInitOptionsModelSerializer.kt +20 -0
  36. package/android/src/main/java/com/fireworksdk/bridge/models/FWShoppingCtaResult.kt +3 -12
  37. package/android/src/main/java/com/fireworksdk/bridge/models/FWShoppingCtaResultDeserializer.kt +2 -13
  38. package/android/src/main/java/com/fireworksdk/bridge/models/FWShoppingCtaResultSerializer.kt +18 -0
  39. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedConfigModel.kt +8 -9
  40. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedConfigModelDeserializer.kt +17 -6
  41. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedConfigModelSerializer.kt +59 -0
  42. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedItemDetailsModel.kt +1 -5
  43. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedPropsModel.kt +14 -15
  44. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedPropsModelDeserializer.kt +14 -4
  45. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedPropsModelSerializer.kt +56 -0
  46. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoPlaybackDetails.kt +11 -8
  47. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoPlayerConfigModel.kt +11 -12
  48. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoPlayerConfigModelDeserializer.kt +11 -7
  49. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoPlayerConfigModelSerializer.kt +63 -0
  50. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoShoppingProduct.kt +4 -11
  51. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoShoppingProductSerializer.kt +82 -0
  52. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWBadgeTextType.kt +18 -0
  53. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWCtaButtonTextValue.kt +18 -0
  54. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWCtaDelayType.kt +18 -0
  55. package/android/src/main/java/com/fireworksdk/bridge/models/{FWEventName.kt → enums/FWEventName.kt} +1 -1
  56. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWGradientDrawableOrientation.kt +24 -0
  57. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWPlayerLaunchBehavior.kt +18 -0
  58. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWPlayerStyle.kt +18 -0
  59. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWShoppingCtaResultRes.kt +19 -0
  60. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWSystemTypeface.kt +21 -0
  61. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWVideoCompleteAction.kt +18 -0
  62. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWVideoFeedMode.kt +19 -0
  63. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWVideoFeedSource.kt +22 -0
  64. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWVideoFeedTitlePosition.kt +19 -0
  65. package/android/src/main/java/com/fireworksdk/bridge/models/enums/FWVideoPlayerCTAWidth.kt +19 -0
  66. package/android/src/main/java/com/fireworksdk/bridge/reactnative/FWReactNativeSDK.kt +22 -0
  67. package/android/src/main/java/com/fireworksdk/bridge/reactnative/manager/FWStoryBlockManager.kt +61 -32
  68. package/android/src/main/java/com/fireworksdk/bridge/reactnative/manager/FWVideoFeedManager.kt +3 -2
  69. package/android/src/main/java/com/fireworksdk/bridge/reactnative/models/FWNavigatorInterface.kt +0 -1
  70. package/android/src/main/java/com/fireworksdk/bridge/reactnative/models/FWVideoShoppingInterface.kt +0 -1
  71. package/android/src/main/java/com/fireworksdk/bridge/reactnative/models/FireworkSDKInterface.kt +0 -2
  72. package/android/src/main/java/com/fireworksdk/bridge/reactnative/module/FWLiveStreamModule.kt +2 -2
  73. package/android/src/main/java/com/fireworksdk/bridge/reactnative/module/FWNavigatorModule.kt +0 -6
  74. package/android/src/main/java/com/fireworksdk/bridge/reactnative/module/FWVideoShoppingModule.kt +25 -32
  75. package/android/src/main/java/com/fireworksdk/bridge/reactnative/module/FireworkSDKModule.kt +24 -47
  76. package/android/src/main/java/com/fireworksdk/bridge/reactnative/utils/FWEventUtils.kt +17 -44
  77. package/android/src/main/java/com/fireworksdk/bridge/utils/FWBundleUtils.kt +46 -21
  78. package/android/src/main/java/com/fireworksdk/bridge/utils/FWConfigUtil.kt +165 -86
  79. package/android/src/main/java/com/fireworksdk/bridge/utils/FWFragmentUtil.kt +51 -0
  80. package/android/src/main/java/com/fireworksdk/bridge/utils/FWGlobalDataUtil.kt +1 -5
  81. package/android/src/main/java/com/fireworksdk/bridge/utils/FWLanguageUtil.kt +77 -80
  82. package/android/src/main/java/com/fireworksdk/bridge/utils/FWLiveStreamUtil.kt +17 -0
  83. package/android/src/main/java/com/fireworksdk/bridge/utils/FWSingletonHolder.kt +25 -0
  84. package/android/src/main/java/com/fireworksdk/bridge/utils/FWStatusBarUtil.kt +28 -0
  85. package/android/src/main/res/layout/fw_bridge_story_block.xml +5 -12
  86. package/ios/Components/VideoFeed.swift +39 -19
  87. package/ios/Components/VideoFeedConfiguration.swift +4 -5
  88. package/ios/Components/VideoFeedManager.swift +1 -1
  89. package/ios/Components/VideoPlayerConfiguration.swift +17 -0
  90. package/ios/FireworkSdk.xcodeproj/project.pbxproj +197 -205
  91. package/ios/FireworkVideoUI/FireworkVideoUI/Sources/AppLanguage/Extensions/Foundation/Bundle+AppLanguage.swift +23 -8
  92. package/ios/FireworkVideoUI/FireworkVideoUI/Sources/AppLanguage/Extensions/Foundation/URLSession+AppLanguage.swift +1 -18
  93. package/ios/FireworkVideoUI/FireworkVideoUI/Sources/AppLanguage/Extensions/UIKit/UIImageView+AppLanguage.swift +4 -1
  94. package/ios/Models/NativeToRN/FireworkEventName.swift +0 -1
  95. package/ios/Models/NativeToRN/FireworkSDK+Json.swift +1 -1
  96. package/ios/Modules/FWNavigatorModule/FWNavigatorModule.swift +6 -157
  97. package/ios/Modules/FireworkSDKModule/FireworkSDKModule+CTA.swift +1 -21
  98. package/ios/Modules/FireworkSDKModule/FireworkSDKModule.m +1 -2
  99. package/ios/Modules/FireworkSDKModule/FireworkSDKModule.swift +1 -12
  100. package/ios/Modules/LiveStream/LiveStreamModule.m +1 -1
  101. package/ios/Modules/LiveStream/LiveStreamModule.swift +4 -2
  102. package/ios/Modules/Shopping/FWCartViewController.swift +0 -75
  103. package/ios/Modules/Shopping/ShoppingModule.m +1 -3
  104. package/ios/Modules/Shopping/ShoppingModule.swift +12 -47
  105. package/ios/Utils/Extensions/Swizzle/UINavigationController+FWSwizzle.swift +1 -1
  106. package/lib/commonjs/FireworkSDK.js +31 -15
  107. package/lib/commonjs/FireworkSDK.js.map +1 -1
  108. package/lib/commonjs/LiveStream.js.map +1 -1
  109. package/lib/commonjs/VideoShopping.js +43 -30
  110. package/lib/commonjs/VideoShopping.js.map +1 -1
  111. package/lib/commonjs/components/StoryBlock.js +124 -82
  112. package/lib/commonjs/components/StoryBlock.js.map +1 -1
  113. package/lib/commonjs/components/VideoFeed.js +112 -24
  114. package/lib/commonjs/components/VideoFeed.js.map +1 -1
  115. package/lib/commonjs/index.js.map +1 -1
  116. package/lib/commonjs/models/GradientDrawable.js +2 -0
  117. package/lib/commonjs/models/GradientDrawable.js.map +1 -0
  118. package/lib/commonjs/models/StoryBlockConfiguration.js +6 -0
  119. package/lib/commonjs/models/StoryBlockConfiguration.js.map +1 -0
  120. package/lib/commonjs/models/VideoPlayerCTADelay.js +2 -0
  121. package/lib/commonjs/models/VideoPlayerCTADelay.js.map +1 -0
  122. package/lib/commonjs/models/VideoPlayerCTAStyle.js +6 -0
  123. package/lib/commonjs/models/VideoPlayerCTAStyle.js.map +1 -0
  124. package/lib/commonjs/models/VideoPlayerCTAWidth.js +2 -0
  125. package/lib/commonjs/models/VideoPlayerCTAWidth.js.map +1 -0
  126. package/lib/commonjs/models/VideoPlayerCompleteAction.js +2 -0
  127. package/lib/commonjs/models/VideoPlayerCompleteAction.js.map +1 -0
  128. package/lib/commonjs/models/VideoPlayerStyle.js +2 -0
  129. package/lib/commonjs/models/VideoPlayerStyle.js.map +1 -0
  130. package/lib/commonjs/modules/LiveStreamModule.js.map +1 -1
  131. package/lib/commonjs/modules/ShoppingModule.js.map +1 -1
  132. package/lib/commonjs/utils/FWGlobalState.js +47 -0
  133. package/lib/commonjs/utils/FWGlobalState.js.map +1 -0
  134. package/lib/module/FireworkSDK.js +30 -14
  135. package/lib/module/FireworkSDK.js.map +1 -1
  136. package/lib/module/LiveStream.js.map +1 -1
  137. package/lib/module/VideoShopping.js +43 -29
  138. package/lib/module/VideoShopping.js.map +1 -1
  139. package/lib/module/components/StoryBlock.js +113 -73
  140. package/lib/module/components/StoryBlock.js.map +1 -1
  141. package/lib/module/components/VideoFeed.js +113 -24
  142. package/lib/module/components/VideoFeed.js.map +1 -1
  143. package/lib/module/index.js.map +1 -1
  144. package/lib/module/models/GradientDrawable.js +2 -0
  145. package/lib/module/models/GradientDrawable.js.map +1 -0
  146. package/lib/module/models/StoryBlockConfiguration.js +2 -0
  147. package/lib/module/models/StoryBlockConfiguration.js.map +1 -0
  148. package/lib/module/models/VideoPlayerCTADelay.js +2 -0
  149. package/lib/module/models/VideoPlayerCTADelay.js.map +1 -0
  150. package/lib/module/models/VideoPlayerCTAStyle.js +2 -0
  151. package/lib/module/models/VideoPlayerCTAStyle.js.map +1 -0
  152. package/lib/module/models/VideoPlayerCTAWidth.js +2 -0
  153. package/lib/module/models/VideoPlayerCTAWidth.js.map +1 -0
  154. package/lib/module/models/VideoPlayerCompleteAction.js +2 -0
  155. package/lib/module/models/VideoPlayerCompleteAction.js.map +1 -0
  156. package/lib/module/models/VideoPlayerStyle.js +2 -0
  157. package/lib/module/models/VideoPlayerStyle.js.map +1 -0
  158. package/lib/module/modules/LiveStreamModule.js.map +1 -1
  159. package/lib/module/modules/ShoppingModule.js.map +1 -1
  160. package/lib/module/utils/FWGlobalState.js +39 -0
  161. package/lib/module/utils/FWGlobalState.js.map +1 -0
  162. package/lib/typescript/FireworkSDK.d.ts +7 -7
  163. package/lib/typescript/LiveStream.d.ts +2 -2
  164. package/lib/typescript/VideoShopping.d.ts +17 -18
  165. package/lib/typescript/components/StoryBlock.d.ts +2 -0
  166. package/lib/typescript/components/VideoFeed.d.ts +7 -3
  167. package/lib/typescript/index.d.ts +10 -3
  168. package/lib/typescript/models/AdBadgeConfiguration.d.ts +9 -2
  169. package/lib/typescript/models/FWEvents.d.ts +9 -9
  170. package/lib/typescript/models/GradientDrawable.d.ts +5 -0
  171. package/lib/typescript/models/IOSFontInfo.d.ts +2 -0
  172. package/lib/typescript/models/ProductInfoViewConfiguration.d.ts +1 -1
  173. package/lib/typescript/models/StoryBlockConfiguration.d.ts +37 -0
  174. package/lib/typescript/models/VideoFeedConfiguration.d.ts +25 -4
  175. package/lib/typescript/models/VideoPlaybackDetails.d.ts +1 -0
  176. package/lib/typescript/models/VideoPlayerCTADelay.d.ts +11 -0
  177. package/lib/typescript/models/VideoPlayerCTAStyle.d.ts +21 -0
  178. package/lib/typescript/models/VideoPlayerCTAWidth.d.ts +1 -0
  179. package/lib/typescript/models/VideoPlayerCompleteAction.d.ts +1 -0
  180. package/lib/typescript/models/VideoPlayerConfiguration.d.ts +9 -34
  181. package/lib/typescript/models/VideoPlayerStyle.d.ts +1 -0
  182. package/lib/typescript/modules/LiveStreamModule.d.ts +1 -1
  183. package/lib/typescript/modules/ShoppingModule.d.ts +2 -3
  184. package/lib/typescript/utils/FWGlobalState.d.ts +10 -0
  185. package/package.json +5 -3
  186. package/react-native-firework-sdk.podspec +2 -1
  187. package/src/FireworkSDK.ts +47 -19
  188. package/src/LiveStream.ts +4 -2
  189. package/src/VideoShopping.ts +47 -39
  190. package/src/components/StoryBlock.tsx +161 -98
  191. package/src/components/VideoFeed.tsx +147 -23
  192. package/src/index.ts +14 -6
  193. package/src/models/AdBadgeConfiguration.ts +10 -2
  194. package/src/models/FWEvents.ts +11 -11
  195. package/src/models/GradientDrawable.ts +14 -0
  196. package/src/models/IOSFontInfo.ts +2 -0
  197. package/src/models/ProductInfoViewConfiguration.ts +1 -1
  198. package/src/models/StoryBlockConfiguration.ts +38 -0
  199. package/src/models/VideoFeedConfiguration.ts +25 -4
  200. package/src/models/VideoPlaybackDetails.ts +1 -0
  201. package/src/models/VideoPlayerCTADelay.ts +11 -0
  202. package/src/models/VideoPlayerCTAStyle.ts +22 -0
  203. package/src/models/VideoPlayerCTAWidth.ts +1 -0
  204. package/src/models/VideoPlayerCompleteAction.ts +1 -0
  205. package/src/models/VideoPlayerConfiguration.ts +9 -36
  206. package/src/models/VideoPlayerStyle.ts +1 -0
  207. package/src/modules/LiveStreamModule.ts +1 -1
  208. package/src/modules/ShoppingModule.ts +2 -3
  209. package/src/utils/FWGlobalState.ts +31 -0
  210. package/android/publish.gradle +0 -66
  211. package/android/src/main/java/com/fireworksdk/bridge/components/videofeed/StoryBlockFragment.kt +0 -129
  212. package/android/src/main/java/com/fireworksdk/bridge/components/videofeed/StoryBlockFrameLayout.kt +0 -90
  213. package/android/src/main/java/com/fireworksdk/bridge/constants/FWVideoPlayerConstant.kt +0 -39
  214. package/android/src/main/java/com/fireworksdk/bridge/models/FWSystemTypeface.kt +0 -9
  215. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedModel.kt +0 -7
  216. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedSource.kt +0 -10
  217. package/android/src/main/java/com/fireworksdk/bridge/models/FWVideoFeedTitlePosition.kt +0 -7
  218. package/android/src/main/java/com/fireworksdk/bridge/reactnative/pages/FWContainerActivity.kt +0 -53
  219. package/android/src/main/res/layout/fw_bridge_fragment_container.xml +0 -8
  220. package/ios/Modules/FWNavigatorModule/FWNavigatorContainerViewController.swift +0 -33
  221. package/ios/Modules/FWNavigatorModule/FWNavigatorProtocol.swift +0 -18
@@ -21,11 +21,18 @@ import LiveStreamModule from './modules/LiveStreamModule';
21
21
  import ShoppingModule from './modules/ShoppingModule';
22
22
  import FWLoggerUtil from './utils/FWLoggerUtil';
23
23
  import VideoShopping from './VideoShopping';
24
-
25
- export type SDKInitCallback = (event: SDKInitEvent) => void;
26
- export type CustomCTAClickCallback = (event: CustomCTAClickEvent) => void;
27
- export type VideoPlaybackCallback = (event: VideoPlaybackEvent) => void;
28
- export type VideoFeedClickCallback = (event: VideoFeedClickEvent) => void;
24
+ import FWGlobalState from './utils/FWGlobalState';
25
+
26
+ export type SDKInitCallback = (event: SDKInitEvent) => Promise<void> | void;
27
+ export type CustomCTAClickCallback = (
28
+ event: CustomCTAClickEvent
29
+ ) => Promise<void> | void;
30
+ export type VideoPlaybackCallback = (
31
+ event: VideoPlaybackEvent
32
+ ) => Promise<void> | void;
33
+ export type VideoFeedClickCallback = (
34
+ event: VideoFeedClickEvent
35
+ ) => Promise<void> | void;
29
36
 
30
37
  /**
31
38
  * Firework SDK.
@@ -91,7 +98,11 @@ class FireworkSDK {
91
98
  const valueHasChanged =
92
99
  this._adBadgeConfiguration?.badgeTextType !== value?.badgeTextType ||
93
100
  this._adBadgeConfiguration?.backgroundColor !== value?.backgroundColor ||
94
- this._adBadgeConfiguration?.textColor !== value?.textColor;
101
+ this._adBadgeConfiguration?.textColor !== value?.textColor ||
102
+ this._adBadgeConfiguration?.androidFontInfo?.isCustom !==
103
+ value?.androidFontInfo?.isCustom ||
104
+ this._adBadgeConfiguration?.androidFontInfo?.typefaceName !==
105
+ value?.androidFontInfo?.typefaceName;
95
106
  this._adBadgeConfiguration = value;
96
107
  if (valueHasChanged) {
97
108
  this.eventEmitter.emit(FWEventName.AdBadgeConfigurationUpdated);
@@ -166,6 +177,7 @@ class FireworkSDK {
166
177
 
167
178
  private constructor() {
168
179
  FWLoggerUtil.log('FireworkSDK constructor');
180
+
169
181
  this.eventEmitter.addListener(FWEventName.SDKInit, (event) => {
170
182
  FWLoggerUtil.log(`Receive SDKInit event ${event?.error}`);
171
183
 
@@ -230,9 +242,11 @@ class FireworkSDK {
230
242
  if (videoLaunchBehaviorUpdated) {
231
243
  this.eventEmitter.emit(FWEventName.VideoLaunchBehaviorUpdated);
232
244
  }
233
- FireworkSDKModule.init(options);
234
- ShoppingModule.init();
235
- LiveStreamModule.init();
245
+ await FireworkSDKModule.init(options);
246
+ await ShoppingModule.init();
247
+ await LiveStreamModule.init();
248
+
249
+ FWGlobalState.getInstance().resolveSdkInitCalled();
236
250
  }
237
251
 
238
252
  /**
@@ -240,7 +254,13 @@ class FireworkSDK {
240
254
  * @param {string} url
241
255
  * @param {VideoPlayerConfiguration} config
242
256
  */
243
- public openVideoPlayer(url: string, config?: VideoPlayerConfiguration) {
257
+ public async openVideoPlayer(
258
+ url: string,
259
+ config?: VideoPlayerConfiguration
260
+ ): Promise<void> {
261
+ if (!FWGlobalState.getInstance().sdkInitCalled) {
262
+ await FWGlobalState.getInstance().sdkInitCalledPromise;
263
+ }
244
264
  FireworkSDKModule.openVideoPlayer(url, config ?? {});
245
265
  }
246
266
 
@@ -248,28 +268,36 @@ class FireworkSDK {
248
268
  * Records the user purchase. Only supported on iOS.
249
269
  * @param {TrackPurchaseParameters} parameters
250
270
  */
251
- public trackPurchase(parameters: TrackPurchaseParameters) {
271
+ public async trackPurchase(
272
+ parameters: TrackPurchaseParameters
273
+ ): Promise<void> {
252
274
  if (Platform.OS === 'ios') {
275
+ if (!FWGlobalState.getInstance().sdkInitCalled) {
276
+ await FWGlobalState.getInstance().sdkInitCalledPromise;
277
+ }
253
278
  FireworkSDKModule.trackPurchase(parameters);
254
279
  }
255
280
  }
256
281
 
257
282
  /**
258
- * Change App level language. Only supported on iOS.
283
+ * Change App level language.
259
284
  * @param {string | undefined | null} language Such as en, ar and en-US
260
285
  * If language is null or undefined or empty string, SDK will use system language.
261
286
  * @returns {Promise<boolean>} The result of changing app language.
262
287
  */
263
288
  public async changeAppLanguage(language?: string | null): Promise<boolean> {
264
- if (Platform.OS === 'ios') {
265
- const result = await FireworkSDKModule.changeAppLanguage(language);
266
- if (result) {
267
- this.updateInternalAppLanguage(language);
289
+ if (!FWGlobalState.getInstance().sdkInitCalled) {
290
+ await FWGlobalState.getInstance().sdkInitCalledPromise;
291
+ }
292
+ const result = await FireworkSDKModule.changeAppLanguage(language);
293
+ if (result) {
294
+ const languageChanged = this._appLanguage !== language;
295
+ if (Platform.OS === 'ios' && languageChanged) {
296
+ await this.navigator.stopFloatingPlayer();
268
297
  }
269
- return result;
298
+ this.updateInternalAppLanguage(language);
270
299
  }
271
-
272
- return false;
300
+ return result;
273
301
  }
274
302
 
275
303
  private updateInternalAppLanguage(language?: string | null) {
package/src/LiveStream.ts CHANGED
@@ -4,10 +4,12 @@ import type { LiveStreamChatEvent, LiveStreamEvent } from './models/FWEvents';
4
4
  import { LiveStreamModuleEventEmitter } from './modules/LiveStreamModule';
5
5
  import FWLoggerUtil from './utils/FWLoggerUtil';
6
6
 
7
- export type onLiveStreamEventCallback = (event: LiveStreamEvent) => void;
7
+ export type onLiveStreamEventCallback = (
8
+ event: LiveStreamEvent
9
+ ) => Promise<void> | void;
8
10
  export type onLiveStreamChatEventCallback = (
9
11
  event: LiveStreamChatEvent
10
- ) => void;
12
+ ) => Promise<void> | void;
11
13
 
12
14
  /**
13
15
  * The entry class of live stream.
@@ -13,20 +13,24 @@ import ShoppingModule, {
13
13
  } from './modules/ShoppingModule';
14
14
  import FWLoggerUtil from './utils/FWLoggerUtil';
15
15
  import type ShoppingCTAResult from './models/ShoppingCTAResult';
16
+ import FWGlobalState from './utils/FWGlobalState';
16
17
 
17
18
  export type ShoppingCTACallback = (
18
19
  event: ShoppingCTAEvent
19
- ) => Promise<ShoppingCTAResult>;
20
+ ) => Promise<ShoppingCTAResult> | ShoppingCTAResult;
20
21
 
21
- export type CustomClickCartIconCallback = () => Promise<void>;
22
+ export type CustomClickCartIconCallback = () => Promise<void> | void;
22
23
 
24
+ export type UpdateProductDetailsCallbackResult = Product[] | undefined | null;
23
25
  export type UpdateProductDetailsCallback = (
24
26
  event: UpdateProductDetailsEvent
25
- ) => Promise<Product[] | undefined | null>;
27
+ ) =>
28
+ | Promise<UpdateProductDetailsCallbackResult>
29
+ | UpdateProductDetailsCallbackResult;
26
30
 
27
31
  export type CustomClickLinkButtonCallback = (
28
32
  event: CustomClickLinkButtonEvent
29
- ) => Promise<void>;
33
+ ) => Promise<void> | void;
30
34
 
31
35
  /**
32
36
  * The entry class of video shopping.
@@ -46,18 +50,7 @@ class VideoShopping {
46
50
  * The host app can customize the click event processing logic of
47
51
  * the shopping cart icon by setting the callback.
48
52
  */
49
- public get onCustomClickCartIcon(): CustomClickCartIconCallback | undefined {
50
- return this._onCustomClickCartIcon;
51
- }
52
- public set onCustomClickCartIcon(
53
- value: CustomClickCartIconCallback | undefined
54
- ) {
55
- this._onCustomClickCartIcon = value;
56
- if (Platform.OS === 'ios') {
57
- ShoppingModule.setCustomClickCartIconEnabled(!!value);
58
- }
59
- }
60
- private _onCustomClickCartIcon?: CustomClickCartIconCallback | undefined;
53
+ public onCustomClickCartIcon?: CustomClickCartIconCallback | undefined;
61
54
 
62
55
  /**
63
56
  * This callback is triggered when the video will be shown.
@@ -66,6 +59,26 @@ class VideoShopping {
66
59
  */
67
60
  public onUpdateProductDetails?: UpdateProductDetailsCallback;
68
61
 
62
+ /**
63
+ * This callback is triggered when the user clicks
64
+ * the link button next to Add to cart button.
65
+ *
66
+ * The host app can customize the click event processing logic of
67
+ * the link button by setting the callback.
68
+ */
69
+ public get onCustomClickLinkButton():
70
+ | CustomClickLinkButtonCallback
71
+ | undefined {
72
+ return this._onCustomClickLinkButton;
73
+ }
74
+ public set onCustomClickLinkButton(
75
+ value: CustomClickLinkButtonCallback | undefined
76
+ ) {
77
+ this._onCustomClickLinkButton = value;
78
+ ShoppingModule.setCustomClickLinkButtonEnabled(!!value);
79
+ }
80
+ private _onCustomClickLinkButton?: CustomClickLinkButtonCallback | undefined;
81
+
69
82
  /**
70
83
  * Defaults to true.
71
84
  * You can hide the cart icon by setting this property to false.
@@ -75,7 +88,13 @@ class VideoShopping {
75
88
  }
76
89
  public set cartIconVisible(value: boolean) {
77
90
  this._cartIconVisible = value;
78
- ShoppingModule.setCartIconVisible(value);
91
+ if (FWGlobalState.getInstance().sdkInitCalled) {
92
+ ShoppingModule.setCartIconVisible(value);
93
+ } else {
94
+ FWGlobalState.getInstance().sdkInitCalledPromise.then(() => {
95
+ ShoppingModule.setCartIconVisible(value);
96
+ });
97
+ }
79
98
  }
80
99
  private _cartIconVisible: boolean = true;
81
100
 
@@ -93,33 +112,19 @@ class VideoShopping {
93
112
  value: ProductInfoViewConfiguration | undefined
94
113
  ) {
95
114
  this._productInfoViewConfiguration = value;
96
- ShoppingModule.setProductInfoViewConfiguration(value ?? {});
115
+ if (FWGlobalState.getInstance().sdkInitCalled) {
116
+ ShoppingModule.setProductInfoViewConfiguration(value ?? {});
117
+ } else {
118
+ FWGlobalState.getInstance().sdkInitCalledPromise.then(() => {
119
+ ShoppingModule.setProductInfoViewConfiguration(value ?? {});
120
+ });
121
+ }
97
122
  }
98
123
 
99
124
  private _productInfoViewConfiguration?:
100
125
  | ProductInfoViewConfiguration
101
126
  | undefined;
102
127
 
103
- /**
104
- * This callback is triggered when the user clicks
105
- * the link button next to Add to cart button.
106
- *
107
- * The host app can customize the click event processing logic of
108
- * the link button by setting the callback.
109
- */
110
- public get onCustomClickLinkButton():
111
- | CustomClickLinkButtonCallback
112
- | undefined {
113
- return this._onCustomClickLinkButton;
114
- }
115
- public set onCustomClickLinkButton(
116
- value: CustomClickLinkButtonCallback | undefined
117
- ) {
118
- this._onCustomClickLinkButton = value;
119
- ShoppingModule.setCustomClickLinkButtonEnabled(!!value);
120
- }
121
- private _onCustomClickLinkButton?: CustomClickLinkButtonCallback | undefined;
122
-
123
128
  private get eventEmitter(): NativeEventEmitter {
124
129
  return ShoppingModuleEventEmitter;
125
130
  }
@@ -177,7 +182,10 @@ class VideoShopping {
177
182
  * If cound > 0, we will show the red indicator on the cart icon.
178
183
  * Otherwise, we will hide the red indicator on the cart icon.
179
184
  */
180
- public setCartItemCount(count: number) {
185
+ public async setCartItemCount(count: number): Promise<void> {
186
+ if (!FWGlobalState.getInstance().sdkInitCalled) {
187
+ await FWGlobalState.getInstance().sdkInitCalledPromise;
188
+ }
181
189
  ShoppingModule.setCartItemCount(count);
182
190
  }
183
191
 
@@ -22,8 +22,10 @@ import FireworkSDK from '../FireworkSDK';
22
22
  import type AdConfiguration from '../models/AdConfiguration';
23
23
  import type FWError from '../models/FWError';
24
24
  import { FWEventName } from '../models/FWEventName';
25
+ import type { StoryBlockConfiguration } from '../models/StoryBlockConfiguration';
25
26
  import type { StoryBlockSource } from '../models/StoryBlockSource';
26
27
  import { FireworkSDKModuleEventEmitter } from '../modules/FireworkSDKModule';
28
+ import FWGlobalState from '../utils/FWGlobalState';
27
29
  import FWLoggerUtil from '../utils/FWLoggerUtil';
28
30
  import FWStoryBlock from './FWStoryBlock';
29
31
 
@@ -79,6 +81,10 @@ export interface IStoryBlockProps {
79
81
  * Ad configuration of the feed. Only supported on iOS.
80
82
  */
81
83
  adConfiguration?: AdConfiguration;
84
+
85
+ /* The configuration of the story block.
86
+ Only supported on Android.*/
87
+ storyBlockConfiguration?: StoryBlockConfiguration;
82
88
  /**
83
89
  * The feed loading result callback. It means loading successfully when error equals to undefined.
84
90
  */
@@ -91,95 +97,10 @@ const StoryBlock: ForwardRefRenderFunction<
91
97
  > = (props: IStoryBlockProps, forwardedRef) => {
92
98
  const nativeComponentRef = useRef(null);
93
99
  const [isFullscreenState, setIsFullscreenState] = useState<boolean>(false);
94
- const [, forceUpdate] = useReducer((x) => x + 1, 0);
95
- useImperativeHandle(
96
- forwardedRef,
97
- () => {
98
- const sendCommand = (command: string) => {
99
- const nativeNodeHandle = findNodeHandle(nativeComponentRef.current);
100
-
101
- let commandId: string | number =
102
- UIManager.getViewManagerConfig(NativeComponentName).Commands[command];
103
- if (Platform.OS === 'android') {
104
- commandId = commandId.toString();
105
- }
106
-
107
- UIManager.dispatchViewManagerCommand(
108
- findNodeHandle(nativeNodeHandle),
109
- commandId,
110
- []
111
- );
112
- };
113
- return {
114
- play: () => {
115
- sendCommand('play');
116
- },
117
- pause: () => {
118
- sendCommand('pause');
119
- },
120
- };
121
- },
122
- []
100
+ const [sdkInitCalled, setSdkInitCalled] = useState<boolean>(
101
+ FWGlobalState.getInstance().sdkInitCalled
123
102
  );
124
- useEffect(() => {
125
- const subscriptionOfShareBaseURLUpdated =
126
- FireworkSDKModuleEventEmitter.addListener(
127
- FWEventName.ShareBaseURLUpdated,
128
- () => {
129
- FWLoggerUtil.log('Receive FWEventName.ShareBaseURLUpdated');
130
- forceUpdate();
131
- }
132
- );
133
- const subscriptionOfAdBadgeConfigurationUpdated =
134
- FireworkSDKModuleEventEmitter.addListener(
135
- FWEventName.AdBadgeConfigurationUpdated,
136
- () => {
137
- FWLoggerUtil.log('Receive FWEventName.AdBadgeConfigurationUpdated');
138
- forceUpdate();
139
- }
140
- );
141
-
142
- const subscriptionOfVideoLaunchBehaviorUpdated =
143
- FireworkSDKModuleEventEmitter.addListener(
144
- FWEventName.VideoLaunchBehaviorUpdated,
145
- () => {
146
- FWLoggerUtil.log('Receive FWEventName.VideoLaunchBehaviorUpdated');
147
- forceUpdate();
148
- }
149
- );
150
-
151
- const subscriptionOfAppLanguageUpdated =
152
- FireworkSDKModuleEventEmitter.addListener(
153
- FWEventName.AppLanguageUpdated,
154
- () => {
155
- FWLoggerUtil.log('Receive FWEventName.AppLanguageUpdated');
156
- if (Platform.OS === 'android') {
157
- forceUpdate();
158
- }
159
- }
160
- );
161
-
162
- if (Platform.OS === 'android') {
163
- setTimeout(() => {
164
- const viewId = findNodeHandle(nativeComponentRef.current);
165
- FWLoggerUtil.log(`StoryBlock createFragment viewId: ${viewId}`);
166
- UIManager.dispatchViewManagerCommand(
167
- viewId,
168
- UIManager.getViewManagerConfig(
169
- NativeComponentName
170
- ).Commands.create.toString(),
171
- [viewId]
172
- );
173
- }, 500);
174
- }
175
-
176
- return () => {
177
- subscriptionOfShareBaseURLUpdated.remove();
178
- subscriptionOfAdBadgeConfigurationUpdated.remove();
179
- subscriptionOfVideoLaunchBehaviorUpdated.remove();
180
- subscriptionOfAppLanguageUpdated.remove();
181
- };
182
- }, []);
103
+ const [, forceUpdate] = useReducer((x) => x + 1, 0);
183
104
 
184
105
  const handleStoryBlockLoadFinished = (event: NativeSyntheticEvent<any>) => {
185
106
  FWLoggerUtil.log(
@@ -202,11 +123,11 @@ const StoryBlock: ForwardRefRenderFunction<
202
123
  }
203
124
  };
204
125
 
205
- const handleStoryBlockFullscreenStateChanged = (
126
+ const handleStoryBlockFullScreenStateChanged = (
206
127
  event: NativeSyntheticEvent<any>
207
128
  ) => {
208
129
  FWLoggerUtil.log(
209
- `StoryBlock handleStoryBlockFullscreenStateChanged ${event.nativeEvent.isFullScreen}`
130
+ `StoryBlock handleStoryBlockFullScreenStateChanged ${event.nativeEvent.isFullScreen}`
210
131
  );
211
132
  const { isFullScreen } = event.nativeEvent;
212
133
  setIsFullscreenState(isFullScreen);
@@ -255,13 +176,17 @@ const StoryBlock: ForwardRefRenderFunction<
255
176
  const generateKey = (): string => {
256
177
  const gShareBaseURL = FireworkSDK.getInstance().shareBaseURL ?? '';
257
178
  const appLanguage = FireworkSDK.getInstance().appLanguage ?? '';
179
+ const videoLaunchBehavior =
180
+ FireworkSDK.getInstance().videoLaunchBehavior ?? '';
258
181
  const adBadgeConfiguration =
259
182
  FireworkSDK.getInstance().adBadgeConfiguration ?? {};
260
183
  const adBadgeTextType = adBadgeConfiguration.badgeTextType ?? '';
261
184
  const backgroundColorOfAdBadge = adBadgeConfiguration.backgroundColor ?? '';
262
185
  const textColorOfAdBadge = adBadgeConfiguration.textColor ?? '';
263
- const videoLaunchBehavior =
264
- FireworkSDK.getInstance().videoLaunchBehavior ?? 'default';
186
+ const androidFontIsCustomOfAdBadge =
187
+ adBadgeConfiguration.androidFontInfo?.isCustom?.toString() ?? '';
188
+ const androidFontTypefaceNameOfAdBadge =
189
+ adBadgeConfiguration.androidFontInfo?.typefaceName ?? '';
265
190
 
266
191
  const {
267
192
  source,
@@ -270,11 +195,30 @@ const StoryBlock: ForwardRefRenderFunction<
270
195
  hashtagFilterExpression = '',
271
196
  enablePictureInPicture = false,
272
197
  adConfiguration,
198
+ storyBlockConfiguration,
273
199
  } = props;
274
200
  const dynamicContentParametersString =
275
201
  generateDynamicContentParametersString();
276
202
 
277
- const requiresAds = adConfiguration?.requiresAds ?? false;
203
+ const videoCompleteAction =
204
+ storyBlockConfiguration?.videoCompleteAction ?? '';
205
+ const showShareButton =
206
+ storyBlockConfiguration?.showShareButton?.toString() ?? '';
207
+ const showPlaybackButton =
208
+ storyBlockConfiguration?.showPlaybackButton?.toString() ?? '';
209
+ const showBranding =
210
+ storyBlockConfiguration?.showBranding?.toString() ?? '';
211
+ const ctaDelayType = storyBlockConfiguration?.ctaDelay?.type ?? '';
212
+ const ctaDelayValue =
213
+ storyBlockConfiguration?.ctaDelay?.value?.toFixed(5) ?? '';
214
+ const ctaHighlightDelayType =
215
+ storyBlockConfiguration?.ctaHighlightDelay?.type ?? '';
216
+ const ctaHighlightDelayValue =
217
+ storyBlockConfiguration?.ctaHighlightDelay?.value?.toFixed(5) ?? '';
218
+ const shareBaseURL = storyBlockConfiguration?.shareBaseURL ?? '';
219
+ const ctaWidth = storyBlockConfiguration?.ctaWidth ?? '';
220
+
221
+ const requiresAds = adConfiguration?.requiresAds?.toString() ?? '';
278
222
  const adsFetchTimeout = adConfiguration?.adsFetchTimeout ?? 10;
279
223
  const vastAttributesString = generateVastAttributesString();
280
224
 
@@ -282,10 +226,14 @@ const StoryBlock: ForwardRefRenderFunction<
282
226
  if (Platform.OS === 'ios') {
283
227
  key += `_appLanguage:${appLanguage}`;
284
228
  }
229
+ key += `_videoLaunchBehavior:${videoLaunchBehavior}`;
285
230
  key += `_adBadgeTextType:${adBadgeTextType}`;
286
231
  key += `_backgroundColorOfAdBadge:${backgroundColorOfAdBadge}`;
287
232
  key += `_textColorOfAdBadge:${textColorOfAdBadge}`;
288
- key += `_videoLaunchBehavior:${videoLaunchBehavior}`;
233
+ if (Platform.OS === 'android') {
234
+ key += `_androidFontIsCustomOfAdBadge${androidFontIsCustomOfAdBadge}`;
235
+ key += `_androidFontTypefaceNameOfAdBadge${androidFontTypefaceNameOfAdBadge}`;
236
+ }
289
237
 
290
238
  key += `_source:${source}`;
291
239
  key += `_channel:${channel}`;
@@ -294,6 +242,19 @@ const StoryBlock: ForwardRefRenderFunction<
294
242
  key += `_hashtagFilterExpression:${hashtagFilterExpression}`;
295
243
  key += `_enablePictureInPicture:${enablePictureInPicture}`;
296
244
 
245
+ key += `_shareBaseURL:${shareBaseURL}`;
246
+ if (Platform.OS === 'android') {
247
+ key += `_videoCompleteAction:${videoCompleteAction}`;
248
+ key += `_showShareButton:${showShareButton}`;
249
+ key += `_showPlaybackButton:${showPlaybackButton}`;
250
+ key += `_showBranding:${showBranding}`;
251
+ key += `_ctaDelayType:${ctaDelayType}`;
252
+ key += `_ctaDelayValue:${ctaDelayValue}`;
253
+ key += `_ctaHighlightDelayType:${ctaHighlightDelayType}`;
254
+ key += `_ctaHighlightDelayValue:${ctaHighlightDelayValue}`;
255
+ key += `_ctaWidth:${ctaWidth}`;
256
+ }
257
+
297
258
  key += `_requiresAds:${requiresAds}`;
298
259
  key += `_adsFetchTimeout:${adsFetchTimeout}`;
299
260
  key += `_vastAttributes:${vastAttributesString}`;
@@ -301,6 +262,106 @@ const StoryBlock: ForwardRefRenderFunction<
301
262
  return key;
302
263
  };
303
264
 
265
+ const key = generateKey();
266
+
267
+ useImperativeHandle(
268
+ forwardedRef,
269
+ () => {
270
+ const sendCommand = (command: string) => {
271
+ const nativeNodeHandle = findNodeHandle(nativeComponentRef.current);
272
+
273
+ let commandId: string | number =
274
+ UIManager.getViewManagerConfig(NativeComponentName).Commands[command];
275
+ if (Platform.OS === 'android') {
276
+ commandId = commandId.toString();
277
+ }
278
+
279
+ UIManager.dispatchViewManagerCommand(
280
+ findNodeHandle(nativeNodeHandle),
281
+ commandId,
282
+ []
283
+ );
284
+ };
285
+ return {
286
+ play: () => {
287
+ sendCommand('play');
288
+ },
289
+ pause: () => {
290
+ sendCommand('pause');
291
+ },
292
+ };
293
+ },
294
+ []
295
+ );
296
+
297
+ useEffect(() => {
298
+ const subscriptionOfShareBaseURLUpdated =
299
+ FireworkSDKModuleEventEmitter.addListener(
300
+ FWEventName.ShareBaseURLUpdated,
301
+ () => {
302
+ FWLoggerUtil.log('Receive FWEventName.ShareBaseURLUpdated');
303
+ forceUpdate();
304
+ }
305
+ );
306
+ const subscriptionOfAdBadgeConfigurationUpdated =
307
+ FireworkSDKModuleEventEmitter.addListener(
308
+ FWEventName.AdBadgeConfigurationUpdated,
309
+ () => {
310
+ FWLoggerUtil.log('Receive FWEventName.AdBadgeConfigurationUpdated');
311
+ forceUpdate();
312
+ }
313
+ );
314
+
315
+ const subscriptionOfVideoLaunchBehaviorUpdated =
316
+ FireworkSDKModuleEventEmitter.addListener(
317
+ FWEventName.VideoLaunchBehaviorUpdated,
318
+ () => {
319
+ FWLoggerUtil.log('Receive FWEventName.VideoLaunchBehaviorUpdated');
320
+ forceUpdate();
321
+ }
322
+ );
323
+
324
+ const subscriptionOfAppLanguageUpdated =
325
+ FireworkSDKModuleEventEmitter.addListener(
326
+ FWEventName.AppLanguageUpdated,
327
+ () => {
328
+ FWLoggerUtil.log('Receive FWEventName.AppLanguageUpdated');
329
+ if (Platform.OS === 'android') {
330
+ forceUpdate();
331
+ }
332
+ }
333
+ );
334
+
335
+ return () => {
336
+ subscriptionOfShareBaseURLUpdated.remove();
337
+ subscriptionOfAdBadgeConfigurationUpdated.remove();
338
+ subscriptionOfVideoLaunchBehaviorUpdated.remove();
339
+ subscriptionOfAppLanguageUpdated.remove();
340
+ };
341
+ }, []);
342
+
343
+ useEffect(() => {
344
+ if (Platform.OS === 'android') {
345
+ setTimeout(() => {
346
+ const viewId = findNodeHandle(nativeComponentRef.current);
347
+ FWLoggerUtil.log(`StoryBlock createFragment viewId: ${viewId}`);
348
+ UIManager.dispatchViewManagerCommand(
349
+ viewId,
350
+ UIManager.getViewManagerConfig(
351
+ NativeComponentName
352
+ ).Commands.create.toString(),
353
+ [viewId]
354
+ );
355
+ }, 500);
356
+ }
357
+ }, [key]);
358
+
359
+ useEffect(() => {
360
+ FWGlobalState.getInstance().sdkInitCalledPromise.then(() => {
361
+ setSdkInitCalled(true);
362
+ });
363
+ }, []);
364
+
304
365
  useEffect(() => {
305
366
  if (Platform.OS === 'android') {
306
367
  const onBackPress = () => {
@@ -322,17 +383,19 @@ const StoryBlock: ForwardRefRenderFunction<
322
383
  return;
323
384
  }, [isFullscreenState]);
324
385
 
325
- const { style } = props;
386
+ if (!sdkInitCalled) {
387
+ return null;
388
+ }
389
+
326
390
  return (
327
391
  <FWStoryBlock
328
392
  ref={nativeComponentRef}
329
- key={generateKey()}
393
+ key={key}
330
394
  {...props}
331
395
  onStoryBlockLoadFinished={handleStoryBlockLoadFinished}
332
396
  onStoryBlockFullScreenStateChanged={
333
- handleStoryBlockFullscreenStateChanged
397
+ handleStoryBlockFullScreenStateChanged
334
398
  }
335
- style={Object.assign({}, style, { zIndex: -1 })}
336
399
  />
337
400
  );
338
401
  };