react-native-firework-sdk 1.0.0-beta

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 (190) hide show
  1. package/README.md +39 -0
  2. package/android/build.gradle +193 -0
  3. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  4. package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
  5. package/android/gradle.properties +5 -0
  6. package/android/gradlew +185 -0
  7. package/android/gradlew.bat +89 -0
  8. package/android/publish.gradle +65 -0
  9. package/android/src/main/AndroidManifest.xml +16 -0
  10. package/android/src/main/java/com/reactnativefireworksdk/FireworkSDKPackage.kt +20 -0
  11. package/android/src/main/java/com/reactnativefireworksdk/components/videofeed/FWVideoFeed.kt +123 -0
  12. package/android/src/main/java/com/reactnativefireworksdk/constants/FWCommandConstant.kt +6 -0
  13. package/android/src/main/java/com/reactnativefireworksdk/constants/FWVideoPlayerConstant.kt +20 -0
  14. package/android/src/main/java/com/reactnativefireworksdk/manager/FWVideoFeedManager.kt +88 -0
  15. package/android/src/main/java/com/reactnativefireworksdk/models/FWEventName.kt +35 -0
  16. package/android/src/main/java/com/reactnativefireworksdk/models/FWVideoFeedConfigModel.kt +27 -0
  17. package/android/src/main/java/com/reactnativefireworksdk/models/FWVideoFeedItemDetailsModel.kt +11 -0
  18. package/android/src/main/java/com/reactnativefireworksdk/models/FWVideoFeedMode.kt +7 -0
  19. package/android/src/main/java/com/reactnativefireworksdk/models/FWVideoFeedSource.kt +7 -0
  20. package/android/src/main/java/com/reactnativefireworksdk/models/FWVideoFeedTitlePosition.kt +7 -0
  21. package/android/src/main/java/com/reactnativefireworksdk/models/FWVideoPlaybackDetails.kt +19 -0
  22. package/android/src/main/java/com/reactnativefireworksdk/models/FWVideoPlayerConfigModel.kt +20 -0
  23. package/android/src/main/java/com/reactnativefireworksdk/models/FWVideoShoppingInterface.kt +13 -0
  24. package/android/src/main/java/com/reactnativefireworksdk/models/FWVideoShoppingProduct.kt +34 -0
  25. package/android/src/main/java/com/reactnativefireworksdk/models/FireworkSDKInterface.kt +12 -0
  26. package/android/src/main/java/com/reactnativefireworksdk/module/FWVideoShoppingModule.kt +190 -0
  27. package/android/src/main/java/com/reactnativefireworksdk/module/FireworkSDKModule.kt +248 -0
  28. package/android/src/main/java/com/reactnativefireworksdk/pages/FWVideoShoppingCartActivity.kt +43 -0
  29. package/android/src/main/java/com/reactnativefireworksdk/utils/FWEventUtils.kt +127 -0
  30. package/android/src/main/java/com/reactnativefireworksdk/utils/FWJsonUtils.kt +57 -0
  31. package/android/src/main/java/com/reactnativefireworksdk/utils/FWLogUtils.kt +147 -0
  32. package/android/src/main/java/com/reactnativefireworksdk/utils/FWUrlUtils.kt +68 -0
  33. package/android/src/main/java/com/reactnativefireworksdk/utils/FWVideoPlayerUtils.kt +18 -0
  34. package/android/src/main/res/layout/fwrn_fragment_shoppingcart.xml +8 -0
  35. package/android/src/main/res/layout/fwrn_fragment_videofeed.xml +20 -0
  36. package/android/src/main/res/values/styles.xml +43 -0
  37. package/ios/Component/VideoFeed.swift +262 -0
  38. package/ios/Component/VideoFeedConfiguration.swift +32 -0
  39. package/ios/Component/VideoFeedManager.m +51 -0
  40. package/ios/Component/VideoFeedManager.swift +40 -0
  41. package/ios/Component/VideoPlayerConfiguration.swift +30 -0
  42. package/ios/FireworkSdk-Bridging-Header.h +6 -0
  43. package/ios/FireworkSdk.xcodeproj/project.pbxproj +291 -0
  44. package/ios/Models/FireworkJsEvent.swift +34 -0
  45. package/ios/Models/FireworkSDK+JsModel.swift +62 -0
  46. package/ios/Models/RCTConvert+FireworkSDKModule.swift +91 -0
  47. package/ios/Models/RCTConvert+Shopping.swift +49 -0
  48. package/ios/Models/RCTConvert+VideoFeed.swift +69 -0
  49. package/ios/Modules/FireworkSDKModule/FireworkSDKModule+CTA.swift +17 -0
  50. package/ios/Modules/FireworkSDKModule/FireworkSDKModule+EventTracking.swift +74 -0
  51. package/ios/Modules/FireworkSDKModule/FireworkSDKModule.m +19 -0
  52. package/ios/Modules/FireworkSDKModule/FireworkSDKModule.swift +106 -0
  53. package/ios/Modules/FireworkSDKModule/MobileADConfiguration.swift +17 -0
  54. package/ios/Modules/Shopping/CartViewController.swift +98 -0
  55. package/ios/Modules/Shopping/Product.swift +33 -0
  56. package/ios/Modules/Shopping/ProductInfoViewConfiguration.swift +24 -0
  57. package/ios/Modules/Shopping/ShoppingModule.m +19 -0
  58. package/ios/Modules/Shopping/ShoppingModule.swift +214 -0
  59. package/ios/Utils/String+Color.swift +38 -0
  60. package/ios/Utils/UIView+Constraints.swift +91 -0
  61. package/ios/Utils/UIView+ParentViewController.swift +21 -0
  62. package/ios/Utils/UIViewController+AttachChild.swift +69 -0
  63. package/lib/commonjs/FireworkSDK.js +171 -0
  64. package/lib/commonjs/FireworkSDK.js.map +1 -0
  65. package/lib/commonjs/VideoShopping.js +146 -0
  66. package/lib/commonjs/VideoShopping.js.map +1 -0
  67. package/lib/commonjs/components/CartContainer.js +35 -0
  68. package/lib/commonjs/components/CartContainer.js.map +1 -0
  69. package/lib/commonjs/components/FWVideoFeed.js +18 -0
  70. package/lib/commonjs/components/FWVideoFeed.js.map +1 -0
  71. package/lib/commonjs/components/VideoFeed.js +82 -0
  72. package/lib/commonjs/components/VideoFeed.js.map +1 -0
  73. package/lib/commonjs/constants/FWErrorMessage.js +15 -0
  74. package/lib/commonjs/constants/FWErrorMessage.js.map +1 -0
  75. package/lib/commonjs/index.js +44 -0
  76. package/lib/commonjs/index.js.map +1 -0
  77. package/lib/commonjs/models/ADConfig.js +2 -0
  78. package/lib/commonjs/models/ADConfig.js.map +1 -0
  79. package/lib/commonjs/models/AddToCartResult.js +2 -0
  80. package/lib/commonjs/models/AddToCartResult.js.map +1 -0
  81. package/lib/commonjs/models/FWError.js +2 -0
  82. package/lib/commonjs/models/FWError.js.map +1 -0
  83. package/lib/commonjs/models/FWEvents.js +20 -0
  84. package/lib/commonjs/models/FWEvents.js.map +1 -0
  85. package/lib/commonjs/models/FeedItemDetails.js +2 -0
  86. package/lib/commonjs/models/FeedItemDetails.js.map +1 -0
  87. package/lib/commonjs/models/Product.js +2 -0
  88. package/lib/commonjs/models/Product.js.map +1 -0
  89. package/lib/commonjs/models/ProductInfoViewConfiguration.js +2 -0
  90. package/lib/commonjs/models/ProductInfoViewConfiguration.js.map +1 -0
  91. package/lib/commonjs/models/ProductUnit.js +2 -0
  92. package/lib/commonjs/models/ProductUnit.js.map +1 -0
  93. package/lib/commonjs/models/VideoFeedConfiguration.js +2 -0
  94. package/lib/commonjs/models/VideoFeedConfiguration.js.map +1 -0
  95. package/lib/commonjs/models/VideoPlaybackDetails.js +2 -0
  96. package/lib/commonjs/models/VideoPlaybackDetails.js.map +1 -0
  97. package/lib/commonjs/models/VideoPlaybackEventName.js +23 -0
  98. package/lib/commonjs/models/VideoPlaybackEventName.js.map +1 -0
  99. package/lib/commonjs/models/VideoPlayerConfiguration.js +2 -0
  100. package/lib/commonjs/models/VideoPlayerConfiguration.js.map +1 -0
  101. package/lib/commonjs/modules/FireworkSDKModule.js +20 -0
  102. package/lib/commonjs/modules/FireworkSDKModule.js.map +1 -0
  103. package/lib/commonjs/modules/ShoppingModule.js +20 -0
  104. package/lib/commonjs/modules/ShoppingModule.js.map +1 -0
  105. package/lib/module/FireworkSDK.js +153 -0
  106. package/lib/module/FireworkSDK.js.map +1 -0
  107. package/lib/module/VideoShopping.js +134 -0
  108. package/lib/module/VideoShopping.js.map +1 -0
  109. package/lib/module/components/CartContainer.js +18 -0
  110. package/lib/module/components/CartContainer.js.map +1 -0
  111. package/lib/module/components/FWVideoFeed.js +8 -0
  112. package/lib/module/components/FWVideoFeed.js.map +1 -0
  113. package/lib/module/components/VideoFeed.js +66 -0
  114. package/lib/module/components/VideoFeed.js.map +1 -0
  115. package/lib/module/constants/FWErrorMessage.js +7 -0
  116. package/lib/module/constants/FWErrorMessage.js.map +1 -0
  117. package/lib/module/index.js +10 -0
  118. package/lib/module/index.js.map +1 -0
  119. package/lib/module/models/ADConfig.js +2 -0
  120. package/lib/module/models/ADConfig.js.map +1 -0
  121. package/lib/module/models/AddToCartResult.js +2 -0
  122. package/lib/module/models/AddToCartResult.js.map +1 -0
  123. package/lib/module/models/FWError.js +2 -0
  124. package/lib/module/models/FWError.js.map +1 -0
  125. package/lib/module/models/FWEvents.js +13 -0
  126. package/lib/module/models/FWEvents.js.map +1 -0
  127. package/lib/module/models/FeedItemDetails.js +2 -0
  128. package/lib/module/models/FeedItemDetails.js.map +1 -0
  129. package/lib/module/models/Product.js +2 -0
  130. package/lib/module/models/Product.js.map +1 -0
  131. package/lib/module/models/ProductInfoViewConfiguration.js +2 -0
  132. package/lib/module/models/ProductInfoViewConfiguration.js.map +1 -0
  133. package/lib/module/models/ProductUnit.js +2 -0
  134. package/lib/module/models/ProductUnit.js.map +1 -0
  135. package/lib/module/models/VideoFeedConfiguration.js +2 -0
  136. package/lib/module/models/VideoFeedConfiguration.js.map +1 -0
  137. package/lib/module/models/VideoPlaybackDetails.js +2 -0
  138. package/lib/module/models/VideoPlaybackDetails.js.map +1 -0
  139. package/lib/module/models/VideoPlaybackEventName.js +16 -0
  140. package/lib/module/models/VideoPlaybackEventName.js.map +1 -0
  141. package/lib/module/models/VideoPlayerConfiguration.js +2 -0
  142. package/lib/module/models/VideoPlayerConfiguration.js.map +1 -0
  143. package/lib/module/modules/FireworkSDKModule.js +10 -0
  144. package/lib/module/modules/FireworkSDKModule.js.map +1 -0
  145. package/lib/module/modules/ShoppingModule.js +10 -0
  146. package/lib/module/modules/ShoppingModule.js.map +1 -0
  147. package/lib/typescript/FireworkSDK.d.ts +74 -0
  148. package/lib/typescript/VideoShopping.d.ts +54 -0
  149. package/lib/typescript/components/CartContainer.d.ts +3 -0
  150. package/lib/typescript/components/FWVideoFeed.d.ts +2 -0
  151. package/lib/typescript/components/VideoFeed.d.ts +53 -0
  152. package/lib/typescript/constants/FWErrorMessage.d.ts +2 -0
  153. package/lib/typescript/index.d.ts +25 -0
  154. package/lib/typescript/models/ADConfig.d.ts +10 -0
  155. package/lib/typescript/models/AddToCartResult.d.ts +10 -0
  156. package/lib/typescript/models/FWError.d.ts +10 -0
  157. package/lib/typescript/models/FWEvents.d.ts +55 -0
  158. package/lib/typescript/models/FeedItemDetails.d.ts +14 -0
  159. package/lib/typescript/models/Product.d.ts +19 -0
  160. package/lib/typescript/models/ProductInfoViewConfiguration.d.ts +18 -0
  161. package/lib/typescript/models/ProductUnit.d.ts +22 -0
  162. package/lib/typescript/models/VideoFeedConfiguration.d.ts +32 -0
  163. package/lib/typescript/models/VideoPlaybackDetails.d.ts +31 -0
  164. package/lib/typescript/models/VideoPlaybackEventName.d.ts +39 -0
  165. package/lib/typescript/models/VideoPlayerConfiguration.d.ts +25 -0
  166. package/lib/typescript/modules/FireworkSDKModule.d.ts +12 -0
  167. package/lib/typescript/modules/ShoppingModule.d.ts +13 -0
  168. package/package.json +147 -0
  169. package/react-native-firework-sdk.podspec +22 -0
  170. package/src/FireworkSDK.ts +153 -0
  171. package/src/VideoShopping.ts +165 -0
  172. package/src/components/CartContainer.tsx +20 -0
  173. package/src/components/FWVideoFeed.tsx +10 -0
  174. package/src/components/VideoFeed.tsx +109 -0
  175. package/src/constants/FWErrorMessage.ts +11 -0
  176. package/src/index.tsx +109 -0
  177. package/src/models/ADConfig.ts +10 -0
  178. package/src/models/AddToCartResult.ts +10 -0
  179. package/src/models/FWError.ts +10 -0
  180. package/src/models/FWEvents.ts +63 -0
  181. package/src/models/FeedItemDetails.ts +14 -0
  182. package/src/models/Product.ts +20 -0
  183. package/src/models/ProductInfoViewConfiguration.ts +20 -0
  184. package/src/models/ProductUnit.ts +23 -0
  185. package/src/models/VideoFeedConfiguration.ts +35 -0
  186. package/src/models/VideoPlaybackDetails.ts +33 -0
  187. package/src/models/VideoPlaybackEventName.ts +40 -0
  188. package/src/models/VideoPlayerConfiguration.ts +26 -0
  189. package/src/modules/FireworkSDKModule.ts +27 -0
  190. package/src/modules/ShoppingModule.ts +29 -0
