react-native-daro 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +47 -0
  3. package/android/build.gradle +99 -0
  4. package/android/gradle.properties +5 -0
  5. package/android/src/main/AndroidManifest.xml +3 -0
  6. package/android/src/main/AndroidManifestNew.xml +7 -0
  7. package/android/src/main/java/com/darom/DaroMAdBannerViewManager.kt +114 -0
  8. package/android/src/main/java/com/darom/DaroMAdNativeViewManager.kt +133 -0
  9. package/android/src/main/java/com/darom/DaroMModule.kt +194 -0
  10. package/android/src/main/java/com/darom/DaroMPackage.kt +21 -0
  11. package/android/src/main/java/com/darom/constants/InternalDaroMBannerSize.kt +23 -0
  12. package/android/src/main/java/com/darom/event/DaroMEvent.kt +57 -0
  13. package/android/src/main/java/com/darom/impl/DaroMBannerViewModuleImpl.kt +10 -0
  14. package/android/src/main/java/com/darom/impl/DaroMInterstitialModuleImpl.kt +113 -0
  15. package/android/src/main/java/com/darom/impl/DaroMLightPopupModuleImpl.kt +149 -0
  16. package/android/src/main/java/com/darom/impl/DaroMRewardedAdModuleImpl.kt +128 -0
  17. package/android/src/main/java/com/darom/util/AdInfoUtil.kt +51 -0
  18. package/android/src/main/java/com/darom/util/EventEmitterUtil.kt +24 -0
  19. package/android/src/main/java/com/darom/view/DaroMAdBannerViewContainer.kt +132 -0
  20. package/android/src/main/java/com/darom/view/DaroMAdNativeViewContainer.kt +372 -0
  21. package/android/src/main/res/layout/layout_activity_transparent.xml +7 -0
  22. package/android/src/main/res/values/styles.xml +11 -0
  23. package/ios/Daro+Extensions.swift +196 -0
  24. package/ios/DaroM-Bridging-Header.h +6 -0
  25. package/ios/DaroMAdBannerViewManager.m +15 -0
  26. package/ios/DaroMAdBannerViewManager.swift +87 -0
  27. package/ios/DaroMModule+AppOpen.swift +98 -0
  28. package/ios/DaroMModule+Interstitial.swift +100 -0
  29. package/ios/DaroMModule+LightPopup.swift +166 -0
  30. package/ios/DaroMModule+Rewarded.swift +118 -0
  31. package/ios/DaroMModule.mm +45 -0
  32. package/ios/DaroMModule.swift +218 -0
  33. package/ios/DaroMNativeAdViewManager.m +26 -0
  34. package/ios/DaroMNativeAdViewManager.swift +291 -0
  35. package/lib/commonjs/AdBannerView.js +115 -0
  36. package/lib/commonjs/AdBannerView.js.map +1 -0
  37. package/lib/commonjs/AppOpenAd.js +92 -0
  38. package/lib/commonjs/AppOpenAd.js.map +1 -0
  39. package/lib/commonjs/ErrorCode.js +11 -0
  40. package/lib/commonjs/ErrorCode.js.map +1 -0
  41. package/lib/commonjs/EventEmitter.js +30 -0
  42. package/lib/commonjs/EventEmitter.js.map +1 -0
  43. package/lib/commonjs/InterstitialAd.js +92 -0
  44. package/lib/commonjs/InterstitialAd.js.map +1 -0
  45. package/lib/commonjs/LightPopupAd.js +135 -0
  46. package/lib/commonjs/LightPopupAd.js.map +1 -0
  47. package/lib/commonjs/RewardedAd.js +105 -0
  48. package/lib/commonjs/RewardedAd.js.map +1 -0
  49. package/lib/commonjs/index.js +126 -0
  50. package/lib/commonjs/index.js.map +1 -0
  51. package/lib/commonjs/nativeAd/NativeAdView.js +103 -0
  52. package/lib/commonjs/nativeAd/NativeAdView.js.map +1 -0
  53. package/lib/commonjs/nativeAd/NativeAdViewComponents.js +189 -0
  54. package/lib/commonjs/nativeAd/NativeAdViewComponents.js.map +1 -0
  55. package/lib/commonjs/nativeAd/NativeAdViewProvider.js +29 -0
  56. package/lib/commonjs/nativeAd/NativeAdViewProvider.js.map +1 -0
  57. package/lib/commonjs/types/AdBannerViewProps.js +6 -0
  58. package/lib/commonjs/types/AdBannerViewProps.js.map +1 -0
  59. package/lib/commonjs/types/AdEvent.js +6 -0
  60. package/lib/commonjs/types/AdEvent.js.map +1 -0
  61. package/lib/commonjs/types/AdInfo.js +6 -0
  62. package/lib/commonjs/types/AdInfo.js.map +1 -0
  63. package/lib/commonjs/types/AdProps.js +6 -0
  64. package/lib/commonjs/types/AdProps.js.map +1 -0
  65. package/lib/commonjs/types/AppOpenAd.js +6 -0
  66. package/lib/commonjs/types/AppOpenAd.js.map +1 -0
  67. package/lib/commonjs/types/DaroMMobileAds.js +2 -0
  68. package/lib/commonjs/types/DaroMMobileAds.js.map +1 -0
  69. package/lib/commonjs/types/FullScreenAd.js +6 -0
  70. package/lib/commonjs/types/FullScreenAd.js.map +1 -0
  71. package/lib/commonjs/types/InterstitialAd.js +6 -0
  72. package/lib/commonjs/types/InterstitialAd.js.map +1 -0
  73. package/lib/commonjs/types/LightPopupAd.js +6 -0
  74. package/lib/commonjs/types/LightPopupAd.js.map +1 -0
  75. package/lib/commonjs/types/NativeAdViewProps.js +6 -0
  76. package/lib/commonjs/types/NativeAdViewProps.js.map +1 -0
  77. package/lib/commonjs/types/RewardedAd.js +6 -0
  78. package/lib/commonjs/types/RewardedAd.js.map +1 -0
  79. package/lib/commonjs/types/index.js +61 -0
  80. package/lib/commonjs/types/index.js.map +1 -0
  81. package/lib/module/AdBannerView.js +111 -0
  82. package/lib/module/AdBannerView.js.map +1 -0
  83. package/lib/module/AppOpenAd.js +88 -0
  84. package/lib/module/AppOpenAd.js.map +1 -0
  85. package/lib/module/ErrorCode.js +7 -0
  86. package/lib/module/ErrorCode.js.map +1 -0
  87. package/lib/module/EventEmitter.js +24 -0
  88. package/lib/module/EventEmitter.js.map +1 -0
  89. package/lib/module/InterstitialAd.js +88 -0
  90. package/lib/module/InterstitialAd.js.map +1 -0
  91. package/lib/module/LightPopupAd.js +130 -0
  92. package/lib/module/LightPopupAd.js.map +1 -0
  93. package/lib/module/RewardedAd.js +101 -0
  94. package/lib/module/RewardedAd.js.map +1 -0
  95. package/lib/module/index.js +30 -0
  96. package/lib/module/index.js.map +1 -0
  97. package/lib/module/nativeAd/NativeAdView.js +99 -0
  98. package/lib/module/nativeAd/NativeAdView.js.map +1 -0
  99. package/lib/module/nativeAd/NativeAdViewComponents.js +179 -0
  100. package/lib/module/nativeAd/NativeAdViewComponents.js.map +1 -0
  101. package/lib/module/nativeAd/NativeAdViewProvider.js +23 -0
  102. package/lib/module/nativeAd/NativeAdViewProvider.js.map +1 -0
  103. package/lib/module/types/AdBannerViewProps.js +4 -0
  104. package/lib/module/types/AdBannerViewProps.js.map +1 -0
  105. package/lib/module/types/AdEvent.js +4 -0
  106. package/lib/module/types/AdEvent.js.map +1 -0
  107. package/lib/module/types/AdInfo.js +4 -0
  108. package/lib/module/types/AdInfo.js.map +1 -0
  109. package/lib/module/types/AdProps.js +4 -0
  110. package/lib/module/types/AdProps.js.map +1 -0
  111. package/lib/module/types/AppOpenAd.js +4 -0
  112. package/lib/module/types/AppOpenAd.js.map +1 -0
  113. package/lib/module/types/DaroMMobileAds.js +2 -0
  114. package/lib/module/types/DaroMMobileAds.js.map +1 -0
  115. package/lib/module/types/FullScreenAd.js +4 -0
  116. package/lib/module/types/FullScreenAd.js.map +1 -0
  117. package/lib/module/types/InterstitialAd.js +4 -0
  118. package/lib/module/types/InterstitialAd.js.map +1 -0
  119. package/lib/module/types/LightPopupAd.js +4 -0
  120. package/lib/module/types/LightPopupAd.js.map +1 -0
  121. package/lib/module/types/NativeAdViewProps.js +4 -0
  122. package/lib/module/types/NativeAdViewProps.js.map +1 -0
  123. package/lib/module/types/RewardedAd.js +4 -0
  124. package/lib/module/types/RewardedAd.js.map +1 -0
  125. package/lib/module/types/index.js +8 -0
  126. package/lib/module/types/index.js.map +1 -0
  127. package/lib/typescript/commonjs/package.json +1 -0
  128. package/lib/typescript/commonjs/src/AdBannerView.d.ts +12 -0
  129. package/lib/typescript/commonjs/src/AdBannerView.d.ts.map +1 -0
  130. package/lib/typescript/commonjs/src/AppOpenAd.d.ts +4 -0
  131. package/lib/typescript/commonjs/src/AppOpenAd.d.ts.map +1 -0
  132. package/lib/typescript/commonjs/src/ErrorCode.d.ts +4 -0
  133. package/lib/typescript/commonjs/src/ErrorCode.d.ts.map +1 -0
  134. package/lib/typescript/commonjs/src/EventEmitter.d.ts +4 -0
  135. package/lib/typescript/commonjs/src/EventEmitter.d.ts.map +1 -0
  136. package/lib/typescript/commonjs/src/InterstitialAd.d.ts +4 -0
  137. package/lib/typescript/commonjs/src/InterstitialAd.d.ts.map +1 -0
  138. package/lib/typescript/commonjs/src/LightPopupAd.d.ts +4 -0
  139. package/lib/typescript/commonjs/src/LightPopupAd.d.ts.map +1 -0
  140. package/lib/typescript/commonjs/src/RewardedAd.d.ts +4 -0
  141. package/lib/typescript/commonjs/src/RewardedAd.d.ts.map +1 -0
  142. package/lib/typescript/commonjs/src/index.d.ts +11 -0
  143. package/lib/typescript/commonjs/src/index.d.ts.map +1 -0
  144. package/lib/typescript/commonjs/src/nativeAd/NativeAdView.d.ts +6 -0
  145. package/lib/typescript/commonjs/src/nativeAd/NativeAdView.d.ts.map +1 -0
  146. package/lib/typescript/commonjs/src/nativeAd/NativeAdViewComponents.d.ts +7 -0
  147. package/lib/typescript/commonjs/src/nativeAd/NativeAdViewComponents.d.ts.map +1 -0
  148. package/lib/typescript/commonjs/src/nativeAd/NativeAdViewProvider.d.ts +14 -0
  149. package/lib/typescript/commonjs/src/nativeAd/NativeAdViewProvider.d.ts.map +1 -0
  150. package/lib/typescript/commonjs/src/types/AdBannerViewProps.d.ts +14 -0
  151. package/lib/typescript/commonjs/src/types/AdBannerViewProps.d.ts.map +1 -0
  152. package/lib/typescript/commonjs/src/types/AdEvent.d.ts +7 -0
  153. package/lib/typescript/commonjs/src/types/AdEvent.d.ts.map +1 -0
  154. package/lib/typescript/commonjs/src/types/AdInfo.d.ts +19 -0
  155. package/lib/typescript/commonjs/src/types/AdInfo.d.ts.map +1 -0
  156. package/lib/typescript/commonjs/src/types/AdProps.d.ts +11 -0
  157. package/lib/typescript/commonjs/src/types/AdProps.d.ts.map +1 -0
  158. package/lib/typescript/commonjs/src/types/AppOpenAd.d.ts +3 -0
  159. package/lib/typescript/commonjs/src/types/AppOpenAd.d.ts.map +1 -0
  160. package/lib/typescript/commonjs/src/types/DaroMMobileAds.d.ts +6 -0
  161. package/lib/typescript/commonjs/src/types/DaroMMobileAds.d.ts.map +1 -0
  162. package/lib/typescript/commonjs/src/types/FullScreenAd.d.ts +21 -0
  163. package/lib/typescript/commonjs/src/types/FullScreenAd.d.ts.map +1 -0
  164. package/lib/typescript/commonjs/src/types/InterstitialAd.d.ts +3 -0
  165. package/lib/typescript/commonjs/src/types/InterstitialAd.d.ts.map +1 -0
  166. package/lib/typescript/commonjs/src/types/LightPopupAd.d.ts +18 -0
  167. package/lib/typescript/commonjs/src/types/LightPopupAd.d.ts.map +1 -0
  168. package/lib/typescript/commonjs/src/types/NativeAdViewProps.d.ts +17 -0
  169. package/lib/typescript/commonjs/src/types/NativeAdViewProps.d.ts.map +1 -0
  170. package/lib/typescript/commonjs/src/types/RewardedAd.d.ts +9 -0
  171. package/lib/typescript/commonjs/src/types/RewardedAd.d.ts.map +1 -0
  172. package/lib/typescript/commonjs/src/types/index.d.ts +6 -0
  173. package/lib/typescript/commonjs/src/types/index.d.ts.map +1 -0
  174. package/lib/typescript/module/package.json +1 -0
  175. package/lib/typescript/module/src/AdBannerView.d.ts +12 -0
  176. package/lib/typescript/module/src/AdBannerView.d.ts.map +1 -0
  177. package/lib/typescript/module/src/AppOpenAd.d.ts +4 -0
  178. package/lib/typescript/module/src/AppOpenAd.d.ts.map +1 -0
  179. package/lib/typescript/module/src/ErrorCode.d.ts +4 -0
  180. package/lib/typescript/module/src/ErrorCode.d.ts.map +1 -0
  181. package/lib/typescript/module/src/EventEmitter.d.ts +4 -0
  182. package/lib/typescript/module/src/EventEmitter.d.ts.map +1 -0
  183. package/lib/typescript/module/src/InterstitialAd.d.ts +4 -0
  184. package/lib/typescript/module/src/InterstitialAd.d.ts.map +1 -0
  185. package/lib/typescript/module/src/LightPopupAd.d.ts +4 -0
  186. package/lib/typescript/module/src/LightPopupAd.d.ts.map +1 -0
  187. package/lib/typescript/module/src/RewardedAd.d.ts +4 -0
  188. package/lib/typescript/module/src/RewardedAd.d.ts.map +1 -0
  189. package/lib/typescript/module/src/index.d.ts +11 -0
  190. package/lib/typescript/module/src/index.d.ts.map +1 -0
  191. package/lib/typescript/module/src/nativeAd/NativeAdView.d.ts +6 -0
  192. package/lib/typescript/module/src/nativeAd/NativeAdView.d.ts.map +1 -0
  193. package/lib/typescript/module/src/nativeAd/NativeAdViewComponents.d.ts +7 -0
  194. package/lib/typescript/module/src/nativeAd/NativeAdViewComponents.d.ts.map +1 -0
  195. package/lib/typescript/module/src/nativeAd/NativeAdViewProvider.d.ts +14 -0
  196. package/lib/typescript/module/src/nativeAd/NativeAdViewProvider.d.ts.map +1 -0
  197. package/lib/typescript/module/src/types/AdBannerViewProps.d.ts +14 -0
  198. package/lib/typescript/module/src/types/AdBannerViewProps.d.ts.map +1 -0
  199. package/lib/typescript/module/src/types/AdEvent.d.ts +7 -0
  200. package/lib/typescript/module/src/types/AdEvent.d.ts.map +1 -0
  201. package/lib/typescript/module/src/types/AdInfo.d.ts +19 -0
  202. package/lib/typescript/module/src/types/AdInfo.d.ts.map +1 -0
  203. package/lib/typescript/module/src/types/AdProps.d.ts +11 -0
  204. package/lib/typescript/module/src/types/AdProps.d.ts.map +1 -0
  205. package/lib/typescript/module/src/types/AppOpenAd.d.ts +3 -0
  206. package/lib/typescript/module/src/types/AppOpenAd.d.ts.map +1 -0
  207. package/lib/typescript/module/src/types/DaroMMobileAds.d.ts +6 -0
  208. package/lib/typescript/module/src/types/DaroMMobileAds.d.ts.map +1 -0
  209. package/lib/typescript/module/src/types/FullScreenAd.d.ts +21 -0
  210. package/lib/typescript/module/src/types/FullScreenAd.d.ts.map +1 -0
  211. package/lib/typescript/module/src/types/InterstitialAd.d.ts +3 -0
  212. package/lib/typescript/module/src/types/InterstitialAd.d.ts.map +1 -0
  213. package/lib/typescript/module/src/types/LightPopupAd.d.ts +18 -0
  214. package/lib/typescript/module/src/types/LightPopupAd.d.ts.map +1 -0
  215. package/lib/typescript/module/src/types/NativeAdViewProps.d.ts +17 -0
  216. package/lib/typescript/module/src/types/NativeAdViewProps.d.ts.map +1 -0
  217. package/lib/typescript/module/src/types/RewardedAd.d.ts +9 -0
  218. package/lib/typescript/module/src/types/RewardedAd.d.ts.map +1 -0
  219. package/lib/typescript/module/src/types/index.d.ts +6 -0
  220. package/lib/typescript/module/src/types/index.d.ts.map +1 -0
  221. package/package.json +185 -0
  222. package/react-native-daro-m.podspec +44 -0
  223. package/src/AdBannerView.tsx +138 -0
  224. package/src/AppOpenAd.ts +113 -0
  225. package/src/ErrorCode.ts +4 -0
  226. package/src/EventEmitter.ts +25 -0
  227. package/src/InterstitialAd.ts +113 -0
  228. package/src/LightPopupAd.ts +161 -0
  229. package/src/RewardedAd.ts +130 -0
  230. package/src/index.tsx +37 -0
  231. package/src/nativeAd/NativeAdView.tsx +124 -0
  232. package/src/nativeAd/NativeAdViewComponents.tsx +239 -0
  233. package/src/nativeAd/NativeAdViewProvider.tsx +32 -0
  234. package/src/types/AdBannerViewProps.ts +15 -0
  235. package/src/types/AdEvent.ts +9 -0
  236. package/src/types/AdInfo.ts +37 -0
  237. package/src/types/AdProps.ts +18 -0
  238. package/src/types/AppOpenAd.ts +3 -0
  239. package/src/types/DaroMMobileAds.ts +8 -0
  240. package/src/types/FullScreenAd.ts +28 -0
  241. package/src/types/InterstitialAd.ts +3 -0
  242. package/src/types/LightPopupAd.ts +19 -0
  243. package/src/types/NativeAdViewProps.ts +18 -0
  244. package/src/types/RewardedAd.ts +15 -0
  245. package/src/types/index.ts +5 -0
