react-native-daro 1.0.13 → 1.0.16

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 (262) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +30 -30
  3. package/android/build.gradle +52 -59
  4. package/android/src/admob/java/com/daro/reactnative/DaroSdkBridge.kt +23 -0
  5. package/android/src/main/AndroidManifest.xml +1 -2
  6. package/android/src/main/java/com/{darom → daro/reactnative}/DaroMAdBannerViewManager.kt +38 -15
  7. package/android/src/main/java/com/daro/reactnative/DaroMAdNativeViewManager.kt +167 -0
  8. package/android/src/main/java/com/daro/reactnative/DaroMModule.kt +257 -0
  9. package/android/src/main/java/com/daro/reactnative/DaroMPackage.kt +45 -0
  10. package/android/src/main/java/com/daro/reactnative/DaroMediaViewManager.kt +25 -0
  11. package/android/src/main/java/com/{darom → daro/reactnative}/constants/InternalDaroMBannerSize.kt +1 -1
  12. package/android/src/main/java/com/{darom → daro/reactnative}/event/DaroMEvent.kt +19 -8
  13. package/android/src/main/java/com/{darom → daro/reactnative}/impl/DaroMBannerViewModuleImpl.kt +2 -2
  14. package/android/src/main/java/com/{darom → daro/reactnative}/impl/DaroMInterstitialModuleImpl.kt +26 -26
  15. package/android/src/main/java/com/{darom → daro/reactnative}/impl/DaroMLightPopupModuleImpl.kt +30 -29
  16. package/android/src/main/java/com/{darom → daro/reactnative}/impl/DaroMRewardedAdModuleImpl.kt +27 -27
  17. package/android/src/main/java/com/{darom → daro/reactnative}/util/AdInfoUtil.kt +25 -1
  18. package/android/src/main/java/com/daro/reactnative/util/EventEmitterUtil.kt +37 -0
  19. package/android/src/main/java/com/daro/reactnative/view/DaroMAdBannerViewContainer.kt +417 -0
  20. package/android/src/main/java/com/daro/reactnative/view/DaroMAdNativeViewContainer.kt +624 -0
  21. package/android/src/main/java/com/daro/reactnative/view/DaroMediaView.kt +123 -0
  22. package/android/src/newarch/java/com/daro/reactnative/DaroMModuleSpec.kt +6 -0
  23. package/android/src/oldarch/java/com/daro/reactnative/DaroMModuleSpec.kt +90 -0
  24. package/app.plugin.js +1 -0
  25. package/ios/DaroMModule+AppOpen.swift +38 -32
  26. package/ios/DaroMModule+Interstitial.swift +32 -26
  27. package/ios/DaroMModule+LightPopup.swift +43 -33
  28. package/ios/DaroMModule+Rewarded.swift +38 -27
  29. package/ios/DaroMModule.mm +45 -17
  30. package/ios/DaroMModule.swift +24 -17
  31. package/ios/Fabric/DaroMAdBannerComponentView.mm +207 -0
  32. package/ios/Fabric/DaroMFabricEventSink.mm +31 -0
  33. package/ios/Fabric/DaroMFabricPropApplier.mm +123 -0
  34. package/ios/Fabric/DaroMNativeAdComponentView.mm +294 -0
  35. package/ios/{DaroMAdBannerViewManager.m → Paper/DaroMAdBannerViewManager.m} +3 -1
  36. package/ios/Paper/DaroMAdBannerViewManager.swift +21 -0
  37. package/ios/{DaroMNativeAdViewManager.m → Paper/DaroMNativeAdViewManager.m} +2 -1
  38. package/ios/Paper/DaroMNativeAdViewManager.swift +22 -0
  39. package/ios/Shared/DaroMAdEventSink.swift +24 -0
  40. package/ios/Shared/DaroMBannerAdView.swift +188 -0
  41. package/ios/Shared/DaroMNativeAdLoadCoordinator.swift +49 -0
  42. package/ios/Shared/DaroMNativeAdView.swift +575 -0
  43. package/ios/Shared/DaroMNativeAssetResolver.swift +53 -0
  44. package/ios/mediation/admob/DaroMediationDebugger.swift +11 -0
  45. package/ios/mediation/admob/DaroMediationTypes.swift +23 -0
  46. package/lib/commonjs/AdBannerView.js +21 -35
  47. package/lib/commonjs/AdBannerView.js.map +1 -1
  48. package/lib/commonjs/AppOpenAd.js +80 -21
  49. package/lib/commonjs/AppOpenAd.js.map +1 -1
  50. package/lib/commonjs/DaroMAdBannerViewNativeComponent.ts +47 -0
  51. package/lib/commonjs/DaroMNativeAdViewNativeComponent.ts +62 -0
  52. package/lib/commonjs/DaroMediaViewNativeComponent.ts +9 -0
  53. package/lib/commonjs/ErrorCode.js.map +1 -1
  54. package/lib/commonjs/EventEmitter.js +4 -5
  55. package/lib/commonjs/EventEmitter.js.map +1 -1
  56. package/lib/commonjs/InterstitialAd.js +48 -22
  57. package/lib/commonjs/InterstitialAd.js.map +1 -1
  58. package/lib/commonjs/LightPopupAd.js +64 -46
  59. package/lib/commonjs/LightPopupAd.js.map +1 -1
  60. package/lib/commonjs/NativeDaroModule.js +9 -0
  61. package/lib/commonjs/NativeDaroModule.js.map +1 -0
  62. package/lib/commonjs/RewardedAd.js +47 -23
  63. package/lib/commonjs/RewardedAd.js.map +1 -1
  64. package/lib/commonjs/codegen-env.d.js +2 -0
  65. package/lib/commonjs/codegen-env.d.js.map +1 -0
  66. package/lib/commonjs/hooks/useInterstitialAd.js +110 -0
  67. package/lib/commonjs/hooks/useInterstitialAd.js.map +1 -0
  68. package/lib/commonjs/hooks/useLightPopupAd.js +114 -0
  69. package/lib/commonjs/hooks/useLightPopupAd.js.map +1 -0
  70. package/lib/commonjs/hooks/useRewardedAd.js +113 -0
  71. package/lib/commonjs/hooks/useRewardedAd.js.map +1 -0
  72. package/lib/commonjs/index.js +29 -13
  73. package/lib/commonjs/index.js.map +1 -1
  74. package/lib/commonjs/nativeAd/NativeAdView.js +23 -18
  75. package/lib/commonjs/nativeAd/NativeAdView.js.map +1 -1
  76. package/lib/commonjs/nativeAd/NativeAdViewComponents.js +43 -31
  77. package/lib/commonjs/nativeAd/NativeAdViewComponents.js.map +1 -1
  78. package/lib/commonjs/nativeAd/NativeAdViewProvider.js +34 -7
  79. package/lib/commonjs/nativeAd/NativeAdViewProvider.js.map +1 -1
  80. package/lib/commonjs/package.json +1 -0
  81. package/lib/module/AdBannerView.js +20 -36
  82. package/lib/module/AdBannerView.js.map +1 -1
  83. package/lib/module/AppOpenAd.js +80 -22
  84. package/lib/module/AppOpenAd.js.map +1 -1
  85. package/lib/module/DaroMAdBannerViewNativeComponent.ts +47 -0
  86. package/lib/module/DaroMNativeAdViewNativeComponent.ts +62 -0
  87. package/lib/module/DaroMediaViewNativeComponent.ts +9 -0
  88. package/lib/module/ErrorCode.js.map +1 -1
  89. package/lib/module/EventEmitter.js +4 -6
  90. package/lib/module/EventEmitter.js.map +1 -1
  91. package/lib/module/InterstitialAd.js +47 -22
  92. package/lib/module/InterstitialAd.js.map +1 -1
  93. package/lib/module/LightPopupAd.js +65 -47
  94. package/lib/module/LightPopupAd.js.map +1 -1
  95. package/lib/module/NativeDaroModule.js +5 -0
  96. package/lib/module/NativeDaroModule.js.map +1 -0
  97. package/lib/module/RewardedAd.js +46 -23
  98. package/lib/module/RewardedAd.js.map +1 -1
  99. package/lib/module/codegen-env.d.js +2 -0
  100. package/lib/module/codegen-env.d.js.map +1 -0
  101. package/lib/module/hooks/useInterstitialAd.js +106 -0
  102. package/lib/module/hooks/useInterstitialAd.js.map +1 -0
  103. package/lib/module/hooks/useLightPopupAd.js +110 -0
  104. package/lib/module/hooks/useLightPopupAd.js.map +1 -0
  105. package/lib/module/hooks/useRewardedAd.js +109 -0
  106. package/lib/module/hooks/useRewardedAd.js.map +1 -0
  107. package/lib/module/index.js +7 -13
  108. package/lib/module/index.js.map +1 -1
  109. package/lib/module/nativeAd/NativeAdView.js +22 -19
  110. package/lib/module/nativeAd/NativeAdView.js.map +1 -1
  111. package/lib/module/nativeAd/NativeAdViewComponents.js +45 -34
  112. package/lib/module/nativeAd/NativeAdViewComponents.js.map +1 -1
  113. package/lib/module/nativeAd/NativeAdViewProvider.js +35 -8
  114. package/lib/module/nativeAd/NativeAdViewProvider.js.map +1 -1
  115. package/lib/module/package.json +1 -0
  116. package/lib/typescript/commonjs/plugin/src/index.d.ts +19 -0
  117. package/lib/typescript/commonjs/plugin/src/index.d.ts.map +1 -0
  118. package/lib/typescript/commonjs/plugin/src/skAdNetworkIds.d.ts +6 -0
  119. package/lib/typescript/commonjs/plugin/src/skAdNetworkIds.d.ts.map +1 -0
  120. package/lib/typescript/commonjs/plugin/src/withAndroid.d.ts +8 -0
  121. package/lib/typescript/commonjs/plugin/src/withAndroid.d.ts.map +1 -0
  122. package/lib/typescript/commonjs/plugin/src/withIos.d.ts +8 -0
  123. package/lib/typescript/commonjs/plugin/src/withIos.d.ts.map +1 -0
  124. package/lib/typescript/commonjs/src/AdBannerView.d.ts +126 -4
  125. package/lib/typescript/commonjs/src/AdBannerView.d.ts.map +1 -1
  126. package/lib/typescript/commonjs/src/AppOpenAd.d.ts +6 -0
  127. package/lib/typescript/commonjs/src/AppOpenAd.d.ts.map +1 -1
  128. package/lib/typescript/commonjs/src/DaroMAdBannerViewNativeComponent.d.ts +32 -0
  129. package/lib/typescript/commonjs/src/DaroMAdBannerViewNativeComponent.d.ts.map +1 -0
  130. package/lib/typescript/commonjs/src/DaroMNativeAdViewNativeComponent.d.ts +42 -0
  131. package/lib/typescript/commonjs/src/DaroMNativeAdViewNativeComponent.d.ts.map +1 -0
  132. package/lib/typescript/commonjs/src/DaroMediaViewNativeComponent.d.ts +6 -0
  133. package/lib/typescript/commonjs/src/DaroMediaViewNativeComponent.d.ts.map +1 -0
  134. package/lib/typescript/commonjs/src/ErrorCode.d.ts.map +1 -1
  135. package/lib/typescript/commonjs/src/EventEmitter.d.ts.map +1 -1
  136. package/lib/typescript/commonjs/src/InterstitialAd.d.ts +6 -0
  137. package/lib/typescript/commonjs/src/InterstitialAd.d.ts.map +1 -1
  138. package/lib/typescript/commonjs/src/LightPopupAd.d.ts +6 -0
  139. package/lib/typescript/commonjs/src/LightPopupAd.d.ts.map +1 -1
  140. package/lib/typescript/commonjs/src/NativeDaroModule.d.ts +61 -0
  141. package/lib/typescript/commonjs/src/NativeDaroModule.d.ts.map +1 -0
  142. package/lib/typescript/commonjs/src/RewardedAd.d.ts +6 -0
  143. package/lib/typescript/commonjs/src/RewardedAd.d.ts.map +1 -1
  144. package/lib/typescript/commonjs/src/hooks/useInterstitialAd.d.ts +19 -0
  145. package/lib/typescript/commonjs/src/hooks/useInterstitialAd.d.ts.map +1 -0
  146. package/lib/typescript/commonjs/src/hooks/useLightPopupAd.d.ts +23 -0
  147. package/lib/typescript/commonjs/src/hooks/useLightPopupAd.d.ts.map +1 -0
  148. package/lib/typescript/commonjs/src/hooks/useRewardedAd.d.ts +20 -0
  149. package/lib/typescript/commonjs/src/hooks/useRewardedAd.d.ts.map +1 -0
  150. package/lib/typescript/commonjs/src/index.d.ts +7 -1
  151. package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
  152. package/lib/typescript/commonjs/src/nativeAd/NativeAdView.d.ts +125 -2
  153. package/lib/typescript/commonjs/src/nativeAd/NativeAdView.d.ts.map +1 -1
  154. package/lib/typescript/commonjs/src/nativeAd/NativeAdViewComponents.d.ts.map +1 -1
  155. package/lib/typescript/commonjs/src/nativeAd/NativeAdViewProvider.d.ts +11 -5
  156. package/lib/typescript/commonjs/src/nativeAd/NativeAdViewProvider.d.ts.map +1 -1
  157. package/lib/typescript/commonjs/src/types/AdBannerViewProps.d.ts +2 -2
  158. package/lib/typescript/commonjs/src/types/AdBannerViewProps.d.ts.map +1 -1
  159. package/lib/typescript/commonjs/src/types/AdInfo.d.ts.map +1 -1
  160. package/lib/typescript/commonjs/src/types/AdProps.d.ts +2 -2
  161. package/lib/typescript/commonjs/src/types/AdProps.d.ts.map +1 -1
  162. package/lib/typescript/commonjs/src/types/DaroMMobileAds.d.ts.map +1 -1
  163. package/lib/typescript/commonjs/src/types/NativeAdViewProps.d.ts +2 -0
  164. package/lib/typescript/commonjs/src/types/NativeAdViewProps.d.ts.map +1 -1
  165. package/lib/typescript/module/plugin/src/index.d.ts +19 -0
  166. package/lib/typescript/module/plugin/src/index.d.ts.map +1 -0
  167. package/lib/typescript/module/plugin/src/skAdNetworkIds.d.ts +6 -0
  168. package/lib/typescript/module/plugin/src/skAdNetworkIds.d.ts.map +1 -0
  169. package/lib/typescript/module/plugin/src/withAndroid.d.ts +8 -0
  170. package/lib/typescript/module/plugin/src/withAndroid.d.ts.map +1 -0
  171. package/lib/typescript/module/plugin/src/withIos.d.ts +8 -0
  172. package/lib/typescript/module/plugin/src/withIos.d.ts.map +1 -0
  173. package/lib/typescript/module/src/AdBannerView.d.ts +126 -4
  174. package/lib/typescript/module/src/AdBannerView.d.ts.map +1 -1
  175. package/lib/typescript/module/src/AppOpenAd.d.ts +6 -0
  176. package/lib/typescript/module/src/AppOpenAd.d.ts.map +1 -1
  177. package/lib/typescript/module/src/DaroMAdBannerViewNativeComponent.d.ts +32 -0
  178. package/lib/typescript/module/src/DaroMAdBannerViewNativeComponent.d.ts.map +1 -0
  179. package/lib/typescript/module/src/DaroMNativeAdViewNativeComponent.d.ts +42 -0
  180. package/lib/typescript/module/src/DaroMNativeAdViewNativeComponent.d.ts.map +1 -0
  181. package/lib/typescript/module/src/DaroMediaViewNativeComponent.d.ts +6 -0
  182. package/lib/typescript/module/src/DaroMediaViewNativeComponent.d.ts.map +1 -0
  183. package/lib/typescript/module/src/ErrorCode.d.ts.map +1 -1
  184. package/lib/typescript/module/src/EventEmitter.d.ts.map +1 -1
  185. package/lib/typescript/module/src/InterstitialAd.d.ts +6 -0
  186. package/lib/typescript/module/src/InterstitialAd.d.ts.map +1 -1
  187. package/lib/typescript/module/src/LightPopupAd.d.ts +6 -0
  188. package/lib/typescript/module/src/LightPopupAd.d.ts.map +1 -1
  189. package/lib/typescript/module/src/NativeDaroModule.d.ts +61 -0
  190. package/lib/typescript/module/src/NativeDaroModule.d.ts.map +1 -0
  191. package/lib/typescript/module/src/RewardedAd.d.ts +6 -0
  192. package/lib/typescript/module/src/RewardedAd.d.ts.map +1 -1
  193. package/lib/typescript/module/src/hooks/useInterstitialAd.d.ts +19 -0
  194. package/lib/typescript/module/src/hooks/useInterstitialAd.d.ts.map +1 -0
  195. package/lib/typescript/module/src/hooks/useLightPopupAd.d.ts +23 -0
  196. package/lib/typescript/module/src/hooks/useLightPopupAd.d.ts.map +1 -0
  197. package/lib/typescript/module/src/hooks/useRewardedAd.d.ts +20 -0
  198. package/lib/typescript/module/src/hooks/useRewardedAd.d.ts.map +1 -0
  199. package/lib/typescript/module/src/index.d.ts +7 -1
  200. package/lib/typescript/module/src/index.d.ts.map +1 -1
  201. package/lib/typescript/module/src/nativeAd/NativeAdView.d.ts +125 -2
  202. package/lib/typescript/module/src/nativeAd/NativeAdView.d.ts.map +1 -1
  203. package/lib/typescript/module/src/nativeAd/NativeAdViewComponents.d.ts.map +1 -1
  204. package/lib/typescript/module/src/nativeAd/NativeAdViewProvider.d.ts +11 -5
  205. package/lib/typescript/module/src/nativeAd/NativeAdViewProvider.d.ts.map +1 -1
  206. package/lib/typescript/module/src/types/AdBannerViewProps.d.ts +2 -2
  207. package/lib/typescript/module/src/types/AdBannerViewProps.d.ts.map +1 -1
  208. package/lib/typescript/module/src/types/AdInfo.d.ts.map +1 -1
  209. package/lib/typescript/module/src/types/AdProps.d.ts +2 -2
  210. package/lib/typescript/module/src/types/AdProps.d.ts.map +1 -1
  211. package/lib/typescript/module/src/types/DaroMMobileAds.d.ts.map +1 -1
  212. package/lib/typescript/module/src/types/NativeAdViewProps.d.ts +2 -0
  213. package/lib/typescript/module/src/types/NativeAdViewProps.d.ts.map +1 -1
  214. package/package.json +95 -105
  215. package/plugin/build/index.d.ts +18 -0
  216. package/plugin/build/index.js +71 -0
  217. package/plugin/build/skAdNetworkIds.d.ts +5 -0
  218. package/plugin/build/skAdNetworkIds.js +205 -0
  219. package/plugin/build/withAndroid.d.ts +7 -0
  220. package/plugin/build/withAndroid.js +222 -0
  221. package/plugin/build/withIos.d.ts +7 -0
  222. package/plugin/build/withIos.js +82 -0
  223. package/react-native-daro.podspec +28 -0
  224. package/src/AdBannerView.tsx +48 -48
  225. package/src/AppOpenAd.ts +101 -20
  226. package/src/DaroMAdBannerViewNativeComponent.ts +47 -0
  227. package/src/DaroMNativeAdViewNativeComponent.ts +62 -0
  228. package/src/DaroMediaViewNativeComponent.ts +9 -0
  229. package/src/ErrorCode.ts +1 -2
  230. package/src/EventEmitter.ts +9 -7
  231. package/src/InterstitialAd.ts +75 -21
  232. package/src/LightPopupAd.ts +90 -51
  233. package/src/NativeDaroModule.ts +91 -0
  234. package/src/RewardedAd.ts +72 -22
  235. package/src/codegen-env.d.ts +45 -0
  236. package/src/hooks/useInterstitialAd.ts +117 -0
  237. package/src/hooks/useLightPopupAd.ts +132 -0
  238. package/src/hooks/useRewardedAd.ts +122 -0
  239. package/src/index.tsx +21 -22
  240. package/src/nativeAd/NativeAdView.tsx +83 -45
  241. package/src/nativeAd/NativeAdViewComponents.tsx +129 -64
  242. package/src/nativeAd/NativeAdViewProvider.tsx +84 -16
  243. package/src/types/AdBannerViewProps.ts +11 -11
  244. package/src/types/AdInfo.ts +17 -17
  245. package/src/types/AdProps.ts +8 -9
  246. package/src/types/DaroMMobileAds.ts +3 -6
  247. package/src/types/NativeAdViewProps.ts +12 -5
  248. package/src/types/index.ts +1 -1
  249. package/android/gradle.properties +0 -5
  250. package/android/src/main/AndroidManifestNew.xml +0 -7
  251. package/android/src/main/java/com/darom/DaroMAdNativeViewManager.kt +0 -136
  252. package/android/src/main/java/com/darom/DaroMModule.kt +0 -203
  253. package/android/src/main/java/com/darom/DaroMPackage.kt +0 -21
  254. package/android/src/main/java/com/darom/util/EventEmitterUtil.kt +0 -24
  255. package/android/src/main/java/com/darom/view/DaroMAdBannerViewContainer.kt +0 -163
  256. package/android/src/main/java/com/darom/view/DaroMAdNativeViewContainer.kt +0 -375
  257. package/android/src/main/res/layout/layout_activity_transparent.xml +0 -7
  258. package/android/src/main/res/values/styles.xml +0 -11
  259. package/ios/DaroM-Bridging-Header.h +0 -6
  260. package/ios/DaroMAdBannerViewManager.swift +0 -91
  261. package/ios/DaroMNativeAdViewManager.swift +0 -291
  262. package/react-native-daro-m.podspec +0 -44
