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
@@ -1,9 +1,9 @@
1
- package com.darom.impl
1
+ package com.daro.reactnative.impl
2
2
 
3
3
  import android.app.Activity
4
- import com.darom.DaroMModule
5
- import com.darom.event.RewardedEvent
6
- import com.darom.util.AdInfoUtil
4
+ import com.daro.reactnative.DaroMModule
5
+ import com.daro.reactnative.event.RewardedEvent
6
+ import com.daro.reactnative.util.AdInfoUtil
7
7
  import com.facebook.react.bridge.Promise
8
8
  import com.facebook.react.bridge.ReactApplicationContext
9
9
  import droom.daro.core.adunit.DaroRewardedAdUnit
@@ -23,39 +23,39 @@ internal class DaroMRewardedAdModuleImpl(
23
23
  private val currentActivity: Activity?
24
24
  get() = getCurrentActivity()
25
25
 
26
- private val rewardedAdMap: MutableMap<String, DaroRewardedAd> = mutableMapOf()
27
- private val loaderMap: MutableMap<String, DaroRewardedAdLoader> = mutableMapOf()
26
+ private val rewardedAdMap: MutableMap<Int, DaroRewardedAd> = mutableMapOf()
27
+ private val loaderMap: MutableMap<Int, DaroRewardedAdLoader> = mutableMapOf()
28
28
 
29
- override fun isRewardedAdReady(adUnitId: String, promise: Promise) {
30
- promise.resolve(retrieveAd(adUnitId) != null)
29
+ override fun isRewardedAdReady(requestId: Int, adUnitId: String, promise: Promise) {
30
+ promise.resolve(retrieveAd(requestId) != null)
31
31
  }
32
32
 
33
- override fun loadRewardedAd(adUnitId: String) {
34
- retrieveLoader(adUnitId).load()
33
+ override fun loadRewardedAd(requestId: Int, adUnitId: String) {
34
+ retrieveLoader(requestId, adUnitId).load()
35
35
  }
36
36
 
37
- override fun showRewardedAd(adUnitId: String, customData: String?) {
37
+ override fun showRewardedAd(requestId: Int, adUnitId: String, customData: String?) {
38
38
  currentActivity?.let { activity ->
39
- retrieveAd(adUnitId)?.apply {
39
+ retrieveAd(requestId)?.apply {
40
40
  setListener(object : DaroRewardedAdListener {
41
41
  override fun onAdImpression(adInfo: DaroAdInfo) {
42
42
  sendNativeEvent(
43
43
  event = RewardedEvent.ON_REWARDED_AD_IMPRESSION_RECORDED,
44
- params = AdInfoUtil.getAdInfo(adUnitId, adInfo),
44
+ params = AdInfoUtil.getAdInfo(requestId, adUnitId, adInfo),
45
45
  )
46
46
  }
47
47
 
48
48
  override fun onAdClicked(adInfo: DaroAdInfo) {
49
49
  sendNativeEvent(
50
50
  event = RewardedEvent.ON_REWARDED_AD_CLICKED_EVENT,
51
- params = AdInfoUtil.getAdInfo(adUnitId, adInfo),
51
+ params = AdInfoUtil.getAdInfo(requestId, adUnitId, adInfo),
52
52
  )
53
53
  }
54
54
 
55
55
  override fun onDismiss(adInfo: DaroAdInfo) {
56
56
  sendNativeEvent(
57
57
  event = RewardedEvent.ON_REWARDED_AD_HIDDEN_EVENT,
58
- params = AdInfoUtil.getAdInfo(adUnitId, adInfo),
58
+ params = AdInfoUtil.getAdInfo(requestId, adUnitId, adInfo),
59
59
  )
60
60
  }
61
61
 
@@ -65,7 +65,7 @@ internal class DaroMRewardedAdModuleImpl(
65
65
  ) {
66
66
  sendNativeEvent(
67
67
  event = RewardedEvent.ON_REWARDED_AD_RECEIVED_REWARD_EVENT,
68
- params = AdInfoUtil.getRewardInfo(adUnitId, rewardItem),
68
+ params = AdInfoUtil.getRewardInfo(requestId, adUnitId, rewardItem),
69
69
  )
70
70
  }
71
71
 
@@ -75,17 +75,17 @@ internal class DaroMRewardedAdModuleImpl(
75
75
  ) {
76
76
  sendNativeEvent(
77
77
  event = RewardedEvent.ON_REWARDED_AD_FAILED_TO_DISPLAY_EVENT,
78
- params = AdInfoUtil.getAdDisplayFailedInfo(adUnitId, adInfo, error),
78
+ params = AdInfoUtil.getAdDisplayFailedInfo(requestId, adUnitId, adInfo, error),
79
79
  )
80
80
  }
81
81
 
82
82
  override fun onShown(adInfo: DaroAdInfo) {
83
83
  sendNativeEvent(
84
84
  event = RewardedEvent.ON_REWARDED_AD_DISPLAYED_EVENT,
85
- params = AdInfoUtil.getAdInfo(adUnitId, adInfo),
85
+ params = AdInfoUtil.getAdInfo(requestId, adUnitId, adInfo),
86
86
  )
87
87
 
88
- rewardedAdMap.remove(adUnitId)
88
+ rewardedAdMap.remove(requestId)
89
89
  }
90
90
  })
91
91
 
@@ -97,18 +97,18 @@ internal class DaroMRewardedAdModuleImpl(
97
97
  }
98
98
  }
99
99
 
100
- private fun retrieveLoader(adUnitId: String): DaroRewardedAdLoader {
101
- return loaderMap[adUnitId] ?: DaroRewardedAdLoader(
100
+ private fun retrieveLoader(requestId: Int, adUnitId: String): DaroRewardedAdLoader {
101
+ return loaderMap[requestId] ?: DaroRewardedAdLoader(
102
102
  context,
103
103
  DaroRewardedAdUnit(adUnitId, adUnitId)
104
104
  ).also {
105
- loaderMap[adUnitId] = it
105
+ loaderMap[requestId] = it
106
106
  it.setListener(
107
107
  object : DaroRewardedAdLoaderListener {
108
108
  override fun onAdLoadFail(err: DaroAdLoadError) {
109
109
  sendNativeEvent(
110
110
  event = RewardedEvent.ON_REWARDED_AD_LOAD_FAILED_EVENT,
111
- params = AdInfoUtil.getAdLoadFailedInfo(adUnitId, err),
111
+ params = AdInfoUtil.getAdLoadFailedInfo(requestId, adUnitId, err),
112
112
  )
113
113
  }
114
114
 
@@ -116,11 +116,11 @@ internal class DaroMRewardedAdModuleImpl(
116
116
  ad: DaroRewardedAd,
117
117
  adInfo: DaroAdInfo,
118
118
  ) {
119
- rewardedAdMap[adUnitId] = ad
119
+ rewardedAdMap[requestId] = ad
120
120
 
121
121
  sendNativeEvent(
122
122
  event = RewardedEvent.ON_REWARDED_AD_LOADED_EVENT,
123
- params = AdInfoUtil.getAdInfo(adUnitId, adInfo),
123
+ params = AdInfoUtil.getAdInfo(requestId, adUnitId, adInfo),
124
124
  )
125
125
  }
126
126
  }
@@ -128,7 +128,7 @@ internal class DaroMRewardedAdModuleImpl(
128
128
  }
129
129
  }
130
130
 
131
- private fun retrieveAd(adUnitId: String): DaroRewardedAd? {
132
- return rewardedAdMap[adUnitId]
131
+ private fun retrieveAd(requestId: Int): DaroRewardedAd? {
132
+ return rewardedAdMap[requestId]
133
133
  }
134
134
  }
@@ -1,4 +1,4 @@
1
- package com.darom.util
1
+ package com.daro.reactnative.util
2
2
 
3
3
  import com.facebook.react.bridge.Arguments
4
4
  import com.facebook.react.bridge.WritableMap
@@ -16,6 +16,12 @@ internal object AdInfoUtil {
16
16
  return adInfo
17
17
  }
18
18
 
19
+ fun getAdInfo(requestId: Int, adUnitId: String, ad: DaroAdInfo): WritableMap {
20
+ val adInfo = getAdInfo(adUnitId, ad)
21
+ adInfo.putInt("requestId", requestId)
22
+ return adInfo
23
+ }
24
+
19
25
  fun getAdLoadFailedInfo(adUnitId: String?, error: DaroAdLoadError?): WritableMap {
20
26
  val errInfo = Arguments.createMap()
21
27
  errInfo.putString("adUnitId", adUnitId)
@@ -31,6 +37,12 @@ internal object AdInfoUtil {
31
37
  return errInfo
32
38
  }
33
39
 
40
+ fun getAdLoadFailedInfo(requestId: Int, adUnitId: String?, error: DaroAdLoadError?): WritableMap {
41
+ val errInfo = getAdLoadFailedInfo(adUnitId, error)
42
+ errInfo.putInt("requestId", requestId)
43
+ return errInfo
44
+ }
45
+
34
46
  fun getAdDisplayFailedInfo(adUnitId: String, ad: DaroAdInfo, error: DaroAdDisplayFailError): WritableMap {
35
47
  val info = getAdInfo(adUnitId, ad)
36
48
 
@@ -39,6 +51,12 @@ internal object AdInfoUtil {
39
51
  return info
40
52
  }
41
53
 
54
+ fun getAdDisplayFailedInfo(requestId: Int, adUnitId: String, ad: DaroAdInfo, error: DaroAdDisplayFailError): WritableMap {
55
+ val info = getAdDisplayFailedInfo(adUnitId, ad, error)
56
+ info.putInt("requestId", requestId)
57
+ return info
58
+ }
59
+
42
60
  fun getRewardInfo(adUnitId: String, reward: DaroRewardedAd.DaroRewardedItem): WritableMap {
43
61
  val adInfo = Arguments.createMap()
44
62
 
@@ -48,4 +66,10 @@ internal object AdInfoUtil {
48
66
 
49
67
  return adInfo
50
68
  }
69
+
70
+ fun getRewardInfo(requestId: Int, adUnitId: String, reward: DaroRewardedAd.DaroRewardedItem): WritableMap {
71
+ val info = getRewardInfo(adUnitId, reward)
72
+ info.putInt("requestId", requestId)
73
+ return info
74
+ }
51
75
  }
@@ -0,0 +1,37 @@
1
+ package com.daro.reactnative.util
2
+
3
+ import android.view.View
4
+ import com.daro.reactnative.event.AdViewEvent
5
+ import com.daro.reactnative.event.DaroMEvent
6
+ import com.facebook.react.bridge.ReactContext
7
+ import com.facebook.react.bridge.WritableMap
8
+ import com.facebook.react.modules.core.DeviceEventManagerModule
9
+ import com.facebook.react.uimanager.UIManagerHelper
10
+ import com.facebook.react.uimanager.events.Event
11
+
12
+ internal object EventEmitterUtil {
13
+ // React Native Bridge
14
+ fun sendReactNativeEvent(reactContext: ReactContext, event: DaroMEvent, params: WritableMap?) {
15
+ reactContext
16
+ .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
17
+ .emit(event.value, params)
18
+ }
19
+
20
+ fun View.sendNativeViewEvent(reactContext: ReactContext, event: AdViewEvent, params: WritableMap?) {
21
+ val eventDispatcher = UIManagerHelper.getEventDispatcherForReactTag(reactContext, id) ?: return
22
+ eventDispatcher.dispatchEvent(
23
+ AdViewDispatchedEvent(UIManagerHelper.getSurfaceId(reactContext), id, event, params)
24
+ )
25
+ }
26
+ }
27
+
28
+ private class AdViewDispatchedEvent(
29
+ surfaceId: Int,
30
+ viewId: Int,
31
+ private val event: AdViewEvent,
32
+ private val payload: WritableMap?,
33
+ ) : Event<AdViewDispatchedEvent>(surfaceId, viewId) {
34
+ override fun getEventName() = event.value
35
+
36
+ override fun getEventData() = payload
37
+ }
@@ -0,0 +1,417 @@
1
+ package com.daro.reactnative.view
2
+
3
+ import android.annotation.SuppressLint
4
+ import android.graphics.Rect
5
+ import android.view.View
6
+ import android.view.ViewTreeObserver
7
+ import android.view.ViewGroup
8
+ import android.widget.FrameLayout
9
+ import androidx.core.view.children
10
+ import androidx.core.view.isVisible
11
+ import com.daro.reactnative.event.AdViewEvent
12
+ import com.daro.reactnative.util.AdInfoUtil
13
+ import com.daro.reactnative.util.EventEmitterUtil.sendNativeViewEvent
14
+ import com.facebook.react.bridge.ReactContext
15
+ import com.facebook.react.views.view.ReactViewGroup
16
+ import droom.daro.core.adunit.DaroBannerAdUnit
17
+ import droom.daro.core.model.DaroAdInfo
18
+ import droom.daro.core.model.DaroAdLoadError
19
+ import droom.daro.core.model.DaroBannerSize
20
+ import droom.daro.core.model.DaroViewAd
21
+ import droom.daro.view.DaroAdViewListener
22
+ import droom.daro.view.DaroBannerAdView
23
+
24
+ @SuppressLint("ViewConstructor")
25
+ class DaroMAdBannerViewContainer(val context: ReactContext) : ReactViewGroup(context),
26
+ DaroAdViewListener {
27
+ private companion object {
28
+ private const val MAX_PENDING_LOAD_RETRIES = 10
29
+ private const val PENDING_LOAD_RETRY_DELAY_MS = 100L
30
+ }
31
+
32
+ private var adView: DaroBannerAdView? = null
33
+
34
+ internal var adUnitId: String = ""
35
+
36
+ internal var adSize: DaroBannerSize? = null
37
+
38
+ internal var loadOnMount: Boolean = true
39
+
40
+ private var isAdVisible: Boolean = true
41
+ private var isAdPaused: Boolean = false
42
+ private var hasRequestedInitialLoad: Boolean = false
43
+ private var hasPendingLoad: Boolean = false
44
+ private var isPendingLoadRetryScheduled: Boolean = false
45
+ private var pendingLoadRetryCount: Int = 0
46
+ private var pendingLoadRetryRunnable: Runnable? = null
47
+ private var hasScheduledLoadedAdDrawActivation: Boolean = false
48
+ private var hasPulsedLoadedAdAttach: Boolean = false
49
+ private var activatedAdChild: View? = null
50
+ private var pulsedAdChild: View? = null
51
+ private val visibleRect = Rect()
52
+
53
+ fun loadAd() {
54
+ (adView ?: buildAdView())?.apply {
55
+ adView = this
56
+
57
+ if (this.parent == null) {
58
+ this.layoutParams = ViewGroup.LayoutParams(
59
+ ViewGroup.LayoutParams.MATCH_PARENT,
60
+ ViewGroup.LayoutParams.MATCH_PARENT,
61
+ )
62
+ this@DaroMAdBannerViewContainer.addView(this)
63
+ }
64
+
65
+ layoutAdView()
66
+ if (!canLoadAd()) {
67
+ if (!hasPendingLoad) {
68
+ pendingLoadRetryCount = 0
69
+ }
70
+ hasPendingLoad = true
71
+ schedulePendingLoadRetry()
72
+ return
73
+ }
74
+
75
+ hasPendingLoad = false
76
+ pendingLoadRetryCount = 0
77
+ cancelPendingLoadRetry()
78
+ hasScheduledLoadedAdDrawActivation = false
79
+ hasPulsedLoadedAdAttach = false
80
+ activatedAdChild = null
81
+ pulsedAdChild = null
82
+ loadAd()
83
+ }
84
+ }
85
+
86
+ private fun buildAdView(): DaroBannerAdView? {
87
+ if (adUnitId.isEmpty() || adSize == null) {
88
+ return null
89
+ }
90
+
91
+ return DaroBannerAdView(
92
+ context,
93
+ DaroBannerAdUnit(
94
+ key = adUnitId,
95
+ placement = adUnitId,
96
+ bannerSize = adSize!!,
97
+ )
98
+ ).also { view ->
99
+ view.setListener(this)
100
+ view.setOnHierarchyChangeListener(object : ViewGroup.OnHierarchyChangeListener {
101
+ override fun onChildViewAdded(parent: View, child: View) {
102
+ if (activatedAdChild !== child) {
103
+ hasScheduledLoadedAdDrawActivation = false
104
+ hasPulsedLoadedAdAttach = false
105
+ activatedAdChild = null
106
+ pulsedAdChild = null
107
+ }
108
+
109
+ layoutAdView()
110
+ layoutLoadedAdChild(child)
111
+ }
112
+
113
+ override fun onChildViewRemoved(parent: View, child: View) = Unit
114
+ })
115
+ }
116
+ }
117
+
118
+ fun destroy() {
119
+ cancelPendingLoadRetry()
120
+ hasPendingLoad = false
121
+ pendingLoadRetryCount = 0
122
+ hasScheduledLoadedAdDrawActivation = false
123
+ hasPulsedLoadedAdAttach = false
124
+ activatedAdChild = null
125
+ pulsedAdChild = null
126
+ adView?.setOnHierarchyChangeListener(null)
127
+ adView?.destroy()
128
+ adView = null
129
+ }
130
+
131
+ fun setAdVisibility(visible: Boolean) {
132
+ isAdVisible = visible
133
+ this.isVisible = visible
134
+ adView?.isVisible = visible
135
+
136
+ if (visible) {
137
+ resumeAd()
138
+ loadPendingAdIfReady()
139
+ } else {
140
+ cancelPendingLoadRetry()
141
+ pauseAd()
142
+ }
143
+ }
144
+
145
+ fun pauseAd() {
146
+ cancelPendingLoadRetry()
147
+ if (!isAdPaused) {
148
+ isAdPaused = true
149
+ adView?.pause()
150
+ }
151
+ }
152
+
153
+ fun resumeAd() {
154
+ if (isAdPaused) {
155
+ isAdPaused = false
156
+ adView?.resume()
157
+ }
158
+ loadPendingAdIfReady()
159
+ }
160
+
161
+ override fun onAdClicked(adInfo: DaroAdInfo) {
162
+ sendNativeViewEvent(
163
+ reactContext = context,
164
+ event = AdViewEvent.ON_AD_CLICKED,
165
+ params = AdInfoUtil.getAdInfo(adUnitId, adInfo)
166
+ )
167
+ }
168
+
169
+ override fun onAdImpression(adInfo: DaroAdInfo) {
170
+ sendNativeViewEvent(
171
+ reactContext = context,
172
+ event = AdViewEvent.ON_AD_IMPRESSION,
173
+ params = AdInfoUtil.getAdInfo(adUnitId, adInfo),
174
+ )
175
+ }
176
+
177
+ override fun onAdLoadFail(err: DaroAdLoadError) {
178
+ sendNativeViewEvent(
179
+ reactContext = context,
180
+ event = AdViewEvent.ON_AD_FAILED_TO_LOAD,
181
+ params = AdInfoUtil.getAdLoadFailedInfo(adUnitId, err),
182
+ )
183
+ }
184
+
185
+ override fun onAdLoadSuccess(
186
+ ad: DaroViewAd,
187
+ adInfo: DaroAdInfo,
188
+ ) {
189
+ layoutLoadedAdView()
190
+
191
+ sendNativeViewEvent(
192
+ reactContext = context,
193
+ event = AdViewEvent.ON_AD_LOADED,
194
+ params = AdInfoUtil.getAdInfo(adUnitId, adInfo),
195
+ )
196
+
197
+ post {
198
+ layoutLoadedAdView()
199
+ }
200
+ }
201
+
202
+ override fun requestLayout() {
203
+ super.requestLayout()
204
+
205
+ // https://stackoverflow.com/a/39838774/5477988
206
+ // This is required to ensure ad refreshes render correctly in RN Android due to known issue
207
+ // where `getWidth()` and `getHeight()` return 0 on attach
208
+ post {
209
+ layoutAdView()
210
+ loadPendingAdIfReady()
211
+ }
212
+ }
213
+
214
+ override fun onAttachedToWindow() {
215
+ super.onAttachedToWindow()
216
+ loadPendingAdIfReady()
217
+ }
218
+
219
+ override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
220
+ super.onSizeChanged(w, h, oldw, oldh)
221
+ layoutAdView()
222
+ loadPendingAdIfReady()
223
+ }
224
+
225
+ override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
226
+ super.onLayout(changed, left, top, right, bottom)
227
+ layoutAdView()
228
+ loadPendingAdIfReady()
229
+ }
230
+
231
+ override fun onWindowVisibilityChanged(visibility: Int) {
232
+ super.onWindowVisibilityChanged(visibility)
233
+
234
+ if (visibility == View.VISIBLE) {
235
+ loadPendingAdIfReady()
236
+ }
237
+ }
238
+
239
+ private fun layoutAdView() {
240
+ if (width <= 0 || height <= 0) {
241
+ return
242
+ }
243
+
244
+ try {
245
+ adView?.measure(
246
+ MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
247
+ MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
248
+ )
249
+
250
+ adView?.layout(0, 0, width, height)
251
+ } catch (_: Exception) {
252
+ // Ignore
253
+ }
254
+ }
255
+
256
+ private fun layoutLoadedAdView() {
257
+ layoutAdView()
258
+ adView?.children?.firstOrNull()?.let { layoutLoadedAdChild(it) }
259
+ }
260
+
261
+ private fun layoutLoadedAdChild(child: View) {
262
+ layoutLoadedAdChild(child, scheduleDrawActivation = true)
263
+ }
264
+
265
+ private fun layoutLoadedAdChild(child: View, scheduleDrawActivation: Boolean) {
266
+ if (width <= 0 || height <= 0) {
267
+ return
268
+ }
269
+
270
+ ensureMatchParentLayoutParams(child)
271
+
272
+ child.measure(
273
+ MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
274
+ MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
275
+ )
276
+
277
+ child.layout(0, 0, width, height)
278
+ child.requestLayout()
279
+ adView?.requestLayout()
280
+
281
+ if (scheduleDrawActivation) {
282
+ scheduleLoadedAdDrawActivation(child)
283
+ }
284
+ }
285
+
286
+ private fun scheduleLoadedAdDrawActivation(child: View) {
287
+ if (hasScheduledLoadedAdDrawActivation && activatedAdChild === child) {
288
+ return
289
+ }
290
+
291
+ hasScheduledLoadedAdDrawActivation = true
292
+ activatedAdChild = child
293
+ child.viewTreeObserver.addOnPreDrawListener(object : ViewTreeObserver.OnPreDrawListener {
294
+ override fun onPreDraw(): Boolean {
295
+ if (child.viewTreeObserver.isAlive) {
296
+ child.viewTreeObserver.removeOnPreDrawListener(this)
297
+ }
298
+
299
+ layoutLoadedAdChild(child)
300
+ pulseLoadedAdAttachIfNeeded(child)
301
+ adView?.requestLayout()
302
+ adView?.invalidate()
303
+ child.requestLayout()
304
+ child.invalidate()
305
+ return true
306
+ }
307
+ })
308
+ }
309
+
310
+ private fun pulseLoadedAdAttachIfNeeded(child: View) {
311
+ if ((hasPulsedLoadedAdAttach && pulsedAdChild === child) || !isStableVisibleAdChild(child)) {
312
+ return
313
+ }
314
+
315
+ hasPulsedLoadedAdAttach = true
316
+ pulsedAdChild = child
317
+ post {
318
+ val parent = child.parent as? ViewGroup
319
+ val currentAdView = adView
320
+ if (parent == null || currentAdView == null || parent !== currentAdView) {
321
+ return@post
322
+ }
323
+
324
+ parent.removeView(child)
325
+ ensureMatchParentLayoutParams(child)
326
+ currentAdView.addView(child)
327
+ layoutAdView()
328
+ layoutLoadedAdChild(child, scheduleDrawActivation = false)
329
+ child.requestLayout()
330
+ child.invalidate()
331
+ currentAdView.requestLayout()
332
+ currentAdView.invalidate()
333
+ }
334
+ }
335
+
336
+ private fun isStableVisibleAdChild(child: View): Boolean {
337
+ val hasGlobalVisibleRect = child.getGlobalVisibleRect(visibleRect)
338
+ return width > 0 &&
339
+ height > 0 &&
340
+ child.width > 0 &&
341
+ child.height > 0 &&
342
+ child.isAttachedToWindow &&
343
+ child.isShown &&
344
+ child.windowVisibility == View.VISIBLE &&
345
+ hasGlobalVisibleRect &&
346
+ visibleRect.width() > 0 &&
347
+ visibleRect.height() > 0
348
+ }
349
+
350
+ private fun ensureMatchParentLayoutParams(child: View) {
351
+ val layoutParams = child.layoutParams
352
+ if (layoutParams == null) {
353
+ child.layoutParams = FrameLayout.LayoutParams(
354
+ ViewGroup.LayoutParams.MATCH_PARENT,
355
+ ViewGroup.LayoutParams.MATCH_PARENT,
356
+ )
357
+ return
358
+ }
359
+
360
+ layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT
361
+ layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT
362
+ child.layoutParams = layoutParams
363
+ }
364
+
365
+ private fun loadPendingAdIfReady() {
366
+ if (!hasPendingLoad) {
367
+ return
368
+ }
369
+
370
+ if (canLoadAd()) {
371
+ loadAd()
372
+ } else {
373
+ schedulePendingLoadRetry()
374
+ }
375
+ }
376
+
377
+ private fun schedulePendingLoadRetry() {
378
+ if (isPendingLoadRetryScheduled || pendingLoadRetryCount >= MAX_PENDING_LOAD_RETRIES) {
379
+ return
380
+ }
381
+
382
+ isPendingLoadRetryScheduled = true
383
+ pendingLoadRetryCount += 1
384
+ val retryRunnable = Runnable {
385
+ pendingLoadRetryRunnable = null
386
+ isPendingLoadRetryScheduled = false
387
+ loadPendingAdIfReady()
388
+ }
389
+ pendingLoadRetryRunnable = retryRunnable
390
+ postDelayed(retryRunnable, PENDING_LOAD_RETRY_DELAY_MS)
391
+ }
392
+
393
+ private fun cancelPendingLoadRetry() {
394
+ pendingLoadRetryRunnable?.let { removeCallbacks(it) }
395
+ pendingLoadRetryRunnable = null
396
+ isPendingLoadRetryScheduled = false
397
+ }
398
+
399
+ private fun canLoadAd(): Boolean {
400
+ return isAdVisible &&
401
+ isAttachedToWindow &&
402
+ width > 0 &&
403
+ height > 0 &&
404
+ windowVisibility == View.VISIBLE
405
+ }
406
+
407
+ fun onSetProps() {
408
+ if (loadOnMount && !hasRequestedInitialLoad && canBuildAdView()) {
409
+ hasRequestedInitialLoad = true
410
+ loadAd()
411
+ }
412
+ }
413
+
414
+ private fun canBuildAdView(): Boolean {
415
+ return adUnitId.isNotEmpty() && adSize != null
416
+ }
417
+ }