@@ -0,0 +1,98 @@
1
+ import Daro
2
+
3
+ // MARK: - AppOpen Ad Methods
4
+
5
+ extension DaroMModule {
6
+
7
+ @objc(isAppOpenAdReady:::)
8
+ func isAppOpenAdReady(
9
+ _ adUnitId: String,
10
+ resolve: RCTPromiseResolveBlock,
11
+ reject: RCTPromiseRejectBlock
12
+ ) {
13
+ if !Self.sdkInitialized {
14
+ DaroMModule.logger.debug("[DaroMMobileAds] !isInitialized")
15
+ resolve(false)
16
+ return
17
+ }
18
+ resolve(appOpenAds[adUnitId]?.loadedAd != nil)
19
+ }
20
+
21
+ @objc(loadAppOpenAd:::)
22
+ func loadAppOpenAd(
23
+ _ adUnitId: String,
24
+ resolve: RCTPromiseResolveBlock,
25
+ reject: RCTPromiseRejectBlock
26
+ ) {
27
+ let appOpenAdLoader = retrieveAppOpenLoader(for: adUnitId)
28
+ appOpenAdLoader.loadAd()
29
+ resolve(Void())
30
+ }
31
+
32
+ @objc(showAppOpenAd::::)
33
+ func showAppOpenAd(
34
+ _ adUnitId: String,
35
+ customData: String?,
36
+ resolve: @escaping RCTPromiseResolveBlock,
37
+ reject: RCTPromiseRejectBlock
38
+ ) {
39
+ guard let loadedAd = appOpenAds[adUnitId]?.loadedAd else {
40
+ reject("APPOPEN_NOT_LOADED", "AppOpen ad not loaded", nil)
41
+ return
42
+ }
43
+ DispatchQueue.main.async {
44
+ loadedAd.show()
45
+ resolve(Void())
46
+ }
47
+ }
48
+
49
+ func retrieveAppOpenLoader(for unitId: String) -> DaroAppOpenAdLoader {
50
+ if let appOpenLoader = appOpenAds[unitId] {
51
+ return appOpenLoader.loader
52
+ } else {
53
+ let appOpenLoader = DaroAppOpenAdLoader(unit: DaroAdUnit(unitId: unitId))
54
+ appOpenLoader.listener.onAdClicked = { [weak self] adInfo in
55
+ DaroMModule.logger.debug("[DARO] Sample Interstitial Ad clicked")
56
+ self?.sendEvent(with: .onAppOpenAdClickedEvent, body: adInfo?.toBody)
57
+ }
58
+
59
+ 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)
63
+ }
64
+
65
+ 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)
70
+ }
71
+
72
+ 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)
75
+ }
76
+ self.appOpenAds[unitId] = AppOpenAd(loader: appOpenLoader)
77
+ return appOpenLoader
78
+ }
79
+ }
80
+
81
+ private func setupAppOpenListener(for ad: DaroAppOpenAd) {
82
+ ad.appOpenAdListener.onShown = { [weak self] adInfo in
83
+ DaroMModule.logger.debug("[DARO] Sample AppOpen Ad displayed")
84
+ self?.sendEvent(with: .onAppOpenAdDisplayedEvent, body: adInfo?.toBody)
85
+ }
86
+
87
+ ad.appOpenAdListener.onDismiss = { [weak self] adInfo in
88
+ DaroMModule.logger.debug("[DARO] Sample AppOpen Ad hidden")
89
+ self?.sendEvent(with: .onAppOpenAdHiddenEvent, body: adInfo?.toBody)
90
+ }
91
+
92
+ ad.appOpenAdListener.onFailedToShow = { [weak self] adInfo, error in
93
+ DaroMModule.logger.debug("[DARO] Sample AppOpen Ad failed to display")
94
+ self?.sendEvent(with: .onAppOpenAdFailedToDisplayEvent, body: adInfo?.toBody)
95
+ }
96
+ }
97
+ }
98
+
@@ -0,0 +1,100 @@
1
+ import Daro
2
+
3
+ // MARK: - Interstitial Ad Methods
4
+
5
+ extension DaroMModule {
6
+
7
+ @objc(isInterstitialReady:::)
8
+ func isInterstitialReady(
9
+ _ adUnitId: String,
10
+ resolve: RCTPromiseResolveBlock,
11
+ reject: RCTPromiseRejectBlock
12
+ ) {
13
+ if !Self.sdkInitialized {
14
+ DaroMModule.logger.debug("[DaroMMobileAds] !isInitialized")
15
+ resolve(false)
16
+ return
17
+ }
18
+ resolve(interstitials[adUnitId]?.loadedAd != nil)
19
+ }
20
+
21
+ @objc(loadInterstitial:::)
22
+ func loadInterstitial(
23
+ _ adUnitId: String,
24
+ resolve: RCTPromiseResolveBlock,
25
+ reject: RCTPromiseRejectBlock
26
+ ) {
27
+ let interstitialLoader = retrieveInterstitialLoader(for: adUnitId)
28
+ interstitialLoader.loadAd()
29
+ resolve(Void())
30
+ }
31
+
32
+ @objc(showInterstitial:::)
33
+ func showInterstitial(
34
+ _ adUnitId: String,
35
+ resolve: @escaping RCTPromiseResolveBlock,
36
+ reject: @escaping RCTPromiseRejectBlock
37
+ ) {
38
+ guard let loadedAd = interstitials[adUnitId]?.loadedAd else {
39
+ reject("INTERSTITIAL_NOT_LOADED", "Interstitial ad not loaded", nil)
40
+ return
41
+ }
42
+ DispatchQueue.main.async {
43
+ guard let viewController = UIApplication.shared.windows.first?.rootViewController else {
44
+ reject("VIEW_CONTROLLER_NOT_FOUND", "Root view controller not found", nil)
45
+ return
46
+ }
47
+ loadedAd.show(viewController: viewController)
48
+ resolve(Void())
49
+ }
50
+ }
51
+
52
+ func retrieveInterstitialLoader(for unitId: String) -> DaroInterstitialAdLoader {
53
+ if let interstitialAd = interstitials[unitId] {
54
+ return interstitialAd.loader
55
+ } else {
56
+ let interstitialLoader = DaroInterstitialAdLoader(unit: DaroAdUnit(unitId: unitId))
57
+ interstitialLoader.listener.onAdClicked = { [weak self] adInfo in
58
+ DaroMModule.logger.debug("[DARO] Sample Interstitial Ad clicked")
59
+ self?.sendEvent(with: .onInterstitialClickedEvent, body: adInfo?.toBody)
60
+ }
61
+
62
+ interstitialLoader.listener.onAdImpression = { [weak self] adInfo in
63
+ DaroMModule.logger.debug("[DARO] Sample Interstitial Ad impression")
64
+ self?.interstitials[unitId]?.loadedAd = nil
65
+ self?.sendEvent(with: .onInterstitialAdImpressionRecordedEvent, body: adInfo?.toBody)
66
+ }
67
+
68
+ interstitialLoader.listener.onAdLoadSuccess = { [weak self] ad, adInfo in
69
+ 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)
73
+ }
74
+
75
+ interstitialLoader.listener.onAdLoadFail = { [weak self] error in
76
+ DaroMModule.logger.debug("[DARO] Sample Interstitial Ad failed: \(error)")
77
+ self?.sendEvent(with: .onInterstitialLoadFailedEvent, body: error.toBody)
78
+ }
79
+ self.interstitials[unitId] = InterstitialAd(loader: interstitialLoader)
80
+ return interstitialLoader
81
+ }
82
+ }
83
+
84
+ private func setupInterstitialListener(for ad: DaroInterstitialAd) {
85
+ ad.interstitialListener.onShown = { [weak self] adInfo in
86
+ DaroMModule.logger.debug("[DARO] Sample Interstitial Ad displayed")
87
+ self?.sendEvent(with: .onInterstitialDisplayedEvent, body: adInfo?.toBody)
88
+ }
89
+
90
+ ad.interstitialListener.onDismiss = { [weak self] adInfo in
91
+ DaroMModule.logger.debug("[DARO] Sample Interstitial Ad hidden")
92
+ self?.sendEvent(with: .onInterstitialHiddenEvent, body: adInfo?.toBody)
93
+ }
94
+
95
+ ad.interstitialListener.onFailedToShow = { [weak self] adInfo, error in
96
+ DaroMModule.logger.debug("[DARO] Sample Interstitial Ad failed to display")
97
+ self?.sendEvent(with: .onInterstitialAdFailedToDisplayEvent, body: adInfo?.toBody)
98
+ }
99
+ }
100
+ }
@@ -0,0 +1,166 @@
1
+ import Daro
2
+ import UIKit
3
+ // MARK: - LightPopup Ad
4
+ extension DaroMModule {
5
+
6
+ @objc(isLightPopupReady:::)
7
+ func isLightPopupReady(
8
+ _ adUnitId: String,
9
+ resolve: RCTPromiseResolveBlock,
10
+ reject: RCTPromiseRejectBlock
11
+ ) {
12
+ if !Self.sdkInitialized {
13
+ DaroMModule.logger.debug("[DaroMMobileAds] !isInitialized")
14
+ resolve(false)
15
+ return
16
+ }
17
+ resolve(lightPopups[adUnitId]?.loadedAd != nil)
18
+ }
19
+
20
+ @objc(loadLightPopup:::)
21
+ func loadLightPopup(
22
+ _ adUnitId: String,
23
+ resolve: RCTPromiseResolveBlock,
24
+ reject: RCTPromiseRejectBlock
25
+ ) {
26
+ let lightPopupLoader = retrieveLightPopupLoader(for: adUnitId)
27
+ lightPopupLoader.loadAd()
28
+ resolve(Void())
29
+ }
30
+
31
+ @objc(showLightPopup:::)
32
+ func showLightPopup(
33
+ _ adUnitId: String,
34
+ resolve: @escaping RCTPromiseResolveBlock,
35
+ reject: @escaping RCTPromiseRejectBlock
36
+ ) {
37
+ guard let loadedAd = lightPopups[adUnitId]?.loadedAd else {
38
+ reject("LIGHTPOPUP_NOT_LOADED", "LightPopup ad not loaded", nil)
39
+ return
40
+ }
41
+ DispatchQueue.main.async {
42
+ guard let viewController = UIApplication.shared.windows.first?.rootViewController else {
43
+ reject("VIEW_CONTROLLER_NOT_FOUND", "Root view controller not found", nil)
44
+ return
45
+ }
46
+ loadedAd.show(viewController: viewController)
47
+ resolve(Void())
48
+ }
49
+ }
50
+
51
+ @objc(setLightPopupAdConfiguration::::)
52
+ func setLightPopupAdConfiguration(
53
+ _ adUnitId: String,
54
+ configuration: [String: Any],
55
+ resolve: RCTPromiseResolveBlock,
56
+ reject: RCTPromiseRejectBlock
57
+ ) {
58
+ guard let loadedAd = lightPopups[adUnitId]?.loadedAd else {
59
+ lightPopupConfigurations[adUnitId] = configuration
60
+ resolve(Void())
61
+ return
62
+ }
63
+ executeOnMainThread {
64
+ let lightPopupConfig = DaroLightPopupConfiguration()
65
+
66
+ func setColorIfValid(_ key: String, setter: (UIColor) -> Void) {
67
+ if let colorString = configuration[key] as? String {
68
+ setter(UIColor(hex: colorString))
69
+ }
70
+ }
71
+
72
+ setColorIfValid("backgroundColor") { lightPopupConfig.backgroundColor = $0 }
73
+ setColorIfValid("cardViewBackgroundColor") { lightPopupConfig.cardViewBackgroundColor = $0 }
74
+ setColorIfValid("adMarkLabelTextColor") { lightPopupConfig.adMarkLabelTextColor = $0 }
75
+ setColorIfValid("adMarkLabelBackgroundColor") { lightPopupConfig.adMarkLabelBackgroundColor = $0 }
76
+ setColorIfValid("closeButtonTextColor") { lightPopupConfig.closeButtonTextColor = $0 }
77
+ setColorIfValid("titleTextColor") { lightPopupConfig.titleTextColor = $0 }
78
+ setColorIfValid("bodyTextColor") { lightPopupConfig.bodyTextColor = $0 }
79
+ setColorIfValid("ctaButtonTextColor") { lightPopupConfig.ctaButtonTextColor = $0 }
80
+ setColorIfValid("ctaButtonBackgroundColor") { lightPopupConfig.ctaButtonBackgroundColor = $0 }
81
+
82
+ if let closeButtonText = configuration["closeButtonText"] as? String {
83
+ lightPopupConfig.closeButtonText = closeButtonText
84
+ }
85
+
86
+ loadedAd.configuration = lightPopupConfig
87
+ }
88
+ resolve(Void())
89
+ }
90
+
91
+ func retrieveLightPopupLoader(for unitId: String) -> DaroLightPopupAdLoader {
92
+ if let lightPopupAd = lightPopups[unitId] {
93
+ return lightPopupAd.loader
94
+ } else {
95
+ let lightPopupLoader = DaroLightPopupAdLoader(unit: DaroAdUnit(unitId: unitId))
96
+
97
+ lightPopupLoader.listener.onAdClicked = { [weak self] adInfo in
98
+ self?.sendEvent(with: .onLightPopupClickedEvent, body: adInfo?.toBody)
99
+ }
100
+
101
+ lightPopupLoader.listener.onAdImpression = { [weak self] adInfo in
102
+ self?.lightPopups[unitId]?.loadedAd = nil
103
+ self?.sendEvent(with: .onLightPopupAdImpressionRecordedEvent, body: adInfo?.toBody)
104
+ }
105
+
106
+ lightPopupLoader.listener.onAdLoadSuccess = { [weak self] ad, adInfo in
107
+ self?.lightPopups[unitId]?.loadedAd = ad
108
+ self?.sendEvent(with: .onLightPopupLoadedEvent, body: adInfo?.toBody)
109
+ self?.setupLightPopupListener(for: ad)
110
+ }
111
+
112
+ lightPopupLoader.listener.onAdLoadFail = { [weak self] error in
113
+ self?.sendEvent(with: .onLightPopupLoadFailedEvent, body: error.toBody)
114
+ }
115
+
116
+ self.lightPopups[unitId] = LightPopupAd(loader: lightPopupLoader)
117
+ return lightPopupLoader
118
+ }
119
+ }
120
+
121
+ private func setupLightPopupListener(for ad: DaroLightPopupAd) {
122
+ ad.lightPopupAdListener.onShown = { [weak self] adInfo in
123
+ self?.sendEvent(with: .onLightPopupDisplayedEvent, body: adInfo?.toBody)
124
+ }
125
+
126
+ ad.lightPopupAdListener.onDismiss = { [weak self] adInfo in
127
+ self?.sendEvent(with: .onLightPopupHiddenEvent, body: adInfo?.toBody)
128
+ }
129
+
130
+ ad.lightPopupAdListener.onFailedToShow = { [weak self] adInfo, error in
131
+ self?.sendEvent(with: .onLightPopupAdFailedToDisplayEvent, body: adInfo?.toBody)
132
+ }
133
+ }
134
+
135
+ // 메인 스레드에서 실행하는 헬퍼 메서드
136
+ private func executeOnMainThread<T>(_ block: () -> T) -> T {
137
+ if Thread.isMainThread {
138
+ return block()
139
+ } else {
140
+ var result: T!
141
+ DispatchQueue.main.sync {
142
+ result = block()
143
+ }
144
+ return result
145
+ }
146
+ }
147
+ }
148
+
149
+ extension DaroLightPopupConfiguration {
150
+ convenience init(from configuration: [String: Any]) {
151
+ self.init()
152
+ func setColorIfValid(_ key: String, setter: (UIColor) -> Void) {
153
+ if let colorString = configuration[key] as? String {
154
+ setter(UIColor(hex: colorString))
155
+ }
156
+ }
157
+
158
+ setColorIfValid("backgroundColor") { self.backgroundColor = $0 }
159
+ setColorIfValid("cardViewBackgroundColor") { self.cardViewBackgroundColor = $0 }
160
+ setColorIfValid("adMarkLabelTextColor") { self.adMarkLabelTextColor = $0 }
161
+ setColorIfValid("adMarkLabelBackgroundColor") { self.adMarkLabelBackgroundColor = $0 }
162
+ setColorIfValid("closeButtonTextColor") { self.closeButtonTextColor = $0 }
163
+ setColorIfValid("titleTextColor") { self.titleTextColor = $0 }
164
+ setColorIfValid("bodyTextColor") { self.bodyTextColor = $0 }
165
+ }
166
+ }
@@ -0,0 +1,118 @@
1
+ import Daro
2
+
3
+
4
+ extension DaroMModule {
5
+ @objc(isRewardedAdReady:::)
6
+ func isRewardedAdReady(
7
+ _ adUnitId: String,
8
+ resolve: RCTPromiseResolveBlock,
9
+ reject: RCTPromiseRejectBlock
10
+ ) {
11
+ if !Self.sdkInitialized {
12
+ DaroMModule.logger.debug("[DaroMMobileAds] !isInitialized")
13
+ resolve(false)
14
+ return
15
+ }
16
+
17
+ resolve(rewardedAds[adUnitId]?.loadedAd != nil)
18
+ }
19
+
20
+ @objc(loadRewardedAd:::)
21
+ func loadRewardedAd(
22
+ _ adUnitId: String,
23
+ resolve: RCTPromiseResolveBlock,
24
+ reject: RCTPromiseRejectBlock
25
+ ) {
26
+ let rewardedLoader = retrieveRewardedLoader(for: adUnitId)
27
+ rewardedLoader.loadAd()
28
+ resolve(Void())
29
+ }
30
+
31
+ @objc(showRewardedAd::::)
32
+ func showRewardedAd(
33
+ _ adUnitId: String,
34
+ customData: String?,
35
+ resolve: @escaping RCTPromiseResolveBlock,
36
+ reject: @escaping RCTPromiseRejectBlock
37
+ ) {
38
+ guard let loadedAd = rewardedAds[adUnitId]?.loadedAd else {
39
+ reject("REWARDED_AD_NOT_LOADED", "Rewarded ad not loaded", nil)
40
+ return
41
+ }
42
+ DispatchQueue.main.async {
43
+ guard let viewController = UIApplication.shared.windows.first?.rootViewController else {
44
+ reject("VIEW_CONTROLLER_NOT_FOUND", "Root view controller not found", nil)
45
+ return
46
+ }
47
+ if let customData {
48
+ loadedAd.setCustomData(customData)
49
+ }
50
+ loadedAd.show(viewController: viewController)
51
+ resolve(Void())
52
+ }
53
+ }
54
+
55
+ func retrieveRewardedLoader(for unitId: String) -> DaroRewardedAdLoader {
56
+ if let rewardedAd = rewardedAds[unitId] {
57
+ return rewardedAd.loader
58
+ } else {
59
+ let rewardedAdLoader = DaroRewardedAdLoader(unit: DaroAdUnit(unitId: unitId))
60
+ rewardedAdLoader.listener.onAdClicked = { [weak self] adInfo in
61
+ DaroMModule.logger.debug("[DARO] Sample Rewarded Ad clicked")
62
+ self?.sendEvent(with: .onRewardedAdClickedEvent, body: adInfo?.toBody)
63
+ }
64
+
65
+ rewardedAdLoader.listener.onAdImpression = { [weak self] adInfo in
66
+ DaroMModule.logger.debug("[DARO] Sample Rewarded Ad impression")
67
+ self?.rewardedAds[unitId]?.loadedAd = nil
68
+ self?.sendEvent(with: .onRewardedAdImpressionRecordedEvent, body: adInfo?.toBody)
69
+ }
70
+
71
+ rewardedAdLoader.listener.onAdLoadSuccess = { [weak self] ad, adInfo in
72
+ DaroMModule.logger.debug("[DARO] Sample Rewarded Ad loaded")
73
+ self?.rewardedAds[unitId]?.loadedAd = ad
74
+ self?.sendEvent(with: .onRewardedAdLoadedEvent, body: adInfo?.toBody)
75
+ self?.setupRewardedListener(for: ad)
76
+ }
77
+
78
+ rewardedAdLoader.listener.onAdLoadFail = { [weak self] error in
79
+ DaroMModule.logger.debug("[DARO] Sample Rewarded Ad failed to load: \(error)")
80
+ self?.sendEvent(with: .onRewardedAdLoadFailedEvent, body: error.toBody)
81
+ }
82
+ self.rewardedAds[unitId] = RewardedAd(loader: rewardedAdLoader)
83
+ return rewardedAdLoader
84
+ }
85
+ }
86
+
87
+ private func setupRewardedListener(for ad: DaroRewardedAd) {
88
+ ad.rewardedAdListener.onShown = { [weak self] adInfo in
89
+ DaroMModule.logger.debug("[DARO] Sample Rewarded Ad displayed")
90
+ self?.sendEvent(with: .onRewardedAdDisplayedEvent, body: adInfo?.toBody)
91
+ }
92
+
93
+ ad.rewardedAdListener.onDismiss = { [weak self] adInfo in
94
+ DaroMModule.logger.debug("[DARO] Sample Rewarded Ad hidden")
95
+ self?.sendEvent(with: .onRewardedAdHiddenEvent, body: adInfo?.toBody)
96
+ }
97
+
98
+ ad.rewardedAdListener.onFailedToShow = { [weak self] adInfo, error in
99
+ DaroMModule.logger.debug("[DARO] Sample Rewarded Ad failed to display: \(error)")
100
+ self?.sendEvent(with: .onRewardedAdFailedToDisplayEvent, body: adInfo?.toBody)
101
+ }
102
+
103
+ ad.rewardedAdListener.onEarnedReward = { [weak self] adInfo, rewardItem in
104
+ DaroMModule.logger.debug("[DARO] Sample Rewarded Ad received reward")
105
+ self?.sendEvent(with: .onRewardedAdReceivedRewardEvent, body: rewardItem?.toBody(unitId: adInfo?.adUnitId ?? ""))
106
+ }
107
+ }
108
+ }
109
+
110
+ private extension DaroRewardedItem {
111
+ func toBody(unitId: String) -> [String: Any] {
112
+ return [
113
+ "adUnitId": unitId,
114
+ "rewardLabel": self.rewardType,
115
+ "rewardAmount": self.amount,
116
+ ]
117
+ }
118
+ }
@@ -0,0 +1,45 @@
1
+ #import <React/RCTBridgeModule.h>
2
+ #import <React/RCTEventEmitter.h>
3
+
4
+ @interface RCT_EXTERN_MODULE (DaroMModule, RCTEventEmitter)
5
+
6
+ #pragma mark - Initialization
7
+
8
+ RCT_EXTERN_METHOD(isInitialized : (RCTPromiseResolveBlock)resolve : (RCTPromiseRejectBlock)reject)
9
+ RCT_EXTERN_METHOD(initializeSdk : (RCTPromiseResolveBlock)resolve : (RCTPromiseRejectBlock)reject)
10
+ RCT_EXTERN_METHOD(setUserId : (NSString *)userId : (RCTPromiseResolveBlock)resolve : (RCTPromiseRejectBlock)reject)
11
+
12
+ #pragma mark - Mediation Debugger
13
+
14
+ RCT_EXTERN_METHOD(showMediationDebugger : (RCTPromiseResolveBlock)resolve : (RCTPromiseRejectBlock)reject)
15
+
16
+ #pragma mark - Interstitial
17
+
18
+ RCT_EXTERN_METHOD(isInterstitialReady : (NSString *)adUnitId : (RCTPromiseResolveBlock)resolve : (RCTPromiseRejectBlock)reject)
19
+ RCT_EXTERN_METHOD(loadInterstitial : (NSString *)adUnitId : (RCTPromiseResolveBlock)resolve : (RCTPromiseRejectBlock)reject)
20
+ RCT_EXTERN_METHOD(showInterstitial : (NSString *)adUnitIdentifier : (RCTPromiseResolveBlock)resolve : (RCTPromiseRejectBlock)reject)
21
+
22
+ #pragma mark - Rewarded
23
+
24
+ RCT_EXTERN_METHOD(isRewardedAdReady : (NSString *)adUnitId : (RCTPromiseResolveBlock)resolve : (RCTPromiseRejectBlock)reject)
25
+ RCT_EXTERN_METHOD(loadRewardedAd : (NSString *)adUnitId : (RCTPromiseResolveBlock)resolve : (RCTPromiseRejectBlock)reject)
26
+ RCT_EXTERN_METHOD(showRewardedAd : (NSString *)adUnitIdentifier : (nullable NSString *)customData : (RCTPromiseResolveBlock)resolve : (RCTPromiseRejectBlock)reject)
27
+
28
+ #pragma mark - AppOpen Ad
29
+
30
+ RCT_EXTERN_METHOD(isAppOpenAdReady : (NSString *)adUnitId : (RCTPromiseResolveBlock)resolve : (RCTPromiseRejectBlock)reject)
31
+ RCT_EXTERN_METHOD(loadAppOpenAd : (NSString *)adUnitId : (RCTPromiseResolveBlock)resolve : (RCTPromiseRejectBlock)reject)
32
+ RCT_EXTERN_METHOD(showAppOpenAd : (NSString *)adUnitIdentifier : (nullable NSString *)customData : (RCTPromiseResolveBlock)resolve : (RCTPromiseRejectBlock)reject)
33
+
34
+ #pragma mark - Light Popup
35
+
36
+ RCT_EXTERN_METHOD(isLightPopupReady : (NSString *)adUnitId : (RCTPromiseResolveBlock)resolve : (RCTPromiseRejectBlock)reject)
37
+ RCT_EXTERN_METHOD(loadLightPopup : (NSString *)adUnitId : (RCTPromiseResolveBlock)resolve : (RCTPromiseRejectBlock)reject)
38
+ RCT_EXTERN_METHOD(showLightPopup : (NSString *)adUnitId : (RCTPromiseResolveBlock)resolve : (RCTPromiseRejectBlock)reject)
39
+ RCT_EXTERN_METHOD(setLightPopupAdConfiguration : (NSString *)adUnitId : (NSDictionary *)configuration : (RCTPromiseResolveBlock)resolve : (RCTPromiseRejectBlock)reject)
40
+
41
+ + (BOOL)requiresMainQueueSetup {
42
+ return YES;
43
+ }
44
+
45
+ @end