@@ -0,0 +1,123 @@
1
+ package com.daro.reactnative.view
2
+
3
+ import android.content.Context
4
+ import android.view.View
5
+ import android.view.ViewGroup
6
+ import android.view.ViewTreeObserver
7
+ import android.widget.FrameLayout
8
+
9
+ class DaroMediaView(context: Context) : FrameLayout(context) {
10
+
11
+ private var relayoutPending = false
12
+ private var scanZeroCount = 0
13
+ private var scanViewCount = 0
14
+ private var lastZeroSignature = 0L
15
+ private var zeroSizeRelayoutAttempts = 0
16
+
17
+ private companion object {
18
+ private const val MAX_ZERO_SIZE_RELAYOUT_ATTEMPTS = 3
19
+ }
20
+
21
+ private val relayoutRunnable = Runnable {
22
+ relayoutPending = false
23
+ relayoutChildren()
24
+ }
25
+
26
+ private val preDrawListener = ViewTreeObserver.OnPreDrawListener {
27
+ if (width > 0 && height > 0 && childCount > 0) {
28
+ scanZeroCount = 0
29
+ scanViewCount = 0
30
+ scanSubtree(this)
31
+
32
+ if (scanZeroCount == 0) {
33
+ lastZeroSignature = 0L
34
+ zeroSizeRelayoutAttempts = 0
35
+ } else {
36
+ val signature = (scanZeroCount.toLong() shl 32) or scanViewCount.toLong()
37
+ if (signature != lastZeroSignature) {
38
+ lastZeroSignature = signature
39
+ zeroSizeRelayoutAttempts = 0
40
+ }
41
+
42
+ if (zeroSizeRelayoutAttempts < MAX_ZERO_SIZE_RELAYOUT_ATTEMPTS) {
43
+ zeroSizeRelayoutAttempts++
44
+ relayoutChildren()
45
+ }
46
+ }
47
+ }
48
+ true
49
+ }
50
+
51
+ override fun requestLayout() {
52
+ super.requestLayout()
53
+ scheduleRelayout()
54
+ }
55
+
56
+ override fun onViewAdded(child: View?) {
57
+ super.onViewAdded(child)
58
+ relayoutChildren()
59
+ scheduleRelayout()
60
+ }
61
+
62
+ override fun onAttachedToWindow() {
63
+ super.onAttachedToWindow()
64
+ relayoutChildren()
65
+ relayoutPending = false
66
+ removeCallbacks(relayoutRunnable)
67
+ scheduleRelayout()
68
+ viewTreeObserver.addOnPreDrawListener(preDrawListener)
69
+ }
70
+
71
+ override fun onDetachedFromWindow() {
72
+ viewTreeObserver.removeOnPreDrawListener(preDrawListener)
73
+ removeCallbacks(relayoutRunnable)
74
+ relayoutPending = false
75
+ super.onDetachedFromWindow()
76
+ }
77
+
78
+ private fun scheduleRelayout() {
79
+ lastZeroSignature = 0L
80
+ zeroSizeRelayoutAttempts = 0
81
+
82
+ if (relayoutPending) return
83
+
84
+ relayoutPending = true
85
+ post(relayoutRunnable)
86
+ }
87
+
88
+ private fun relayoutChildren() {
89
+ val width = width
90
+ val height = height
91
+
92
+ if (width <= 0 || height <= 0) return
93
+
94
+ for (i in 0 until childCount) {
95
+ val child = getChildAt(i)
96
+ if (child.visibility == GONE) continue
97
+
98
+ forceLayoutRecursive(child)
99
+ child.measure(
100
+ MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
101
+ MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
102
+ )
103
+ child.layout(0, 0, width, height)
104
+ }
105
+ }
106
+
107
+ private fun forceLayoutRecursive(view: View) {
108
+ view.forceLayout()
109
+ if (view is ViewGroup) {
110
+ for (i in 0 until view.childCount) forceLayoutRecursive(view.getChildAt(i))
111
+ }
112
+ }
113
+
114
+ private fun scanSubtree(parent: ViewGroup) {
115
+ for (i in 0 until parent.childCount) {
116
+ val child = parent.getChildAt(i)
117
+ scanViewCount++
118
+ if (child.visibility != View.VISIBLE) continue
119
+ if (child.width <= 0 || child.height <= 0) scanZeroCount++
120
+ if (child is ViewGroup) scanSubtree(child)
121
+ }
122
+ }
123
+ }
@@ -0,0 +1,6 @@
1
+ package com.daro.reactnative
2
+
3
+ import com.facebook.react.bridge.ReactApplicationContext
4
+
5
+ abstract class DaroMModuleSpec(reactContext: ReactApplicationContext) :
6
+ NativeDaroModuleSpec(reactContext)
@@ -0,0 +1,90 @@
1
+ package com.daro.reactnative
2
+
3
+ import com.facebook.react.bridge.Promise
4
+ import com.facebook.react.bridge.ReactApplicationContext
5
+ import com.facebook.react.bridge.ReactContextBaseJavaModule
6
+ import com.facebook.react.bridge.ReactMethod
7
+ import com.facebook.react.bridge.ReadableMap
8
+
9
+ abstract class DaroMModuleSpec(reactContext: ReactApplicationContext) :
10
+ ReactContextBaseJavaModule(reactContext) {
11
+
12
+ override fun getName(): String = DaroMModule.NAME
13
+
14
+ protected abstract fun getTypedExportedConstants(): MutableMap<String, Any>
15
+
16
+ override fun getConstants(): MutableMap<String, Any> = getTypedExportedConstants()
17
+
18
+ @ReactMethod
19
+ abstract fun addListener(eventName: String)
20
+
21
+ @ReactMethod
22
+ abstract fun removeListeners(count: Double)
23
+
24
+ @ReactMethod
25
+ abstract fun isInitialized(promise: Promise)
26
+
27
+ @ReactMethod
28
+ abstract fun initializeSdk(promise: Promise)
29
+
30
+ @ReactMethod
31
+ abstract fun setUserId(userId: String, promise: Promise)
32
+
33
+ @ReactMethod
34
+ abstract fun showMediationDebugger(promise: Promise)
35
+
36
+ @ReactMethod
37
+ abstract fun isInterstitialReady(requestId: Double, adUnitId: String, promise: Promise)
38
+
39
+ @ReactMethod
40
+ abstract fun loadInterstitial(requestId: Double, adUnitId: String, promise: Promise)
41
+
42
+ @ReactMethod
43
+ abstract fun showInterstitial(requestId: Double, adUnitId: String, promise: Promise)
44
+
45
+ @ReactMethod
46
+ abstract fun isRewardedAdReady(requestId: Double, adUnitId: String, promise: Promise)
47
+
48
+ @ReactMethod
49
+ abstract fun loadRewardedAd(requestId: Double, adUnitId: String, promise: Promise)
50
+
51
+ @ReactMethod
52
+ abstract fun showRewardedAd(
53
+ requestId: Double,
54
+ adUnitId: String,
55
+ customData: String?,
56
+ promise: Promise,
57
+ )
58
+
59
+ @ReactMethod
60
+ abstract fun isAppOpenAdReady(requestId: Double, adUnitId: String, promise: Promise)
61
+
62
+ @ReactMethod
63
+ abstract fun loadAppOpenAd(requestId: Double, adUnitId: String, promise: Promise)
64
+
65
+ @ReactMethod
66
+ abstract fun showAppOpenAd(
67
+ requestId: Double,
68
+ adUnitId: String,
69
+ placement: String?,
70
+ customData: String?,
71
+ promise: Promise,
72
+ )
73
+
74
+ @ReactMethod
75
+ abstract fun isLightPopupReady(requestId: Double, adUnitId: String, promise: Promise)
76
+
77
+ @ReactMethod
78
+ abstract fun loadLightPopup(requestId: Double, adUnitId: String, promise: Promise)
79
+
80
+ @ReactMethod
81
+ abstract fun showLightPopup(requestId: Double, adUnitId: String, promise: Promise)
82
+
83
+ @ReactMethod
84
+ abstract fun setLightPopupAdConfiguration(
85
+ requestId: Double,
86
+ adUnitId: String,
87
+ configuration: ReadableMap,
88
+ promise: Promise,
89
+ )
90
+ }
package/app.plugin.js ADDED
@@ -0,0 +1 @@
1
+ module.exports = require('./plugin/build').default;
@@ -1,42 +1,49 @@
1
- import Daro
1
+ import React
2
2
 