@@ -0,0 +1,291 @@
1
+ // !$*UTF8*$!
2
+ {
3
+ archiveVersion = 1;
4
+ classes = {
5
+ };
6
+ objectVersion = 46;
7
+ objects = {
8
+
9
+ /* Begin PBXBuildFile section */
10
+ 1F6F718C2771B48200224AF3 /* FireworkSdk+EventTracking.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F6F71862771B48100224AF3 /* FireworkSdk+EventTracking.swift */; };
11
+ 1F6F718D2771B48200224AF3 /* FireworkSdk.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F6F71882771B48100224AF3 /* FireworkSdk.swift */; };
12
+ 1F6F718E2771B48200224AF3 /* FireworkSdk+CTA.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F6F71892771B48100224AF3 /* FireworkSdk+CTA.swift */; };
13
+ 1F6F718F2771B48200224AF3 /* FireworkSdk.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F6F718B2771B48200224AF3 /* FireworkSdk.m */; };
14
+ /* End PBXBuildFile section */
15
+
16
+ /* Begin PBXCopyFilesBuildPhase section */
17
+ 58B511D91A9E6C8500147676 /* CopyFiles */ = {
18
+ isa = PBXCopyFilesBuildPhase;
19
+ buildActionMask = 2147483647;
20
+ dstPath = "include/$(PRODUCT_NAME)";
21
+ dstSubfolderSpec = 16;
22
+ files = (
23
+ );
24
+ runOnlyForDeploymentPostprocessing = 0;
25
+ };
26
+ /* End PBXCopyFilesBuildPhase section */
27
+
28
+ /* Begin PBXFileReference section */
29
+ 134814201AA4EA6300B7C361 /* libFireworkSdk.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libFireworkSdk.a; sourceTree = BUILT_PRODUCTS_DIR; };
30
+ 1F6F71862771B48100224AF3 /* FireworkSdk+EventTracking.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "FireworkSdk+EventTracking.swift"; sourceTree = "<group>"; };
31
+ 1F6F71872771B48100224AF3 /* Models */ = {isa = PBXFileReference; lastKnownFileType = folder; path = Models; sourceTree = "<group>"; };
32
+ 1F6F71882771B48100224AF3 /* FireworkSdk.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FireworkSdk.swift; sourceTree = "<group>"; };
33
+ 1F6F71892771B48100224AF3 /* FireworkSdk+CTA.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "FireworkSdk+CTA.swift"; sourceTree = "<group>"; };
34
+ 1F6F718A2771B48100224AF3 /* FireworkSdk-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "FireworkSdk-Bridging-Header.h"; sourceTree = "<group>"; };
35
+ 1F6F718B2771B48200224AF3 /* FireworkSdk.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FireworkSdk.m; sourceTree = "<group>"; };
36
+ /* End PBXFileReference section */
37
+
38
+ /* Begin PBXFrameworksBuildPhase section */
39
+ 58B511D81A9E6C8500147676 /* Frameworks */ = {
40
+ isa = PBXFrameworksBuildPhase;
41
+ buildActionMask = 2147483647;
42
+ files = (
43
+ );
44
+ runOnlyForDeploymentPostprocessing = 0;
45
+ };
46
+ /* End PBXFrameworksBuildPhase section */
47
+
48
+ /* Begin PBXGroup section */
49
+ 134814211AA4EA7D00B7C361 /* Products */ = {
50
+ isa = PBXGroup;
51
+ children = (
52
+ 134814201AA4EA6300B7C361 /* libFireworkSdk.a */,
53
+ );
54
+ name = Products;
55
+ sourceTree = "<group>";
56
+ };
57
+ 58B511D21A9E6C8500147676 = {
58
+ isa = PBXGroup;
59
+ children = (
60
+ 1F6F718A2771B48100224AF3 /* FireworkSdk-Bridging-Header.h */,
61
+ 1F6F718B2771B48200224AF3 /* FireworkSdk.m */,
62
+ 1F6F71882771B48100224AF3 /* FireworkSdk.swift */,
63
+ 1F6F71892771B48100224AF3 /* FireworkSdk+CTA.swift */,
64
+ 1F6F71862771B48100224AF3 /* FireworkSdk+EventTracking.swift */,
65
+ 1F6F71872771B48100224AF3 /* Models */,
66
+ 134814211AA4EA7D00B7C361 /* Products */,
67
+ );
68
+ sourceTree = "<group>";
69
+ };
70
+ /* End PBXGroup section */
71
+
72
+ /* Begin PBXNativeTarget section */
73
+ 58B511DA1A9E6C8500147676 /* FireworkSdk */ = {
74
+ isa = PBXNativeTarget;
75
+ buildConfigurationList = 58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget "FireworkSdk" */;
76
+ buildPhases = (
77
+ 58B511D71A9E6C8500147676 /* Sources */,
78
+ 58B511D81A9E6C8500147676 /* Frameworks */,
79
+ 58B511D91A9E6C8500147676 /* CopyFiles */,
80
+ );
81
+ buildRules = (
82
+ );
83
+ dependencies = (
84
+ );
85
+ name = FireworkSdk;
86
+ productName = RCTDataManager;
87
+ productReference = 134814201AA4EA6300B7C361 /* libFireworkSdk.a */;
88
+ productType = "com.apple.product-type.library.static";
89
+ };
90
+ /* End PBXNativeTarget section */
91
+
92
+ /* Begin PBXProject section */
93
+ 58B511D31A9E6C8500147676 /* Project object */ = {
94
+ isa = PBXProject;
95
+ attributes = {
96
+ LastUpgradeCheck = 0920;
97
+ ORGANIZATIONNAME = Facebook;
98
+ TargetAttributes = {
99
+ 58B511DA1A9E6C8500147676 = {
100
+ CreatedOnToolsVersion = 6.1.1;
101
+ };
102
+ };
103
+ };
104
+ buildConfigurationList = 58B511D61A9E6C8500147676 /* Build configuration list for PBXProject "FireworkSdk" */;
105
+ compatibilityVersion = "Xcode 3.2";
106
+ developmentRegion = English;
107
+ hasScannedForEncodings = 0;
108
+ knownRegions = (
109
+ English,
110
+ en,
111
+ );
112
+ mainGroup = 58B511D21A9E6C8500147676;
113
+ productRefGroup = 58B511D21A9E6C8500147676;
114
+ projectDirPath = "";
115
+ projectRoot = "";
116
+ targets = (
117
+ 58B511DA1A9E6C8500147676 /* FireworkSdk */,
118
+ );
119
+ };
120
+ /* End PBXProject section */
121
+
122
+ /* Begin PBXSourcesBuildPhase section */
123
+ 58B511D71A9E6C8500147676 /* Sources */ = {
124
+ isa = PBXSourcesBuildPhase;
125
+ buildActionMask = 2147483647;
126
+ files = (
127
+ 1F6F718E2771B48200224AF3 /* FireworkSdk+CTA.swift in Sources */,
128
+ 1F6F718C2771B48200224AF3 /* FireworkSdk+EventTracking.swift in Sources */,
129
+ 1F6F718D2771B48200224AF3 /* FireworkSdk.swift in Sources */,
130
+ 1F6F718F2771B48200224AF3 /* FireworkSdk.m in Sources */,
131
+ );
132
+ runOnlyForDeploymentPostprocessing = 0;
133
+ };
134
+ /* End PBXSourcesBuildPhase section */
135
+
136
+ /* Begin XCBuildConfiguration section */
137
+ 58B511ED1A9E6C8500147676 /* Debug */ = {
138
+ isa = XCBuildConfiguration;
139
+ buildSettings = {
140
+ ALWAYS_SEARCH_USER_PATHS = NO;
141
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
142
+ CLANG_CXX_LIBRARY = "libc++";
143
+ CLANG_ENABLE_MODULES = YES;
144
+ CLANG_ENABLE_OBJC_ARC = YES;
145
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
146
+ CLANG_WARN_BOOL_CONVERSION = YES;
147
+ CLANG_WARN_COMMA = YES;
148
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
149
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
150
+ CLANG_WARN_EMPTY_BODY = YES;
151
+ CLANG_WARN_ENUM_CONVERSION = YES;
152
+ CLANG_WARN_INFINITE_RECURSION = YES;
153
+ CLANG_WARN_INT_CONVERSION = YES;
154
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
155
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
156
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
157
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
158
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
159
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
160
+ CLANG_WARN_UNREACHABLE_CODE = YES;
161
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
162
+ COPY_PHASE_STRIP = NO;
163
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
164
+ ENABLE_TESTABILITY = YES;
165
+ GCC_C_LANGUAGE_STANDARD = gnu99;
166
+ GCC_DYNAMIC_NO_PIC = NO;
167
+ GCC_NO_COMMON_BLOCKS = YES;
168
+ GCC_OPTIMIZATION_LEVEL = 0;
169
+ GCC_PREPROCESSOR_DEFINITIONS = (
170
+ "DEBUG=1",
171
+ "$(inherited)",
172
+ );
173
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
174
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
175
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
176
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
177
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
178
+ GCC_WARN_UNUSED_FUNCTION = YES;
179
+ GCC_WARN_UNUSED_VARIABLE = YES;
180
+ IPHONEOS_DEPLOYMENT_TARGET = 8.0;
181
+ MTL_ENABLE_DEBUG_INFO = YES;
182
+ ONLY_ACTIVE_ARCH = YES;
183
+ SDKROOT = iphoneos;
184
+ };
185
+ name = Debug;
186
+ };
187
+ 58B511EE1A9E6C8500147676 /* Release */ = {
188
+ isa = XCBuildConfiguration;
189
+ buildSettings = {
190
+ ALWAYS_SEARCH_USER_PATHS = NO;
191
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
192
+ CLANG_CXX_LIBRARY = "libc++";
193
+ CLANG_ENABLE_MODULES = YES;
194
+ CLANG_ENABLE_OBJC_ARC = YES;
195
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
196
+ CLANG_WARN_BOOL_CONVERSION = YES;
197
+ CLANG_WARN_COMMA = YES;
198
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
199
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
200
+ CLANG_WARN_EMPTY_BODY = YES;
201
+ CLANG_WARN_ENUM_CONVERSION = YES;
202
+ CLANG_WARN_INFINITE_RECURSION = YES;
203
+ CLANG_WARN_INT_CONVERSION = YES;
204
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
205
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
206
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
207
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
208
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
209
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
210
+ CLANG_WARN_UNREACHABLE_CODE = YES;
211
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
212
+ COPY_PHASE_STRIP = YES;
213
+ ENABLE_NS_ASSERTIONS = NO;
214
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
215
+ GCC_C_LANGUAGE_STANDARD = gnu99;
216
+ GCC_NO_COMMON_BLOCKS = YES;
217
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
218
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
219
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
220
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
221
+ GCC_WARN_UNUSED_FUNCTION = YES;
222
+ GCC_WARN_UNUSED_VARIABLE = YES;
223
+ IPHONEOS_DEPLOYMENT_TARGET = 8.0;
224
+ MTL_ENABLE_DEBUG_INFO = NO;
225
+ SDKROOT = iphoneos;
226
+ VALIDATE_PRODUCT = YES;
227
+ };
228
+ name = Release;
229
+ };
230
+ 58B511F01A9E6C8500147676 /* Debug */ = {
231
+ isa = XCBuildConfiguration;
232
+ buildSettings = {
233
+ HEADER_SEARCH_PATHS = (
234
+ "$(inherited)",
235
+ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
236
+ "$(SRCROOT)/../../../React/**",
237
+ "$(SRCROOT)/../../react-native/React/**",
238
+ );
239
+ LIBRARY_SEARCH_PATHS = "$(inherited)";
240
+ OTHER_LDFLAGS = "-ObjC";
241
+ PRODUCT_NAME = FireworkSdk;
242
+ SKIP_INSTALL = YES;
243
+ SWIFT_OBJC_BRIDGING_HEADER = "FireworkSdk-Bridging-Header.h";
244
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
245
+ SWIFT_VERSION = 5.0;
246
+ };
247
+ name = Debug;
248
+ };
249
+ 58B511F11A9E6C8500147676 /* Release */ = {
250
+ isa = XCBuildConfiguration;
251
+ buildSettings = {
252
+ HEADER_SEARCH_PATHS = (
253
+ "$(inherited)",
254
+ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
255
+ "$(SRCROOT)/../../../React/**",
256
+ "$(SRCROOT)/../../react-native/React/**",
257
+ );
258
+ LIBRARY_SEARCH_PATHS = "$(inherited)";
259
+ OTHER_LDFLAGS = "-ObjC";
260
+ PRODUCT_NAME = FireworkSdk;
261
+ SKIP_INSTALL = YES;
262
+ SWIFT_OBJC_BRIDGING_HEADER = "FireworkSdk-Bridging-Header.h";
263
+ SWIFT_VERSION = 5.0;
264
+ };
265
+ name = Release;
266
+ };
267
+ /* End XCBuildConfiguration section */
268
+
269
+ /* Begin XCConfigurationList section */
270
+ 58B511D61A9E6C8500147676 /* Build configuration list for PBXProject "FireworkSdk" */ = {
271
+ isa = XCConfigurationList;
272
+ buildConfigurations = (
273
+ 58B511ED1A9E6C8500147676 /* Debug */,
274
+ 58B511EE1A9E6C8500147676 /* Release */,
275
+ );
276
+ defaultConfigurationIsVisible = 0;
277
+ defaultConfigurationName = Release;
278
+ };
279
+ 58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget "FireworkSdk" */ = {
280
+ isa = XCConfigurationList;
281
+ buildConfigurations = (
282
+ 58B511F01A9E6C8500147676 /* Debug */,
283
+ 58B511F11A9E6C8500147676 /* Release */,
284
+ );
285
+ defaultConfigurationIsVisible = 0;
286
+ defaultConfigurationName = Release;
287
+ };
288
+ /* End XCConfigurationList section */
289
+ };
290
+ rootObject = 58B511D31A9E6C8500147676 /* Project object */;
291
+ }
@@ -0,0 +1,34 @@
1
+ //
2
+ // FireworkJsEvent.swift
3
+ // react-native-firework-sdk
4
+ //
5
+ // Created by Jeff Zheng on 2021/12/21.
6
+ //
7
+
8
+ import Foundation
9
+
10
+ enum FWEventName: String, CaseIterable {
11
+ case SDKInit = "fw:sdk-init"
12
+ case CustomCTAClick = "fw:custom-cta-click"
13
+ case VideoPlayback = "fw:video-playback"
14
+ case VideoFeedClick = "fw:video-feed-click"
15
+ }
16
+
17
+ enum VideoPlaybackSubEventName: String {
18
+ case Impression = "fw:video:impression"
19
+ case Start = "fw:video:start"
20
+ case FirstQuartile = "fw:video:first-quartile"
21
+ case Midpoint = "fw:video:midpoint"
22
+ case ThirdQuartile = "fw:video:third-quartile"
23
+ case Complete = "fw:video:complete"
24
+ case AdEnd = "fw:video:ad-end"
25
+ case ClickCTA = "fw:video:click-cta"
26
+ case ClickShare = "fw:video:click-share"
27
+ }
28
+
29
+ enum ShoppingEventName: String, CaseIterable {
30
+ case UpdateProductDetails = "fw:shopping:update-product-details"
31
+ case WillDisplayProduct = "fw:shopping:will-display-product"
32
+ case AddToCart = "fw:shopping:add-to-cart"
33
+ case ClickCartIcon = "fw:shopping:click-cart-icon"
34
+ }
@@ -0,0 +1,62 @@
1
+ //
2
+ // Firework+JsEvent.swift
3
+ // react-native-firework-sdk
4
+ //
5
+ // Created by Jeff on 2021/12/21.
6
+ //
7
+
8
+ import Foundation
9
+ import FireworkVideo
10
+
11
+ extension FireworkVideoSDKError {
12
+ var jsErrorName: String {
13
+ switch self {
14
+ case .missingAppID:
15
+ return "missingAppID"
16
+ case .missingPublisherID:
17
+ return "missingPublisherID"
18
+ case .authenticationFailure:
19
+ return "authenticationFailure"
20
+ default:
21
+ return "unknow"
22
+ }
23
+ }
24
+ }
25
+
26
+ extension VideoPlaybackDetails {
27
+ var jsObject: [String: Any?] {
28
+ [ "videoId": videoID,
29
+ "duration": duration,
30
+ "caption": caption,
31
+ "badge": badge,
32
+ "playerSize": ["width": playerSize.width,
33
+ "height": playerSize.height],
34
+ "hasCTA": hasCTA]
35
+ }
36
+ }
37
+
38
+ extension VideoFeedError {
39
+ var jsObject: [String: String] {
40
+ var error: [String: String]
41
+ switch self {
42
+ case .contentSourceError(let sourceError):
43
+ error = ["name": "contentSourceError", "reason": sourceError.recoverySuggestion ?? "contentSourceError"]
44
+ case .videoShareError(let shareError):
45
+ error = ["name": "videoShareError", "reason": shareError.recoverySuggestion ?? "videoShareError"]
46
+ case .unknownError(let unknownError):
47
+ error = ["name": "unknownError", "reason": unknownError.localizedDescription]
48
+ default:
49
+ error = ["name": "unknownError", "reason": "unknownError"]
50
+ }
51
+
52
+ return error
53
+ }
54
+ }
55
+
56
+ extension FeedEventDetails {
57
+ var jsObject: [String: Any] {
58
+ return ["index": index,
59
+ "videoId": videoID,
60
+ "duration": duration]
61
+ }
62
+ }
@@ -0,0 +1,91 @@
1
+ //
2
+ // RCTConvert+FireworkSdk.swift
3
+ // react-native-firework-sdk
4
+ //
5
+ // Created by Jeff on 2021/12/20.
6
+ //
7
+
8
+ import Foundation
9
+ import UIKit
10
+ import FireworkVideo
11
+
12
+ extension RCTConvert {
13
+ static func videoPlayerContentConfiguration(_ config: [String: AnyObject]) -> VideoPlayerContentConfiguration {
14
+ var finalConfig = VideoPlayerContentConfiguration()
15
+
16
+ if let style = videoPlayerStyle(config["playerStyle"] as? String) {
17
+ finalConfig.playerStyle = style
18
+ }
19
+ if let action = videoCompleteAction(config["videoCompleteAction"] as? String) {
20
+ finalConfig.videoCompleteAction = action
21
+ }
22
+ if let showShareButton = config["showShareButton"] as? Bool {
23
+ finalConfig.shareButton.isHidden = showShareButton
24
+ }
25
+ if let ctaStyle = ctaButtonStyle(config["ctaButtonStyle"] as? Dictionary) {
26
+ finalConfig.ctaButton = ctaStyle
27
+ }
28
+
29
+ return finalConfig
30
+ }
31
+
32
+ static func videoPlayerStyle(_ style: String?) -> VideoPlayerContentConfiguration.VideoPlayerStyle? {
33
+ guard let style = style else {
34
+ return nil
35
+ }
36
+ if style == "fit" {
37
+ return .fit
38
+ } else {
39
+ return .fullBleed
40
+ }
41
+ }
42
+
43
+ static func videoCompleteAction(_ action: String?) -> VideoPlayerContentConfiguration.VideoCompleteAction? {
44
+ guard let action = action else {
45
+ return nil
46
+ }
47
+ if action == "loop" {
48
+ return .loop
49
+ } else {
50
+ return .advanceToNext
51
+ }
52
+ }
53
+
54
+ static func ctaButtonStyle(_ style: [String: AnyObject]?) -> ButtonContentConfiguration? {
55
+ guard let style = style else {
56
+ return nil
57
+ }
58
+ var btnContentConfig = ButtonContentConfiguration()
59
+ if let backgroundColor = style["backgroundColor"] as? String {
60
+ btnContentConfig.backgroundColor = backgroundColor.uicolor()
61
+ }
62
+ if let textColor = style["textColor"] as? String {
63
+ btnContentConfig.textColor = textColor.uicolor()
64
+ }
65
+ if let fontSize = style["fontSize"] as? Float {
66
+ btnContentConfig.font = UIFont.systemFont(ofSize: CGFloat(fontSize))
67
+ }
68
+
69
+ return btnContentConfig
70
+ }
71
+
72
+ static func mobileADConfiguration(_ config: [String: AnyObject]?) -> MobileADConfiguration? {
73
+ guard let config = config else {
74
+ return nil
75
+ }
76
+
77
+ let jsonData = try? JSONSerialization.data(withJSONObject: config, options: .prettyPrinted)
78
+ guard let jsonData = jsonData else {
79
+ return nil
80
+ }
81
+
82
+ var result: MobileADConfiguration?
83
+ do {
84
+ result = try JSONDecoder().decode(MobileADConfiguration.self, from: jsonData)
85
+ } catch let error {
86
+ print(error.localizedDescription)
87
+ }
88
+
89
+ return result
90
+ }
91
+ }
@@ -0,0 +1,49 @@
1
+ //
2
+ // RCTConvert+Shopping.swift
3
+ // react-native-firework-sdk
4
+ //
5
+ // Created by Jeff Zheng on 2021/12/31.
6
+ //
7
+
8
+ import Foundation
9
+
10
+ extension RCTConvert {
11
+ static func buildProduct(_ product: [String: Any]?) -> Product? {
12
+ guard let product = product else {
13
+ return nil
14
+ }
15
+
16
+ let jsonData = try? JSONSerialization.data(withJSONObject: product, options: .prettyPrinted)
17
+ guard let jsonData = jsonData else {
18
+ return nil
19
+ }
20
+
21
+ var result: Product?
22
+ do {
23
+ result = try JSONDecoder().decode(Product.self, from: jsonData)
24
+ } catch let error {
25
+ print(error.localizedDescription)
26
+ }
27
+ return result
28
+ }
29
+
30
+ static func buildProductInfoViewConfiguration(_ config: [String: Any]?) -> ProductInfoViewConfiguration? {
31
+ guard let config = config else {
32
+ return nil
33
+ }
34
+
35
+ let jsonData = try? JSONSerialization.data(withJSONObject: config, options: .prettyPrinted)
36
+ guard let jsonData = jsonData else {
37
+ return nil
38
+ }
39
+
40
+ var result: ProductInfoViewConfiguration?
41
+ do {
42
+ result = try JSONDecoder().decode(ProductInfoViewConfiguration.self, from: jsonData)
43
+ } catch let error {
44
+ print(error.localizedDescription)
45
+ }
46
+
47
+ return result
48
+ }
49
+ }
@@ -0,0 +1,69 @@
1
+ //
2
+ // RCTConvert+FWVideoFeed.swift
3
+ // react-native-firework-sdk
4
+ //
5
+ // Created by Jeff Zheng on 2021/12/22.
6
+ //
7
+
8
+ import Foundation
9
+
10
+ extension VideFeedSourceType {
11
+ static var feedTypeMapper: [String: VideFeedSourceType] {
12
+ ["discover": .discover,
13
+ "channel": .channel,
14
+ "playlist": .playlist]
15
+ }
16
+ }
17
+
18
+ extension VideoFeedMode {
19
+ static var feedModeMapper: [String: VideoFeedMode] {
20
+ ["row": .row,
21
+ "column": .colume,
22
+ "grid": .grid]
23
+ }
24
+ }
25
+
26
+ @objc
27
+ public extension RCTConvert {
28
+ static func videoFeedSourceType(_ type: String?) -> VideFeedSourceType {
29
+ guard let type = type else {
30
+ return .discover
31
+ }
32
+
33
+ return .feedTypeMapper[type] ?? .discover
34
+ }
35
+
36
+ static func videoFeedMode(_ type: String?) -> VideoFeedMode {
37
+ guard let type = type else {
38
+ return .row
39
+ }
40
+
41
+ return .feedModeMapper[type] ?? .row
42
+ }
43
+
44
+ static func videoFeedConfiguration(_ config: [String: AnyObject]?) -> VideoFeedConfiguration? {
45
+ guard let config = config else {
46
+ return nil
47
+ }
48
+
49
+ let jsonData = try? JSONSerialization.data(withJSONObject: config, options: .prettyPrinted)
50
+ guard let jsonData = jsonData else {
51
+ return nil
52
+ }
53
+
54
+ return try? JSONDecoder().decode(VideoFeedConfiguration.self, from: jsonData)
55
+ }
56
+
57
+ static func videoPlayerConfiguration(_ config: [String: AnyObject]?) -> VideoPlayerConfiguration? {
58
+ guard let config = config else {
59
+ return nil
60
+ }
61
+
62
+ let jsonData = try? JSONSerialization.data(withJSONObject: config, options: .prettyPrinted)
63
+ guard let jsonData = jsonData else {
64
+ return nil
65
+ }
66
+
67
+ return try? JSONDecoder().decode(VideoPlayerConfiguration.self, from: jsonData)
68
+ }
69
+ }
@@ -0,0 +1,17 @@
1
+ //
2
+ // FireworkSdk+CTA.swift
3
+ // react-native-firework-sdk
4
+ //
5
+ // Created by Jeff Zheng on 2021/12/21.
6
+ //
7
+
8
+ import Foundation
9
+ import FireworkVideo
10
+
11
+ extension FireworkSDKModule: FireworkVideoCTADelegate {
12
+ func handleCustomCTAClick(_ viewController: PlayerViewController, url: URL) -> Bool {
13
+ sendEvent(withName: FWEventName.CustomCTAClick.rawValue, body: [url: url])
14
+
15
+ return customCTAClickEnabled
16
+ }
17
+ }
@@ -0,0 +1,74 @@
1
+ //
2
+ // FireworkSdk+EventTracking.swift
3
+ // react-native-firework-sdk
4
+ //
5
+ // Created by Jeff Zheng on 2021/12/21.
6
+ //
7
+
8
+ import Foundation
9
+ import FireworkVideo
10
+
11
+ extension FireworkSDKModule: FireworkVideoPlaybackDelegate {
12
+ func fireworkVideoDidPause(_ videoPlayback: VideoPlaybackDetails) {
13
+
14
+ }
15
+
16
+ func fireworkVideoDidResume(_ videoPlayback: VideoPlaybackDetails) {
17
+
18
+ }
19
+
20
+ func fireworkVideoDidRecordImpression(_ videoPlayback: VideoPlaybackDetails) {
21
+ guard enableVideoPlayBackEvent else { return }
22
+ sendEvent(withName: FWEventName.VideoPlayback.rawValue, body: [VideoPlaybackSubEventName.Impression.rawValue: videoPlayback.jsObject])
23
+ }
24
+
25
+ func fireworkVideoDidStartPlaying(_ videoPlayback: VideoPlaybackDetails) {
26
+ guard enableVideoPlayBackEvent else { return }
27
+ sendEvent(withName: FWEventName.VideoPlayback.rawValue, body: [VideoPlaybackSubEventName.Start.rawValue: videoPlayback.jsObject])
28
+ }
29
+
30
+ func fireworkVideoReachedFirstQuartile(_ videoPlayback: VideoPlaybackDetails) {
31
+ guard enableVideoPlayBackEvent else { return }
32
+ sendEvent(withName: FWEventName.VideoPlayback.rawValue, body: [VideoPlaybackSubEventName.FirstQuartile.rawValue: videoPlayback.jsObject])
33
+ }
34
+
35
+ func fireworkVideoReachedMidPoint(_ videoPlayback: VideoPlaybackDetails) {
36
+ guard enableVideoPlayBackEvent else { return }
37
+ sendEvent(withName: FWEventName.VideoPlayback.rawValue, body: [VideoPlaybackSubEventName.Midpoint.rawValue: videoPlayback.jsObject])
38
+ }
39
+
40
+ func fireworkVideoReachedThirdQuartile(_ videoPlayback: VideoPlaybackDetails) {
41
+ guard enableVideoPlayBackEvent else { return }
42
+ sendEvent(withName: FWEventName.VideoPlayback.rawValue, body: [VideoPlaybackSubEventName.ThirdQuartile.rawValue: videoPlayback.jsObject])
43
+ }
44
+
45
+ func fireworkVideoDidFinishPlaying(_ videoPlayback: VideoPlaybackDetails) {
46
+ guard enableVideoPlayBackEvent else { return }
47
+ sendEvent(withName: FWEventName.VideoPlayback.rawValue, body: [VideoPlaybackSubEventName.Complete.rawValue: videoPlayback.jsObject])
48
+ }
49
+
50
+ func fireworkVideoDidTapCTAButton(_ videoPlayback: VideoPlaybackDetails) {
51
+ guard enableVideoPlayBackEvent else { return }
52
+ sendEvent(withName: FWEventName.VideoPlayback.rawValue, body: [VideoPlaybackSubEventName.ClickCTA.rawValue: videoPlayback.jsObject])
53
+ }
54
+
55
+ func fireworkVideoDidTapShareButton(_ videoPlayback: VideoPlaybackDetails) {
56
+ guard enableVideoPlayBackEvent else { return }
57
+ sendEvent(withName: FWEventName.VideoPlayback.rawValue, body: [VideoPlaybackSubEventName.ClickShare.rawValue: videoPlayback.jsObject])
58
+ }
59
+
60
+ func fireworkVideoDidStartPlayingAd(_ videoPlayback: VideoPlaybackDetails) {
61
+
62
+ }
63
+
64
+ func fireworkVideoDidFinishPlayingAd(_ videoPlayback: VideoPlaybackDetails) {
65
+ guard enableVideoPlayBackEvent else { return }
66
+ sendEvent(withName: FWEventName.VideoPlayback.rawValue, body: [VideoPlaybackSubEventName.AdEnd.rawValue: videoPlayback.jsObject])
67
+ }
68
+ }
69
+
70
+ extension FireworkSDKModule: FireworkVideoFeedDelegate {
71
+ func fireworkVideoDidTapVideoThumbnail(_ eventDetails: FeedEventDetails) {
72
+ sendEvent(withName: FWEventName.VideoFeedClick.rawValue, body: eventDetails.jsObject)
73
+ }
74
+ }