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,218 @@
1
+ import GoogleMobileAds
2
+ import Daro
3
+ import os.log
4
+
5
+ @objc(DaroMModule)
6
+ class DaroMModule: RCTEventEmitter {
7
+
8
+ // 중앙집중식 로거 - 다른 파일에서도 사용 가능
9
+ static let logger = Logger(subsystem: "com.darom.react-native", category: "DaroMModule")
10
+
11
+ enum Event: String, CaseIterable {
12
+
13
+ // MARK: - Interstitial Ad
14
+
15
+ case onInterstitialLoadedEvent = "ON_INTERSTITIAL_LOADED_EVENT"
16
+ case onInterstitialLoadFailedEvent = "ON_INTERSTITIAL_LOAD_FAILED_EVENT"
17
+ case onInterstitialClickedEvent = "ON_INTERSTITIAL_CLICKED_EVENT"
18
+ case onInterstitialDisplayedEvent = "ON_INTERSTITIAL_DISPLAYED_EVENT"
19
+ case onInterstitialAdFailedToDisplayEvent = "ON_INTERSTITIAL_AD_FAILED_TO_DISPLAY_EVENT"
20
+ case onInterstitialHiddenEvent = "ON_INTERSTITIAL_HIDDEN_EVENT"
21
+ case onInterstitialAdImpressionRecordedEvent = "ON_INTERSTITIAL_AD_IMPRESSION_RECORDED"
22
+
23
+ // MARK: - Rewarded Ad
24
+
25
+ case onRewardedAdLoadedEvent = "ON_REWARDED_AD_LOADED_EVENT"
26
+ case onRewardedAdLoadFailedEvent = "ON_REWARDED_AD_LOAD_FAILED_EVENT"
27
+ case onRewardedAdClickedEvent = "ON_REWARDED_AD_CLICKED_EVENT"
28
+ case onRewardedAdDisplayedEvent = "ON_REWARDED_AD_DISPLAYED_EVENT"
29
+ case onRewardedAdFailedToDisplayEvent = "ON_REWARDED_AD_FAILED_TO_DISPLAY_EVENT"
30
+ case onRewardedAdHiddenEvent = "ON_REWARDED_AD_HIDDEN_EVENT"
31
+ case onRewardedAdReceivedRewardEvent = "ON_REWARDED_AD_RECEIVED_REWARD_EVENT"
32
+ case onRewardedAdImpressionRecordedEvent = "ON_REWARDED_AD_IMPRESSION_RECORDED"
33
+
34
+ // MARK: - AppOpen Ad
35
+
36
+ case onAppOpenAdLoadedEvent = "ON_APPOPEN_AD_LOADED_EVENT"
37
+ case onAppOpenAdLoadFailedEvent = "ON_APPOPEN_AD_LOAD_FAILED_EVENT"
38
+ case onAppOpenAdClickedEvent = "ON_APPOPEN_AD_CLICKED_EVENT"
39
+ case onAppOpenAdDisplayedEvent = "ON_APPOPEN_AD_DISPLAYED_EVENT"
40
+ case onAppOpenAdFailedToDisplayEvent = "ON_APPOPEN_AD_FAILED_TO_DISPLAY_EVENT"
41
+ case onAppOpenAdHiddenEvent = "ON_APPOPEN_AD_HIDDEN_EVENT"
42
+ case onAppOpenAdImpressionRecordedEvent = "ON_APPOPEN_AD_IMPRESSION_RECORDED"
43
+
44
+ // MARK: - LightPopup Ad
45
+ case onLightPopupLoadedEvent = "ON_LIGHTPOPUP_LOADED_EVENT"
46
+ case onLightPopupLoadFailedEvent = "ON_LIGHTPOPUP_LOAD_FAILED_EVENT"
47
+ case onLightPopupClickedEvent = "ON_LIGHTPOPUP_CLICKED_EVENT"
48
+ case onLightPopupDisplayedEvent = "ON_LIGHTPOPUP_DISPLAYED_EVENT"
49
+ case onLightPopupAdFailedToDisplayEvent = "ON_LIGHTPOPUP_AD_FAILED_TO_DISPLAY_EVENT"
50
+ case onLightPopupHiddenEvent = "ON_LIGHTPOPUP_HIDDEN_EVENT"
51
+ case onLightPopupAdImpressionRecordedEvent = "ON_LIGHTPOPUP_AD_IMPRESSION_RECORDED"
52
+
53
+ static var supportedEvents: [String] {
54
+ allCases.map(\.rawValue)
55
+ }
56
+
57
+ static var constantsToExports: [AnyHashable: Any] {
58
+ Event.allCases.reduce(into: [:]) { result, event in
59
+ result[event.rawValue] = event.rawValue
60
+ }
61
+ }
62
+ }
63
+
64
+ enum Constants: String, CaseIterable {
65
+ case bannerAdFormatLabel = "BANNER_AD_FORMAT_LABEL"
66
+ case mrecAdFormatLabel = "MREC_AD_FORMAT_LABEL"
67
+
68
+ var value: String {
69
+ switch self {
70
+ case .bannerAdFormatLabel:
71
+ return DaroAdFormat.banner.rawValue
72
+ case .mrecAdFormatLabel:
73
+ return DaroAdFormat.mrec.rawValue
74
+ }
75
+ }
76
+
77
+ static var constantsToExports: [AnyHashable: Any] {
78
+ allCases.reduce(into: [:]) { result, constant in
79
+ result[constant.rawValue] = constant.value
80
+ }
81
+ }
82
+ }
83
+
84
+ static var sdkInitialized: Bool = false
85
+ // 광고 인스턴스 저장소
86
+ internal var interstitials: [String: InterstitialAd] = [:]
87
+ internal var rewardedAds: [String: RewardedAd] = [:]
88
+ internal var appOpenAds: [String: AppOpenAd] = [:]
89
+ internal var lightPopups: [String: LightPopupAd] = [:]
90
+ internal var lightPopupConfigurations: [String: [String: Any]] = [:]
91
+
92
+ // MARK: - SDK 초기화 및 설정
93
+
94
+ @objc(isInitialized::)
95
+ func isInitialized(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
96
+ resolve(Self.sdkInitialized)
97
+ }
98
+
99
+ @objc(initializeSdk::)
100
+ func initializeSdk(
101
+ resolve: @escaping RCTPromiseResolveBlock,
102
+ reject: @escaping RCTPromiseRejectBlock
103
+ ) {
104
+ // 이미 초기화되었는지 확인
105
+ if Self.sdkInitialized {
106
+ Self.logger.debug("SDK already initialized, returning success")
107
+ resolve(Void())
108
+ return
109
+ }
110
+
111
+ // 초기화 진행
112
+ DaroAds.shared.logLevel = .debug
113
+ DaroAds.shared.initialized { error in
114
+ if let error {
115
+ Self.logger.error("SDK initialization failed: \(error.localizedDescription)")
116
+ reject("INIT_ERROR", error.localizedDescription, error)
117
+ } else {
118
+ Self.sdkInitialized = true
119
+ Self.logger.info("SDK initialized successfully")
120
+ resolve(Void())
121
+ }
122
+ }
123
+ }
124
+
125
+ @objc(showMediationDebugger::)
126
+ func showMediationDebugger(resolve: @escaping RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
127
+ // ALSdk.shared().showMediationDebugger()
128
+ DispatchQueue.main.async {
129
+ MobileAds.shared.presentAdInspector(from: nil) { error in
130
+ // Error will be non-nil if there was an issue and the inspector was not displayed.
131
+ }
132
+ resolve(Void())
133
+ }
134
+ }
135
+
136
+ @objc(setUserId:::)
137
+ func setUserId(userId: String, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
138
+ DaroAds.shared.userId = userId
139
+ resolve(Void())
140
+ }
141
+
142
+ class InterstitialAd {
143
+ let loader: DaroInterstitialAdLoader
144
+ var loadedAd: DaroInterstitialAd?
145
+
146
+ init(loader: DaroInterstitialAdLoader) {
147
+ self.loader = loader
148
+ }
149
+ }
150
+
151
+ class RewardedAd {
152
+ let loader: DaroRewardedAdLoader
153
+ var loadedAd: DaroRewardedAd?
154
+
155
+ init(loader: DaroRewardedAdLoader) {
156
+ self.loader = loader
157
+ }
158
+ }
159
+
160
+ class AppOpenAd {
161
+ let loader: DaroAppOpenAdLoader
162
+ var loadedAd: DaroAppOpenAd?
163
+
164
+ init(loader: DaroAppOpenAdLoader) {
165
+ self.loader = loader
166
+ }
167
+ }
168
+
169
+ class LightPopupAd {
170
+ let loader: DaroLightPopupAdLoader
171
+ var loadedAd: DaroLightPopupAd?
172
+
173
+ init(loader: DaroLightPopupAdLoader) {
174
+ self.loader = loader
175
+ }
176
+ }
177
+ }
178
+
179
+ // MARK: - Constants
180
+ extension DaroMModule {
181
+
182
+ // https://reactnative.dev/docs/legacy/native-modules-ios#sending-events-to-javascript
183
+ // Sending Events to JavaScript
184
+ override func supportedEvents() -> [String]! {
185
+ Event.supportedEvents
186
+ }
187
+
188
+ // https://reactnative.dev/docs/legacy/native-modules-ios#exporting-constants
189
+ // Exporting Constants
190
+ override func constantsToExport() -> [AnyHashable: Any]! {
191
+ Event.constantsToExports.merging(Constants.constantsToExports) { (_, new) in new }
192
+ }
193
+ }
194
+
195
+ // MARK: - Helpers
196
+ extension DaroMModule {
197
+ func sendEvent(with event: Event, body: Any?) {
198
+ sendEvent(withName: event.rawValue, body: body)
199
+ }
200
+ }
201
+
202
+ extension DaroAdInfo {
203
+ var toBody: [String: Any] {
204
+ return [
205
+ "adUnitId": self.adUnitId,
206
+ "latencyMillis": self.latency as Any,
207
+ ]
208
+ }
209
+ }
210
+
211
+ extension DaroError {
212
+ var toBody: [String: Any] {
213
+ return [
214
+ "code": self.code,
215
+ "message": self.message,
216
+ ]
217
+ }
218
+ }
@@ -0,0 +1,26 @@
1
+ #import <React/RCTViewManager.h>
2
+
3
+ @interface RCT_EXTERN_MODULE (DaroMNativeAdViewManager, RCTViewManager)
4
+
5
+ RCT_EXPORT_VIEW_PROPERTY(adUnitId, NSString)
6
+
7
+ RCT_EXPORT_VIEW_PROPERTY(titleView, NSNumber)
8
+ RCT_EXPORT_VIEW_PROPERTY(bodyView, NSNumber)
9
+ RCT_EXPORT_VIEW_PROPERTY(callToActionView, NSNumber)
10
+ RCT_EXPORT_VIEW_PROPERTY(iconView, NSNumber)
11
+ RCT_EXPORT_VIEW_PROPERTY(optionsView, NSNumber)
12
+ RCT_EXPORT_VIEW_PROPERTY(mediaView, NSNumber)
13
+
14
+ RCT_EXPORT_VIEW_PROPERTY(titleViewStyleProps, NSDictionary)
15
+ RCT_EXPORT_VIEW_PROPERTY(bodyViewStyleProps, NSDictionary)
16
+ RCT_EXPORT_VIEW_PROPERTY(callToActionViewStyleProps, NSDictionary)
17
+ RCT_EXPORT_VIEW_PROPERTY(iconViewStyleProps, NSDictionary)
18
+ RCT_EXPORT_VIEW_PROPERTY(mediaViewStyleProps, NSDictionary)
19
+
20
+ RCT_EXPORT_VIEW_PROPERTY(onAdLoadedEvent, RCTDirectEventBlock)
21
+ RCT_EXPORT_VIEW_PROPERTY(onAdLoadFailedEvent, RCTDirectEventBlock)
22
+ RCT_EXPORT_VIEW_PROPERTY(onAdClickedEvent, RCTDirectEventBlock)
23
+ RCT_EXPORT_VIEW_PROPERTY(onAdImpressionRecordedEvent, RCTDirectEventBlock)
24
+
25
+ RCT_EXTERN_METHOD(loadAd : (nonnull NSNumber *)viewTag)
26
+ @end
@@ -0,0 +1,291 @@
1
+ import Combine
2
+ import Daro
3
+ import UIKit
4
+
5
+ @objc(DaroMNativeAdViewManager)
6
+ class DaroMNativeAdViewManager: RCTViewManager {
7
+ override func view() -> RNDaroMNativeAdView {
8
+ RNDaroMNativeAdView(bridge: bridge)
9
+ }
10
+
11
+ @objc override static func requiresMainQueueSetup() -> Bool {
12
+ false
13
+ }
14
+
15
+ @objc(loadAd:)
16
+ func loadAd(viewTag: NSNumber) {
17
+ bridge?.uiManager.addUIBlock({ uiManager, viewRegistry in
18
+ if let view = viewRegistry?[viewTag] as? RNDaroMNativeAdView {
19
+ view._internalAdView?.loadAd()
20
+ }
21
+ })
22
+ }
23
+ }
24
+
25
+ final class RNDaroMNativeAdView: UIView, RenderDelegate {
26
+
27
+ var _internalAdView: BridgeNativeAdView?
28
+ var adUnit: DaroAdUnit
29
+
30
+ @objc var adUnitId: String?
31
+ @objc var titleViewStyleProps: NSDictionary? {
32
+ didSet {
33
+ _internalTitleLabel.applyStyle(titleViewStyleProps)
34
+ }
35
+ }
36
+ @objc var titleView: NSNumber?
37
+ @objc var bodyViewStyleProps: NSDictionary? {
38
+ didSet {
39
+ _internalBodyLabel.applyStyle(bodyViewStyleProps)
40
+ }
41
+ }
42
+ @objc var bodyView: NSNumber?
43
+ @objc var callToActionViewStyleProps: NSDictionary? {
44
+ didSet {
45
+ _internalFakeCTAButton.applyStyle(callToActionViewStyleProps)
46
+ }
47
+ }
48
+ @objc var callToActionView: NSNumber?
49
+ @objc var iconViewStyleProps: NSDictionary? {
50
+ didSet {
51
+ _internalIconImageView.applyStyle(iconViewStyleProps)
52
+ }
53
+ }
54
+ @objc var iconView: NSNumber?
55
+ @objc var mediaViewStyleProps: NSDictionary? {
56
+ didSet {
57
+ _internalMediaView.baseApplyStyle(mediaViewStyleProps)
58
+ }
59
+ }
60
+ @objc var mediaView: NSNumber?
61
+
62
+ var _internalTitleLabel: UILabel = {
63
+ let label = UILabel()
64
+ label.isUserInteractionEnabled = false
65
+ label.clipsToBounds = true
66
+ label.font = .systemFont(ofSize: 15, weight: .bold)
67
+ label.textColor = UIColor.black
68
+ return label
69
+ }()
70
+
71
+ var _internalBodyLabel: UILabel = {
72
+ let label = UILabel()
73
+ label.isUserInteractionEnabled = false
74
+ label.clipsToBounds = true
75
+ label.font = .systemFont(ofSize: 15, weight: .regular)
76
+ label.textColor = UIColor.black
77
+ return label
78
+ }()
79
+
80
+ let _internalMediaView: UIView = UIView()
81
+
82
+ var _internalIconImageView: UIImageView = {
83
+ let view = UIImageView()
84
+ view.contentMode = .scaleAspectFill
85
+ return view
86
+ }()
87
+
88
+ /// Call to Action
89
+ var _internalCallToActionButton: UIButton = {
90
+ let button = UIButton()
91
+ button.translatesAutoresizingMaskIntoConstraints = false
92
+ button.titleLabel?.font = .systemFont(ofSize: 20, weight: .bold)
93
+ button.setTitleColor(.white, for: .normal)
94
+ return button
95
+ }()
96
+
97
+ var _internalFakeCTAButton: UIButton = {
98
+ let button = UIButton()
99
+ button.translatesAutoresizingMaskIntoConstraints = false
100
+ button.setTitleColor(.white, for: .normal)
101
+ return button
102
+ }()
103
+
104
+ @objc var onAdLoadedEvent: RCTDirectEventBlock?
105
+ @objc var onAdLoadFailedEvent: RCTDirectEventBlock?
106
+ @objc var onAdClickedEvent: RCTDirectEventBlock?
107
+ @objc var onAdImpressionRecordedEvent: RCTDirectEventBlock?
108
+
109
+ @Atomic private var isAdUnitIdSet: Bool = false
110
+ @Atomic private var isBindBridge: Bool = false
111
+
112
+
113
+ var bridge: RCTBridge?
114
+
115
+ convenience init(bridge: RCTBridge?) {
116
+ self.init()
117
+ self.bridge = bridge
118
+ }
119
+
120
+ required init() {
121
+ self.adUnit = DaroAdUnit(unitId: "")
122
+ super.init(frame: .zero)
123
+ }
124
+
125
+ required init?(coder: NSCoder) {
126
+ fatalError("init(coder:) has not been implemented")
127
+ }
128
+
129
+ /// Invoked after all the JavaScript properties are set when mounting AdView
130
+ /// after all the user's asset views are mounted, following the 1st event
131
+ /// 두 번 호출됨. 첫번째는 adUnitId가 설정된 후, 두번째는 모든 subview들이 마운트된 후
132
+ override func didSetProps(_ changedProps: [String]) {
133
+ guard let adUnitId else {
134
+ DaroMModule.logger.warning("[native-ad] AdUnitId is required")
135
+ return
136
+ }
137
+ guard changedProps.isEmpty == false else { return }
138
+ DaroMModule.logger.info("[native-ad] \(#function): \(changedProps)")
139
+ guard !isAdUnitIdSet else { return }
140
+ isAdUnitIdSet = true
141
+ makeAdViews(unitId: adUnitId)
142
+ self._internalAdView?.loadAd()
143
+ }
144
+
145
+ override func didMoveToWindow() {
146
+ super.didMoveToWindow()
147
+
148
+ guard window != nil else { return }
149
+
150
+ DispatchQueue.main.async { [weak self] in
151
+ self?.bindBridgeViews()
152
+ }
153
+ }
154
+
155
+ private func makeAdViews(unitId: String) {
156
+ self.adUnit = DaroAdUnit(unitId: unitId)
157
+ let native = BridgeNativeAdView(unit: adUnit)
158
+ native.delegate = self
159
+ self._internalAdView = native
160
+ super.addSubview(native)
161
+ native.pinToEdges(to: self)
162
+
163
+ self._internalAdView?.listener.onAdLoadSuccess = { [weak self] ad, adInfo in
164
+ // print("[QWER] onSuccess \(ad) \(adInfo)")
165
+ self?.onAdLoadedEvent?(adInfo?.toBody)
166
+ }
167
+ self._internalAdView?.listener.onAdLoadFail = { [weak self] error in
168
+ // print("[QWER] onFailure \(error)")
169
+ self?.onAdLoadFailedEvent?(error.toBody)
170
+ }
171
+ self._internalAdView?.listener.onAdImpression = { [weak self] adInfo in
172
+ // print("[QWER] adImpression\(adInfo)")
173
+ self?.onAdImpressionRecordedEvent?(adInfo?.toBody)
174
+ }
175
+ self._internalAdView?.listener.onAdClicked = { [weak self] adInfo in
176
+ // print("[QWER] adClicked \(adInfo)")
177
+ self?.onAdClickedEvent?(adInfo?.toBody)
178
+ }
179
+ }
180
+
181
+ private func getBridgeView(tag: NSNumber?) -> UIView? {
182
+ guard let tag, let bridgeView = bridge?.uiManager.view(forReactTag: tag) else {
183
+ return nil
184
+ }
185
+ return bridgeView
186
+ }
187
+
188
+ private func bindBridgeViews() {
189
+ guard !isBindBridge else { return }
190
+ isBindBridge = true
191
+ var bindTitleLabel: UILabel?
192
+ if let bridgeTitleView = getBridgeView(tag: titleView) {
193
+ _internalTitleLabel.pinToEdges(to: bridgeTitleView)
194
+ bindTitleLabel = _internalTitleLabel
195
+ }
196
+
197
+ var bindBodyLabel: UILabel?
198
+ if let bridgeBodyView = getBridgeView(tag: bodyView) {
199
+ _internalBodyLabel.pinToEdges(to: bridgeBodyView)
200
+ bindBodyLabel = _internalBodyLabel
201
+ }
202
+
203
+ if let bridgeCallToActionView = getBridgeView(tag: callToActionView) {
204
+ _internalFakeCTAButton.pinToEdges(to: bridgeCallToActionView)
205
+ }
206
+
207
+ var bindIconImageView: UIImageView?
208
+ if let bridgeIconView = getBridgeView(tag: iconView) {
209
+ _internalIconImageView.pinToEdges(to: bridgeIconView)
210
+ bindIconImageView = _internalIconImageView
211
+ }
212
+
213
+ var bindMediaView: UIView?
214
+ if let bridgeMediaView = getBridgeView(tag: mediaView) {
215
+ _internalMediaView.pinToEdges(to: bridgeMediaView)
216
+ bindMediaView = _internalMediaView
217
+ }
218
+
219
+ _internalCallToActionButton.pinToEdges(to: self)
220
+
221
+ _internalAdView?.bindViews(
222
+ titleLabel: bindTitleLabel,
223
+ bodyLabel: bindBodyLabel,
224
+ iconImageView: bindIconImageView,
225
+ mediaContentView: bindMediaView,
226
+ callToActionButton: _internalCallToActionButton
227
+ )
228
+ }
229
+
230
+ func renderAd(for nativeAd: DaroAdNative) {
231
+ self._internalFakeCTAButton.setTitle(_internalCallToActionButton.titleLabel?.text, for: .normal)
232
+ self._internalCallToActionButton.setTitle("", for: .normal)
233
+ self._internalCallToActionButton.alpha = 1
234
+ }
235
+
236
+ override func addSubview(_ view: UIView) {
237
+ self._internalAdView?.addSubview(view)
238
+ }
239
+ }
240
+
241
+ protocol RenderDelegate: AnyObject {
242
+ func renderAd(for nativeAd: DaroAdNative)
243
+ }
244
+
245
+ class BridgeNativeAdView: DaroAdNativeView {
246
+ weak var delegate: RenderDelegate?
247
+
248
+ override func renderAd(for nativeAd: DaroAdNative, loader: any AdNativeLoadable) {
249
+ super.renderAd(for: nativeAd, loader: loader)
250
+ self.delegate?.renderAd(for: nativeAd)
251
+ }
252
+ }
253
+
254
+ @propertyWrapper
255
+ private struct Atomic<Value> {
256
+ private var value: Value
257
+ private let lock = NSLock()
258
+
259
+ init(wrappedValue value: Value) {
260
+ self.value = value
261
+ }
262
+
263
+ var wrappedValue: Value {
264
+ get {
265
+ lock.lock()
266
+ defer { lock.unlock() }
267
+ return value
268
+ }
269
+ set {
270
+ lock.lock()
271
+ value = newValue
272
+ lock.unlock()
273
+ }
274
+ }
275
+ }
276
+
277
+ private extension UIView {
278
+ func pinToEdges(to: UIView) {
279
+ translatesAutoresizingMaskIntoConstraints = false
280
+ if self.superview != to {
281
+ removeFromSuperview()
282
+ to.addSubview(self)
283
+ }
284
+ NSLayoutConstraint.activate([
285
+ topAnchor.constraint(equalTo: to.topAnchor),
286
+ bottomAnchor.constraint(equalTo: to.bottomAnchor),
287
+ leftAnchor.constraint(equalTo: to.leftAnchor),
288
+ rightAnchor.constraint(equalTo: to.rightAnchor),
289
+ ])
290
+ }
291
+ }
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.AdFormat = exports.AdBannerView = void 0;
7
+ var _react = require("react");
8
+ var _reactNative = require("react-native");
9
+ var _jsxRuntime = require("react/jsx-runtime");
10
+ const {
11
+ DaroMModule
12
+ } = _reactNative.NativeModules;
13
+ const {
14
+ BANNER_AD_FORMAT_LABEL,
15
+ MREC_AD_FORMAT_LABEL
16
+ } = DaroMModule.getConstants();
17
+ let AdFormat = exports.AdFormat = /*#__PURE__*/function (AdFormat) {
18
+ AdFormat[AdFormat["BANNER"] = BANNER_AD_FORMAT_LABEL] = "BANNER";
19
+ AdFormat[AdFormat["MREC"] = MREC_AD_FORMAT_LABEL] = "MREC";
20
+ return AdFormat;
21
+ }({});
22
+ const ComponentName = 'DaroMAdBannerView';
23
+ const AdViewComponent = (0, _reactNative.requireNativeComponent)(ComponentName);
24
+ const ADVIEW_SIZE = {
25
+ banner: {
26
+ width: 320,
27
+ height: 50
28
+ },
29
+ mrec: {
30
+ width: 300,
31
+ height: 250
32
+ }
33
+ };
34
+ const AdBannerView = exports.AdBannerView = /*#__PURE__*/(0, _react.forwardRef)(function AdBannerView({
35
+ adUnitId,
36
+ adFormat,
37
+ placement,
38
+ loadOnMount = true,
39
+ onAdLoaded,
40
+ onAdLoadFailed,
41
+ onAdClicked,
42
+ onAdImpressionRecorded,
43
+ style,
44
+ ...otherProps
45
+ }, ref) {
46
+ const adFormatSize = (0, _react.useRef)({});
47
+ const adViewRef = (0, _react.useRef)(null);
48
+ const [isInitialized, setIsInitialized] = (0, _react.useState)(false);
49
+ const loadAd = (0, _react.useCallback)(() => {
50
+ if (adViewRef.current) {
51
+ _reactNative.UIManager.dispatchViewManagerCommand((0, _reactNative.findNodeHandle)(adViewRef.current),
52
+ // @ts-ignore: Issue in RN ts defs
53
+ _reactNative.UIManager.getViewManagerConfig(ComponentName).Commands.loadAd, []);
54
+ }
55
+ }, []);
56
+ (0, _react.useImperativeHandle)(ref, () => ({
57
+ loadAd
58
+ }), [loadAd]);
59
+ const saveElement = (0, _react.useCallback)(element => {
60
+ adViewRef.current = element;
61
+ }, []);
62
+ (0, _react.useEffect)(() => {
63
+ (async () => {
64
+ if (adFormat === AdFormat.BANNER) {
65
+ adFormatSize.current = {
66
+ width: ADVIEW_SIZE.banner.width,
67
+ height: ADVIEW_SIZE.banner.height
68
+ };
69
+ } else {
70
+ adFormatSize.current = {
71
+ width: ADVIEW_SIZE.mrec.width,
72
+ height: ADVIEW_SIZE.mrec.height
73
+ };
74
+ }
75
+ const initialized = await DaroMModule.isInitialized();
76
+ setIsInitialized(initialized);
77
+ if (!initialized) {
78
+ console.warn('AdBannerView is mounted before the initialization of the DaroM React Native module');
79
+ }
80
+ })();
81
+ }, [adFormat]);
82
+ const onAdLoadedEvent = (0, _react.useCallback)(event => {
83
+ onAdLoaded?.(event.nativeEvent);
84
+ }, [onAdLoaded]);
85
+ const onAdLoadFailedEvent = (0, _react.useCallback)(event => {
86
+ onAdLoadFailed?.(event.nativeEvent);
87
+ }, [onAdLoadFailed]);
88
+ const onAdClickedEvent = (0, _react.useCallback)(event => {
89
+ onAdClicked?.(event.nativeEvent);
90
+ }, [onAdClicked]);
91
+ const onAdImpressionRecordedEvent = (0, _react.useCallback)(event => {
92
+ onAdImpressionRecorded?.(event.nativeEvent);
93
+ }, [onAdImpressionRecorded]);
94
+ if (!isInitialized) {
95
+ // Early return if not initialized
96
+ console.log('AdBannerView is not initialized');
97
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
98
+ style: style,
99
+ ...otherProps
100
+ });
101
+ }
102
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(AdViewComponent, {
103
+ style: style,
104
+ adFormat: adFormat,
105
+ ref: saveElement,
106
+ adUnitId: adUnitId,
107
+ placement: placement,
108
+ onAdLoadedEvent: onAdLoadedEvent,
109
+ onAdLoadFailedEvent: onAdLoadFailedEvent,
110
+ onAdClickedEvent: onAdClickedEvent,
111
+ onAdImpressionRecordedEvent: onAdImpressionRecordedEvent,
112
+ ...otherProps
113
+ });
114
+ });
115
+ //# sourceMappingURL=AdBannerView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactNative","_jsxRuntime","DaroMModule","NativeModules","BANNER_AD_FORMAT_LABEL","MREC_AD_FORMAT_LABEL","getConstants","AdFormat","exports","ComponentName","AdViewComponent","requireNativeComponent","ADVIEW_SIZE","banner","width","height","mrec","AdBannerView","forwardRef","adUnitId","adFormat","placement","loadOnMount","onAdLoaded","onAdLoadFailed","onAdClicked","onAdImpressionRecorded","style","otherProps","ref","adFormatSize","useRef","adViewRef","isInitialized","setIsInitialized","useState","loadAd","useCallback","current","UIManager","dispatchViewManagerCommand","findNodeHandle","getViewManagerConfig","Commands","useImperativeHandle","saveElement","element","useEffect","BANNER","initialized","console","warn","onAdLoadedEvent","event","nativeEvent","onAdLoadFailedEvent","onAdClickedEvent","onAdImpressionRecordedEvent","log","jsx","View"],"sourceRoot":"../../src","sources":["AdBannerView.tsx"],"mappings":"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","ignoreList":[]}