3
3
  // MARK: - AppOpen Ad Methods
4
4
 
5
5
  extension DaroMModule {
6
-
7
- @objc(isAppOpenAdReady:::)
6
+
7
+ @objc(isAppOpenAdReady:adUnitId:resolve:reject:)
8
8
  func isAppOpenAdReady(
9
- _ adUnitId: String,
9
+ requestId: Double,
10
+ adUnitId: String,
10
11
  resolve: RCTPromiseResolveBlock,
11
12
  reject: RCTPromiseRejectBlock
12
13
  ) {
14
+ let requestId = Int(requestId)
13
15
  if !Self.sdkInitialized {
14
16
  DaroMModule.logger.debug("[DaroMMobileAds] !isInitialized")
15
17
  resolve(false)
16
18
  return
17
19
  }
18
- resolve(appOpenAds[adUnitId]?.loadedAd != nil)
20
+ resolve(appOpenAds[requestId]?.loadedAd != nil)
19
21
  }
20
22
 
21
- @objc(loadAppOpenAd:::)
23
+ @objc(loadAppOpenAd:adUnitId:resolve:reject:)
22
24
  func loadAppOpenAd(
23
- _ adUnitId: String,
25
+ requestId: Double,
26
+ adUnitId: String,
24
27
  resolve: RCTPromiseResolveBlock,
25
28
  reject: RCTPromiseRejectBlock
26
29
  ) {
27
- let appOpenAdLoader = retrieveAppOpenLoader(for: adUnitId)
30
+ let requestId = Int(requestId)
31
+ let appOpenAdLoader = retrieveAppOpenLoader(requestId: requestId, adUnitId: adUnitId)
28
32
  appOpenAdLoader.loadAd()
29
- resolve(Void())
33
+ resolve(Void())
30
34
  }
31
35
 
32
- @objc(showAppOpenAd::::)
36
+ @objc(showAppOpenAd:adUnitId:placement:customData:resolve:reject:)
33
37
  func showAppOpenAd(
34
- _ adUnitId: String,
38
+ requestId: Double,
39
+ adUnitId: String,
40
+ placement: String?,
35
41
  customData: String?,
36
42
  resolve: @escaping RCTPromiseResolveBlock,
37
43
  reject: RCTPromiseRejectBlock
38
44
  ) {
39
- guard let loadedAd = appOpenAds[adUnitId]?.loadedAd else {
45
+ let requestId = Int(requestId)
46
+ guard let loadedAd = appOpenAds[requestId]?.loadedAd else {
40
47
  reject("APPOPEN_NOT_LOADED", "AppOpen ad not loaded", nil)
41
48
  return
42
49
  }
@@ -46,53 +53,52 @@ extension DaroMModule {
46
53
  }
47
54
  }
48
55
 
49
- func retrieveAppOpenLoader(for unitId: String) -> DaroAppOpenAdLoader {
50
- if let appOpenLoader = appOpenAds[unitId] {
56
+ func retrieveAppOpenLoader(requestId: Int, adUnitId: String) -> DaroAppOpenAdLoader {
57
+ if let appOpenLoader = appOpenAds[requestId] {
51
58
  return appOpenLoader.loader
52
59
  } else {
53
- let appOpenLoader = DaroAppOpenAdLoader(unit: DaroAdUnit(unitId: unitId))
60
+ let appOpenLoader = DaroAppOpenAdLoader(unit: DaroAdUnit(unitId: adUnitId))
54
61
  appOpenLoader.listener.onAdClicked = { [weak self] adInfo in
55
- DaroMModule.logger.debug("[DARO] Sample Interstitial Ad clicked")
56
- self?.sendEvent(with: .onAppOpenAdClickedEvent, body: adInfo?.toBody)
62
+ DaroMModule.logger.debug("[DARO] Sample AppOpen Ad clicked")
63
+ self?.sendEvent(with: .onAppOpenAdClickedEvent, body: adInfo?.toBody(requestId: requestId))
57
64
  }
58
65
 
59
66
  appOpenLoader.listener.onAdImpression = { [weak self] adInfo in
60
- DaroMModule.logger.debug("[DARO] Sample Interstitial Ad impression")
61
- self?.interstitials[unitId]?.loadedAd = nil
62
- self?.sendEvent(with: .onAppOpenAdImpressionRecordedEvent, body: adInfo?.toBody)
67
+ DaroMModule.logger.debug("[DARO] Sample AppOpen Ad impression")
68
+ self?.appOpenAds[requestId]?.loadedAd = nil
69
+ self?.sendEvent(with: .onAppOpenAdImpressionRecordedEvent, body: adInfo?.toBody(requestId: requestId))
63
70
  }
64
71
 
65
72
  appOpenLoader.listener.onAdLoadSuccess = { [weak self] ad, adInfo in
66
- DaroMModule.logger.debug("[DARO] Sample Interstitial Ad loaded")
67
- self?.appOpenAds[unitId]?.loadedAd = ad
68
- self?.sendEvent(with: .onAppOpenAdLoadedEvent, body: adInfo?.toBody)
69
- self?.setupAppOpenListener(for: ad)
73
+ DaroMModule.logger.debug("[DARO] Sample AppOpen Ad loaded")
74
+ self?.appOpenAds[requestId]?.loadedAd = ad
75
+ self?.sendEvent(with: .onAppOpenAdLoadedEvent, body: adInfo?.toBody(requestId: requestId))
76
+ self?.setupAppOpenListener(for: ad, requestId: requestId)
70
77
  }
71
78
 
72
79
  appOpenLoader.listener.onAdLoadFail = { [weak self] error in
73
- DaroMModule.logger.debug("[DARO] Sample Interstitial Ad failed: \(error)")
74
- self?.sendEvent(with: .onAppOpenAdLoadFailedEvent, body: error.toBody)
80
+ DaroMModule.logger.debug("[DARO] Sample AppOpen Ad failed: \(error)")
81
+ self?.sendEvent(with: .onAppOpenAdLoadFailedEvent, body: error.toBody(requestId: requestId))
75
82
  }
76
- self.appOpenAds[unitId] = AppOpenAd(loader: appOpenLoader)
83
+ self.appOpenAds[requestId] = AppOpenAd(loader: appOpenLoader)
77
84
  return appOpenLoader
78
85
  }
79
86
  }
80
87
 
81
- private func setupAppOpenListener(for ad: DaroAppOpenAd) {
88
+ private func setupAppOpenListener(for ad: DaroAppOpenAd, requestId: Int) {
82
89
  ad.appOpenAdListener.onShown = { [weak self] adInfo in
83
90
  DaroMModule.logger.debug("[DARO] Sample AppOpen Ad displayed")
84
- self?.sendEvent(with: .onAppOpenAdDisplayedEvent, body: adInfo?.toBody)
91
+ self?.sendEvent(with: .onAppOpenAdDisplayedEvent, body: adInfo?.toBody(requestId: requestId))
85
92
  }
86
93
 
87
94
  ad.appOpenAdListener.onDismiss = { [weak self] adInfo in
88
95
  DaroMModule.logger.debug("[DARO] Sample AppOpen Ad hidden")
89
- self?.sendEvent(with: .onAppOpenAdHiddenEvent, body: adInfo?.toBody)
96
+ self?.sendEvent(with: .onAppOpenAdHiddenEvent, body: adInfo?.toBody(requestId: requestId))
90
97
  }
91
98
 
92
99
  ad.appOpenAdListener.onFailedToShow = { [weak self] adInfo, error in
93
100
  DaroMModule.logger.debug("[DARO] Sample AppOpen Ad failed to display")
94
- self?.sendEvent(with: .onAppOpenAdFailedToDisplayEvent, body: adInfo?.toBody)
101
+ self?.sendEvent(with: .onAppOpenAdFailedToDisplayEvent, body: adInfo?.toBody(requestId: requestId))
95
102
  }
96
103
  }
97
104
  }
98
-
@@ -1,41 +1,47 @@
1
- import Daro
1
+ import React
2
2
 
3
3
  // MARK: - Interstitial Ad Methods
4
4
 
5
5
  extension DaroMModule {
6
-
7
- @objc(isInterstitialReady:::)
6
+
7
+ @objc(isInterstitialReady:adUnitId:resolve:reject:)
8
8
  func isInterstitialReady(
9
- _ adUnitId: String,
9
+ requestId: Double,
10
+ adUnitId: String,
10
11
  resolve: RCTPromiseResolveBlock,
11
12
  reject: RCTPromiseRejectBlock
12
13
  ) {
14
+ let requestId = Int(requestId)
13
15
  if !Self.sdkInitialized {
14
16
  DaroMModule.logger.debug("[DaroMMobileAds] !isInitialized")
15
17
  resolve(false)
16
18
  return
17
19
  }
18
- resolve(interstitials[adUnitId]?.loadedAd != nil)
20
+ resolve(interstitials[requestId]?.loadedAd != nil)
19
21
  }
20
22
 
21
- @objc(loadInterstitial:::)
23
+ @objc(loadInterstitial:adUnitId:resolve:reject:)
22
24
  func loadInterstitial(
23
- _ adUnitId: String,
25
+ requestId: Double,
26
+ adUnitId: String,
24
27
  resolve: RCTPromiseResolveBlock,
25
28
  reject: RCTPromiseRejectBlock
26
29
  ) {
27
- let interstitialLoader = retrieveInterstitialLoader(for: adUnitId)
30
+ let requestId = Int(requestId)
31
+ let interstitialLoader = retrieveInterstitialLoader(requestId: requestId, adUnitId: adUnitId)
28
32
  interstitialLoader.loadAd()
29
33
  resolve(Void())
30
34
  }
31
35
 
32
- @objc(showInterstitial:::)
36
+ @objc(showInterstitial:adUnitId:resolve:reject:)
33
37
  func showInterstitial(
34
- _ adUnitId: String,
38
+ requestId: Double,
39
+ adUnitId: String,
35
40
  resolve: @escaping RCTPromiseResolveBlock,
36
41
  reject: @escaping RCTPromiseRejectBlock
37
42
  ) {
38
- guard let loadedAd = interstitials[adUnitId]?.loadedAd else {
43
+ let requestId = Int(requestId)
44
+ guard let loadedAd = interstitials[requestId]?.loadedAd else {
39
45
  reject("INTERSTITIAL_NOT_LOADED", "Interstitial ad not loaded", nil)
40
46
  return
41
47
  }
@@ -49,52 +55,52 @@ extension DaroMModule {
49
55
  }
50
56
  }
51
57
 
52
- func retrieveInterstitialLoader(for unitId: String) -> DaroInterstitialAdLoader {
53
- if let interstitialAd = interstitials[unitId] {
58
+ func retrieveInterstitialLoader(requestId: Int, adUnitId: String) -> DaroInterstitialAdLoader {
59
+ if let interstitialAd = interstitials[requestId] {
54
60
  return interstitialAd.loader
55
61
  } else {
56
- let interstitialLoader = DaroInterstitialAdLoader(unit: DaroAdUnit(unitId: unitId))
62
+ let interstitialLoader = DaroInterstitialAdLoader(unit: DaroAdUnit(unitId: adUnitId))
57
63
  interstitialLoader.listener.onAdClicked = { [weak self] adInfo in
58
64
  DaroMModule.logger.debug("[DARO] Sample Interstitial Ad clicked")
59
- self?.sendEvent(with: .onInterstitialClickedEvent, body: adInfo?.toBody)
65
+ self?.sendEvent(with: .onInterstitialClickedEvent, body: adInfo?.toBody(requestId: requestId))
60
66
  }
61
67
 
62
68
  interstitialLoader.listener.onAdImpression = { [weak self] adInfo in
63
69
  DaroMModule.logger.debug("[DARO] Sample Interstitial Ad impression")
64
- self?.interstitials[unitId]?.loadedAd = nil
65
- self?.sendEvent(with: .onInterstitialAdImpressionRecordedEvent, body: adInfo?.toBody)
70
+ self?.interstitials[requestId]?.loadedAd = nil
71
+ self?.sendEvent(with: .onInterstitialAdImpressionRecordedEvent, body: adInfo?.toBody(requestId: requestId))
66
72
  }
67
73
 
68
74
  interstitialLoader.listener.onAdLoadSuccess = { [weak self] ad, adInfo in
69
75
  DaroMModule.logger.debug("[DARO] Sample Interstitial Ad loaded")
70
- self?.interstitials[unitId]?.loadedAd = ad
71
- self?.sendEvent(with: .onInterstitialLoadedEvent, body: adInfo?.toBody)
72
- self?.setupInterstitialListener(for: ad)
76
+ self?.interstitials[requestId]?.loadedAd = ad
77
+ self?.sendEvent(with: .onInterstitialLoadedEvent, body: adInfo?.toBody(requestId: requestId))
78
+ self?.setupInterstitialListener(for: ad, requestId: requestId)
73
79
  }
74
80
 
75
81
  interstitialLoader.listener.onAdLoadFail = { [weak self] error in
76
82
  DaroMModule.logger.debug("[DARO] Sample Interstitial Ad failed: \(error)")
77
- self?.sendEvent(with: .onInterstitialLoadFailedEvent, body: error.toBody)
83
+ self?.sendEvent(with: .onInterstitialLoadFailedEvent, body: error.toBody(requestId: requestId))
78
84
  }
79
- self.interstitials[unitId] = InterstitialAd(loader: interstitialLoader)
85
+ self.interstitials[requestId] = InterstitialAd(loader: interstitialLoader)
80
86
  return interstitialLoader
81
87
  }
82
88
  }
83
89
 
84
- private func setupInterstitialListener(for ad: DaroInterstitialAd) {
90
+ private func setupInterstitialListener(for ad: DaroInterstitialAd, requestId: Int) {
85
91
  ad.interstitialListener.onShown = { [weak self] adInfo in
86
92
  DaroMModule.logger.debug("[DARO] Sample Interstitial Ad displayed")
87
- self?.sendEvent(with: .onInterstitialDisplayedEvent, body: adInfo?.toBody)
93
+ self?.sendEvent(with: .onInterstitialDisplayedEvent, body: adInfo?.toBody(requestId: requestId))
88
94
  }
89
95
 
90
96
  ad.interstitialListener.onDismiss = { [weak self] adInfo in
91
97
  DaroMModule.logger.debug("[DARO] Sample Interstitial Ad hidden")
92
- self?.sendEvent(with: .onInterstitialHiddenEvent, body: adInfo?.toBody)
98
+ self?.sendEvent(with: .onInterstitialHiddenEvent, body: adInfo?.toBody(requestId: requestId))
93
99
  }
94
100
 
95
101
  ad.interstitialListener.onFailedToShow = { [weak self] adInfo, error in
96
102
  DaroMModule.logger.debug("[DARO] Sample Interstitial Ad failed to display")
97
- self?.sendEvent(with: .onInterstitialAdFailedToDisplayEvent, body: adInfo?.toBody)
103
+ self?.sendEvent(with: .onInterstitialAdFailedToDisplayEvent, body: adInfo?.toBody(requestId: requestId))
98
104
  }
99
105
  }
100
106
  }
@@ -1,74 +1,84 @@
1
- import Daro
1
+ import React
2
2
  import UIKit
3
3
  // MARK: - LightPopup Ad
4
4
  extension DaroMModule {
5
5
 
6
- @objc(isLightPopupReady:::)
6
+ @objc(isLightPopupReady:adUnitId:resolve:reject:)
7
7
  func isLightPopupReady(
8
- _ adUnitId: String,
8
+ requestId: Double,
9
+ adUnitId: String,
9
10
  resolve: RCTPromiseResolveBlock,
10
11
  reject: RCTPromiseRejectBlock
11
12
  ) {
13
+ let requestId = Int(requestId)
12
14
  if !Self.sdkInitialized {
13
15
  DaroMModule.logger.debug("[DaroMMobileAds] !isInitialized")
14
16
  resolve(false)
15
17
  return
16
18
  }
17
- resolve(lightPopups[adUnitId]?.loadedAd != nil)
19
+ resolve(lightPopups[requestId]?.loadedAd != nil)
18
20
  }
19
21
 
20
- @objc(loadLightPopup:::)
22
+ @objc(loadLightPopup:adUnitId:resolve:reject:)
21
23
  func loadLightPopup(
22
- _ adUnitId: String,
24
+ requestId: Double,
25
+ adUnitId: String,
23
26
  resolve: RCTPromiseResolveBlock,
24
27
  reject: RCTPromiseRejectBlock
25
28
  ) {
26
- let lightPopupLoader = retrieveLightPopupLoader(for: adUnitId)
29
+ let requestId = Int(requestId)
30
+ let lightPopupLoader = retrieveLightPopupLoader(requestId: requestId, adUnitId: adUnitId)
27
31
  lightPopupLoader.loadAd()
28
32
  resolve(Void())
29
33
  }
30
34
 
31
- @objc(showLightPopup:::)
35
+ @objc(showLightPopup:adUnitId:resolve:reject:)
32
36
  func showLightPopup(
33
- _ adUnitId: String,
37
+ requestId: Double,
38
+ adUnitId: String,
34
39
  resolve: @escaping RCTPromiseResolveBlock,
35
40
  reject: @escaping RCTPromiseRejectBlock
36
41
  ) {
37
- guard let loadedAd = lightPopups[adUnitId]?.loadedAd else {
42
+ let requestId = Int(requestId)
43
+ guard let loadedAd = lightPopups[requestId]?.loadedAd else {
38
44
  reject("LIGHTPOPUP_NOT_LOADED", "LightPopup ad not loaded", nil)
39
45
  return
40
46
  }
47
+ let reqIdInt = requestId
41
48
  executeOnMainThread { [weak self] in
42
49
  guard let viewController = UIApplication.shared.windows.first?.rootViewController else {
43
50
  reject("VIEW_CONTROLLER_NOT_FOUND", "Root view controller not found", nil)
44
51
  return
45
52
  }
46
- self?.applyStoredConfiguration(to: loadedAd, for: adUnitId)
53
+ self?.applyStoredConfiguration(to: loadedAd, for: reqIdInt)
47
54
  loadedAd.show(viewController: viewController)
48
55
  resolve(Void())
49
56
  }
50
57
  }
51
58
 
52
- @objc(setLightPopupAdConfiguration::::)
59
+ @objc(setLightPopupAdConfiguration:adUnitId:configuration:resolve:reject:)
53
60
  func setLightPopupAdConfiguration(
54
- _ adUnitId: String,
61
+ requestId: Double,
62
+ adUnitId: String,
55
63
  configuration: [String: Any],
56
64
  resolve: RCTPromiseResolveBlock,
57
65
  reject: RCTPromiseRejectBlock
58
66
  ) {
59
- guard let loadedAd = lightPopups[adUnitId]?.loadedAd else {
60
- lightPopupConfigurations[adUnitId] = configuration
67
+ let reqIdInt = Int(requestId)
68
+ guard let loadedAd = lightPopups[reqIdInt]?.loadedAd else {
69
+ lightPopupConfigurations[reqIdInt] = configuration
61
70
  resolve(Void())
62
71
  return
63
72
  }
73
+ lightPopupConfigurations[reqIdInt] = configuration
64
74
  executeOnMainThread { [weak self] in
65
- self?.applyStoredConfiguration(to: loadedAd, for: adUnitId)
75
+ self?.applyStoredConfiguration(to: loadedAd, for: reqIdInt)
66
76
  }
67
77
  resolve(Void())
68
78
  }
69
79
 
70
- func applyStoredConfiguration(to ad: DaroLightPopupAd, for unitId: String) {
71
- if let configuration = lightPopupConfigurations[unitId] {
80
+ func applyStoredConfiguration(to ad: DaroLightPopupAd, for requestId: Int) {
81
+ if let configuration = lightPopupConfigurations[requestId] {
72
82
  let lightPopupConfig = DaroLightPopupConfiguration()
73
83
 
74
84
  func setColorIfValid(_ key: String, setter: (UIColor) -> Void) {
@@ -95,47 +105,47 @@ extension DaroMModule {
95
105
  }
96
106
  }
97
107
 
98
- func retrieveLightPopupLoader(for unitId: String) -> DaroLightPopupAdLoader {
99
- if let lightPopupAd = lightPopups[unitId] {
108
+ func retrieveLightPopupLoader(requestId: Int, adUnitId: String) -> DaroLightPopupAdLoader {
109
+ if let lightPopupAd = lightPopups[requestId] {
100
110
  return lightPopupAd.loader
101
111
  } else {
102
- let lightPopupLoader = DaroLightPopupAdLoader(unit: DaroAdUnit(unitId: unitId))
112
+ let lightPopupLoader = DaroLightPopupAdLoader(unit: DaroAdUnit(unitId: adUnitId))
103
113
 
104
114
  lightPopupLoader.listener.onAdClicked = { [weak self] adInfo in
105
- self?.sendEvent(with: .onLightPopupClickedEvent, body: adInfo?.toBody)
115
+ self?.sendEvent(with: .onLightPopupClickedEvent, body: adInfo?.toBody(requestId: requestId))
106
116
  }
107
117
 
108
118
  lightPopupLoader.listener.onAdImpression = { [weak self] adInfo in
109
- self?.lightPopups[unitId]?.loadedAd = nil
110
- self?.sendEvent(with: .onLightPopupAdImpressionRecordedEvent, body: adInfo?.toBody)
119
+ self?.lightPopups[requestId]?.loadedAd = nil
120
+ self?.sendEvent(with: .onLightPopupAdImpressionRecordedEvent, body: adInfo?.toBody(requestId: requestId))
111
121
  }
112
122
 
113
123
  lightPopupLoader.listener.onAdLoadSuccess = { [weak self] ad, adInfo in
114
- self?.lightPopups[unitId]?.loadedAd = ad
115
- self?.sendEvent(with: .onLightPopupLoadedEvent, body: adInfo?.toBody)
116
- self?.setupLightPopupListener(for: ad)
124
+ self?.lightPopups[requestId]?.loadedAd = ad
125
+ self?.sendEvent(with: .onLightPopupLoadedEvent, body: adInfo?.toBody(requestId: requestId))
126
+ self?.setupLightPopupListener(for: ad, requestId: requestId)
117
127
  }
118
128
 
119
129
  lightPopupLoader.listener.onAdLoadFail = { [weak self] error in
120
- self?.sendEvent(with: .onLightPopupLoadFailedEvent, body: error.toBody)
130
+ self?.sendEvent(with: .onLightPopupLoadFailedEvent, body: error.toBody(requestId: requestId))
121
131
  }
122
132
 
123
- self.lightPopups[unitId] = LightPopupAd(loader: lightPopupLoader)
133
+ self.lightPopups[requestId] = LightPopupAd(loader: lightPopupLoader)
124
134
  return lightPopupLoader
125
135
  }
126
136
  }
127
137
 
128
- private func setupLightPopupListener(for ad: DaroLightPopupAd) {
138
+ private func setupLightPopupListener(for ad: DaroLightPopupAd, requestId: Int) {
129
139
  ad.lightPopupAdListener.onShown = { [weak self] adInfo in
130
- self?.sendEvent(with: .onLightPopupDisplayedEvent, body: adInfo?.toBody)
140
+ self?.sendEvent(with: .onLightPopupDisplayedEvent, body: adInfo?.toBody(requestId: requestId))
131
141
  }
132
142
 
133
143
  ad.lightPopupAdListener.onDismiss = { [weak self] adInfo in
134
- self?.sendEvent(with: .onLightPopupHiddenEvent, body: adInfo?.toBody)
144
+ self?.sendEvent(with: .onLightPopupHiddenEvent, body: adInfo?.toBody(requestId: requestId))
135
145
  }
136
146
 
137
147
  ad.lightPopupAdListener.onFailedToShow = { [weak self] adInfo, error in
138
- self?.sendEvent(with: .onLightPopupAdFailedToDisplayEvent, body: adInfo?.toBody)
148
+ self?.sendEvent(with: .onLightPopupAdFailedToDisplayEvent, body: adInfo?.toBody(requestId: requestId))
139
149
  }
140
150
  }
141
151