react-native-daro 1.0.15 → 2.0.0-rc.1

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 (241) hide show
  1. package/README.md +2 -5
  2. package/android/build.gradle +17 -14
  3. package/android/src/main/java/com/daro/reactnative/DaroMediaViewManager.kt +25 -0
  4. package/android/src/main/java/com/daro/reactnative/DaroRNAdBannerViewManager.kt +105 -0
  5. package/android/src/main/java/com/daro/reactnative/DaroRNAdNativeViewManager.kt +163 -0
  6. package/android/src/main/java/com/daro/reactnative/DaroRNModule.kt +376 -0
  7. package/android/src/main/java/com/daro/reactnative/DaroRNPackage.kt +45 -0
  8. package/android/src/main/java/com/daro/reactnative/DaroSdkBridge.kt +52 -0
  9. package/android/src/main/java/com/daro/reactnative/constants/{InternalDaroMBannerSize.kt → InternalDaroRNBannerSize.kt} +2 -2
  10. package/android/src/main/java/com/daro/reactnative/event/{DaroMEvent.kt → DaroRNEvent.kt} +22 -11
  11. package/android/src/main/java/com/daro/reactnative/impl/{DaroMBannerViewModuleImpl.kt → DaroRNBannerViewModuleImpl.kt} +3 -3
  12. package/android/src/main/java/com/daro/reactnative/impl/{DaroMInterstitialModuleImpl.kt → DaroRNInterstitialModuleImpl.kt} +4 -4
  13. package/android/src/main/java/com/daro/reactnative/impl/{DaroMLightPopupModuleImpl.kt → DaroRNLightPopupModuleImpl.kt} +4 -4
  14. package/android/src/main/java/com/daro/reactnative/impl/{DaroMRewardedAdModuleImpl.kt → DaroRNRewardedAdModuleImpl.kt} +4 -4
  15. package/android/src/main/java/com/daro/reactnative/util/AdInfoUtil.kt +12 -0
  16. package/android/src/main/java/com/daro/reactnative/util/DaroQaProbe.kt +147 -0
  17. package/android/src/main/java/com/daro/reactnative/util/EventEmitterUtil.kt +20 -7
  18. package/android/src/main/java/com/daro/reactnative/view/DaroMediaView.kt +123 -0
  19. package/android/src/main/java/com/daro/reactnative/view/{DaroMAdBannerViewContainer.kt → DaroRNAdBannerViewContainer.kt} +2 -3
  20. package/android/src/main/java/com/daro/reactnative/view/DaroRNAdNativeViewContainer.kt +623 -0
  21. package/android/src/newarch/java/com/daro/reactnative/DaroRNModuleSpec.kt +6 -0
  22. package/android/src/oldarch/java/com/daro/reactnative/DaroRNModuleSpec.kt +119 -0
  23. package/ios/{DaroMModule+AppOpen.swift → DaroRNModule+AppOpen.swift} +22 -20
  24. package/ios/DaroRNModule+Consent.swift +88 -0
  25. package/ios/{DaroMModule+Interstitial.swift → DaroRNModule+Interstitial.swift} +21 -18
  26. package/ios/{DaroMModule+LightPopup.swift → DaroRNModule+LightPopup.swift} +18 -15
  27. package/ios/DaroRNModule+Qa.swift +158 -0
  28. package/ios/{DaroMModule+Rewarded.swift → DaroRNModule+Rewarded.swift} +22 -19
  29. package/ios/DaroRNModule.mm +88 -0
  30. package/ios/{DaroMModule.swift → DaroRNModule.swift} +24 -10
  31. package/ios/Fabric/DaroRNAdBannerComponentView.mm +219 -0
  32. package/ios/Fabric/DaroRNFabricEventSink.mm +31 -0
  33. package/ios/Fabric/DaroRNFabricPropApplier.mm +123 -0
  34. package/ios/Fabric/DaroRNNativeAdComponentView.mm +306 -0
  35. package/ios/{DaroMAdBannerViewManager.m → Paper/DaroRNAdBannerViewManager.m} +4 -2
  36. package/ios/Paper/DaroRNAdBannerViewManager.swift +21 -0
  37. package/ios/{DaroMNativeAdViewManager.m → Paper/DaroRNNativeAdViewManager.m} +3 -2
  38. package/ios/Paper/DaroRNNativeAdViewManager.swift +22 -0
  39. package/ios/Shared/DaroMediationDebugger.swift +14 -0
  40. package/ios/{mediation/admob → Shared}/DaroMediationTypes.swift +1 -0
  41. package/ios/Shared/DaroRNAdEventSink.swift +24 -0
  42. package/ios/Shared/DaroRNBannerAdView.swift +188 -0
  43. package/ios/Shared/DaroRNNativeAdLoadCoordinator.swift +49 -0
  44. package/ios/Shared/DaroRNNativeAdView.swift +575 -0
  45. package/ios/Shared/DaroRNNativeAssetResolver.swift +53 -0
  46. package/lib/commonjs/AdBannerView.js +20 -41
  47. package/lib/commonjs/AdBannerView.js.map +1 -1
  48. package/lib/commonjs/AppOpenAd.js +45 -12
  49. package/lib/commonjs/AppOpenAd.js.map +1 -1
  50. package/lib/commonjs/DaroMediaViewNativeComponent.ts +9 -0
  51. package/lib/commonjs/DaroRNAdBannerViewNativeComponent.ts +50 -0
  52. package/lib/commonjs/DaroRNNativeAdViewNativeComponent.ts +65 -0
  53. package/lib/commonjs/EventEmitter.js +4 -5
  54. package/lib/commonjs/EventEmitter.js.map +1 -1
  55. package/lib/commonjs/InterstitialAd.js +9 -11
  56. package/lib/commonjs/InterstitialAd.js.map +1 -1
  57. package/lib/commonjs/LightPopupAd.js +11 -12
  58. package/lib/commonjs/LightPopupAd.js.map +1 -1
  59. package/lib/commonjs/NativeDaroModule.js +9 -0
  60. package/lib/commonjs/NativeDaroModule.js.map +1 -0
  61. package/lib/commonjs/RewardedAd.js +9 -11
  62. package/lib/commonjs/RewardedAd.js.map +1 -1
  63. package/lib/commonjs/codegen-env.d.js +2 -0
  64. package/lib/commonjs/codegen-env.d.js.map +1 -0
  65. package/lib/commonjs/hooks/useInterstitialAd.js +110 -0
  66. package/lib/commonjs/hooks/useInterstitialAd.js.map +1 -0
  67. package/lib/commonjs/hooks/useLightPopupAd.js +114 -0
  68. package/lib/commonjs/hooks/useLightPopupAd.js.map +1 -0
  69. package/lib/commonjs/hooks/useRewardedAd.js +113 -0
  70. package/lib/commonjs/hooks/useRewardedAd.js.map +1 -0
  71. package/lib/commonjs/index.js +150 -13
  72. package/lib/commonjs/index.js.map +1 -1
  73. package/lib/commonjs/nativeAd/NativeAdView.js +23 -22
  74. package/lib/commonjs/nativeAd/NativeAdView.js.map +1 -1
  75. package/lib/commonjs/nativeAd/NativeAdViewComponents.js +43 -31
  76. package/lib/commonjs/nativeAd/NativeAdViewComponents.js.map +1 -1
  77. package/lib/commonjs/nativeAd/NativeAdViewProvider.js +34 -7
  78. package/lib/commonjs/nativeAd/NativeAdViewProvider.js.map +1 -1
  79. package/lib/module/AdBannerView.js +19 -42
  80. package/lib/module/AdBannerView.js.map +1 -1
  81. package/lib/module/AppOpenAd.js +45 -13
  82. package/lib/module/AppOpenAd.js.map +1 -1
  83. package/lib/module/DaroMediaViewNativeComponent.ts +9 -0
  84. package/lib/module/DaroRNAdBannerViewNativeComponent.ts +50 -0
  85. package/lib/module/DaroRNNativeAdViewNativeComponent.ts +65 -0
  86. package/lib/module/EventEmitter.js +4 -6
  87. package/lib/module/EventEmitter.js.map +1 -1
  88. package/lib/module/InterstitialAd.js +8 -11
  89. package/lib/module/InterstitialAd.js.map +1 -1
  90. package/lib/module/LightPopupAd.js +11 -13
  91. package/lib/module/LightPopupAd.js.map +1 -1
  92. package/lib/module/NativeDaroModule.js +5 -0
  93. package/lib/module/NativeDaroModule.js.map +1 -0
  94. package/lib/module/RewardedAd.js +8 -11
  95. package/lib/module/RewardedAd.js.map +1 -1
  96. package/lib/module/codegen-env.d.js +2 -0
  97. package/lib/module/codegen-env.d.js.map +1 -0
  98. package/lib/module/hooks/useInterstitialAd.js +106 -0
  99. package/lib/module/hooks/useInterstitialAd.js.map +1 -0
  100. package/lib/module/hooks/useLightPopupAd.js +110 -0
  101. package/lib/module/hooks/useLightPopupAd.js.map +1 -0
  102. package/lib/module/hooks/useRewardedAd.js +109 -0
  103. package/lib/module/hooks/useRewardedAd.js.map +1 -0
  104. package/lib/module/index.js +108 -13
  105. package/lib/module/index.js.map +1 -1
  106. package/lib/module/nativeAd/NativeAdView.js +22 -23
  107. package/lib/module/nativeAd/NativeAdView.js.map +1 -1
  108. package/lib/module/nativeAd/NativeAdViewComponents.js +45 -34
  109. package/lib/module/nativeAd/NativeAdViewComponents.js.map +1 -1
  110. package/lib/module/nativeAd/NativeAdViewProvider.js +35 -8
  111. package/lib/module/nativeAd/NativeAdViewProvider.js.map +1 -1
  112. package/lib/typescript/commonjs/plugin/src/index.d.ts +2 -6
  113. package/lib/typescript/commonjs/plugin/src/index.d.ts.map +1 -1
  114. package/lib/typescript/commonjs/plugin/src/withAndroid.d.ts +2 -6
  115. package/lib/typescript/commonjs/plugin/src/withAndroid.d.ts.map +1 -1
  116. package/lib/typescript/commonjs/plugin/src/withIos.d.ts +2 -6
  117. package/lib/typescript/commonjs/plugin/src/withIos.d.ts.map +1 -1
  118. package/lib/typescript/commonjs/src/AdBannerView.d.ts +2 -2
  119. package/lib/typescript/commonjs/src/AdBannerView.d.ts.map +1 -1
  120. package/lib/typescript/commonjs/src/AppOpenAd.d.ts +2 -2
  121. package/lib/typescript/commonjs/src/AppOpenAd.d.ts.map +1 -1
  122. package/lib/typescript/commonjs/src/DaroMediaViewNativeComponent.d.ts +6 -0
  123. package/lib/typescript/commonjs/src/DaroMediaViewNativeComponent.d.ts.map +1 -0
  124. package/lib/typescript/commonjs/src/DaroRNAdBannerViewNativeComponent.d.ts +33 -0
  125. package/lib/typescript/commonjs/src/DaroRNAdBannerViewNativeComponent.d.ts.map +1 -0
  126. package/lib/typescript/commonjs/src/DaroRNNativeAdViewNativeComponent.d.ts +43 -0
  127. package/lib/typescript/commonjs/src/DaroRNNativeAdViewNativeComponent.d.ts.map +1 -0
  128. package/lib/typescript/commonjs/src/EventEmitter.d.ts.map +1 -1
  129. package/lib/typescript/commonjs/src/InterstitialAd.d.ts.map +1 -1
  130. package/lib/typescript/commonjs/src/LightPopupAd.d.ts.map +1 -1
  131. package/lib/typescript/commonjs/src/NativeDaroModule.d.ts +70 -0
  132. package/lib/typescript/commonjs/src/NativeDaroModule.d.ts.map +1 -0
  133. package/lib/typescript/commonjs/src/RewardedAd.d.ts.map +1 -1
  134. package/lib/typescript/commonjs/src/hooks/useInterstitialAd.d.ts +19 -0
  135. package/lib/typescript/commonjs/src/hooks/useInterstitialAd.d.ts.map +1 -0
  136. package/lib/typescript/commonjs/src/hooks/useLightPopupAd.d.ts +23 -0
  137. package/lib/typescript/commonjs/src/hooks/useLightPopupAd.d.ts.map +1 -0
  138. package/lib/typescript/commonjs/src/hooks/useRewardedAd.d.ts +20 -0
  139. package/lib/typescript/commonjs/src/hooks/useRewardedAd.d.ts.map +1 -0
  140. package/lib/typescript/commonjs/src/index.d.ts +86 -1
  141. package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
  142. package/lib/typescript/commonjs/src/nativeAd/NativeAdView.d.ts +1 -0
  143. package/lib/typescript/commonjs/src/nativeAd/NativeAdView.d.ts.map +1 -1
  144. package/lib/typescript/commonjs/src/nativeAd/NativeAdViewComponents.d.ts.map +1 -1
  145. package/lib/typescript/commonjs/src/nativeAd/NativeAdViewProvider.d.ts +11 -5
  146. package/lib/typescript/commonjs/src/nativeAd/NativeAdViewProvider.d.ts.map +1 -1
  147. package/lib/typescript/commonjs/src/types/AdInfo.d.ts +15 -0
  148. package/lib/typescript/commonjs/src/types/AdInfo.d.ts.map +1 -1
  149. package/lib/typescript/commonjs/src/types/AdProps.d.ts +0 -1
  150. package/lib/typescript/commonjs/src/types/AdProps.d.ts.map +1 -1
  151. package/lib/typescript/commonjs/src/types/NativeAdViewProps.d.ts +2 -0
  152. package/lib/typescript/commonjs/src/types/NativeAdViewProps.d.ts.map +1 -1
  153. package/lib/typescript/module/plugin/src/index.d.ts +2 -6
  154. package/lib/typescript/module/plugin/src/index.d.ts.map +1 -1
  155. package/lib/typescript/module/plugin/src/withAndroid.d.ts +2 -6
  156. package/lib/typescript/module/plugin/src/withAndroid.d.ts.map +1 -1
  157. package/lib/typescript/module/plugin/src/withIos.d.ts +2 -6
  158. package/lib/typescript/module/plugin/src/withIos.d.ts.map +1 -1
  159. package/lib/typescript/module/src/AdBannerView.d.ts +2 -2
  160. package/lib/typescript/module/src/AdBannerView.d.ts.map +1 -1
  161. package/lib/typescript/module/src/AppOpenAd.d.ts +2 -2
  162. package/lib/typescript/module/src/AppOpenAd.d.ts.map +1 -1
  163. package/lib/typescript/module/src/DaroMediaViewNativeComponent.d.ts +6 -0
  164. package/lib/typescript/module/src/DaroMediaViewNativeComponent.d.ts.map +1 -0
  165. package/lib/typescript/module/src/DaroRNAdBannerViewNativeComponent.d.ts +33 -0
  166. package/lib/typescript/module/src/DaroRNAdBannerViewNativeComponent.d.ts.map +1 -0
  167. package/lib/typescript/module/src/DaroRNNativeAdViewNativeComponent.d.ts +43 -0
  168. package/lib/typescript/module/src/DaroRNNativeAdViewNativeComponent.d.ts.map +1 -0
  169. package/lib/typescript/module/src/EventEmitter.d.ts.map +1 -1
  170. package/lib/typescript/module/src/InterstitialAd.d.ts.map +1 -1
  171. package/lib/typescript/module/src/LightPopupAd.d.ts.map +1 -1
  172. package/lib/typescript/module/src/NativeDaroModule.d.ts +70 -0
  173. package/lib/typescript/module/src/NativeDaroModule.d.ts.map +1 -0
  174. package/lib/typescript/module/src/RewardedAd.d.ts.map +1 -1
  175. package/lib/typescript/module/src/hooks/useInterstitialAd.d.ts +19 -0
  176. package/lib/typescript/module/src/hooks/useInterstitialAd.d.ts.map +1 -0
  177. package/lib/typescript/module/src/hooks/useLightPopupAd.d.ts +23 -0
  178. package/lib/typescript/module/src/hooks/useLightPopupAd.d.ts.map +1 -0
  179. package/lib/typescript/module/src/hooks/useRewardedAd.d.ts +20 -0
  180. package/lib/typescript/module/src/hooks/useRewardedAd.d.ts.map +1 -0
  181. package/lib/typescript/module/src/index.d.ts +86 -1
  182. package/lib/typescript/module/src/index.d.ts.map +1 -1
  183. package/lib/typescript/module/src/nativeAd/NativeAdView.d.ts +1 -0
  184. package/lib/typescript/module/src/nativeAd/NativeAdView.d.ts.map +1 -1
  185. package/lib/typescript/module/src/nativeAd/NativeAdViewComponents.d.ts.map +1 -1
  186. package/lib/typescript/module/src/nativeAd/NativeAdViewProvider.d.ts +11 -5
  187. package/lib/typescript/module/src/nativeAd/NativeAdViewProvider.d.ts.map +1 -1
  188. package/lib/typescript/module/src/types/AdInfo.d.ts +15 -0
  189. package/lib/typescript/module/src/types/AdInfo.d.ts.map +1 -1
  190. package/lib/typescript/module/src/types/AdProps.d.ts +0 -1
  191. package/lib/typescript/module/src/types/AdProps.d.ts.map +1 -1
  192. package/lib/typescript/module/src/types/NativeAdViewProps.d.ts +2 -0
  193. package/lib/typescript/module/src/types/NativeAdViewProps.d.ts.map +1 -1
  194. package/package.json +12 -5
  195. package/plugin/build/index.d.ts +2 -6
  196. package/plugin/build/index.js +21 -56
  197. package/plugin/build/withAndroid.d.ts +2 -6
  198. package/plugin/build/withAndroid.js +123 -83
  199. package/plugin/build/withIos.d.ts +2 -6
  200. package/plugin/build/withIos.js +37 -34
  201. package/react-native-daro.podspec +4 -2
  202. package/src/AdBannerView.tsx +24 -63
  203. package/src/AppOpenAd.ts +48 -17
  204. package/src/DaroMediaViewNativeComponent.ts +9 -0
  205. package/src/DaroRNAdBannerViewNativeComponent.ts +50 -0
  206. package/src/DaroRNNativeAdViewNativeComponent.ts +65 -0
  207. package/src/EventEmitter.ts +4 -5
  208. package/src/InterstitialAd.ts +8 -10
  209. package/src/LightPopupAd.ts +11 -12
  210. package/src/NativeDaroModule.ts +106 -0
  211. package/src/RewardedAd.ts +8 -10
  212. package/src/codegen-env.d.ts +45 -0
  213. package/src/hooks/useInterstitialAd.ts +117 -0
  214. package/src/hooks/useLightPopupAd.ts +132 -0
  215. package/src/hooks/useRewardedAd.ts +122 -0
  216. package/src/index.tsx +157 -22
  217. package/src/nativeAd/NativeAdView.tsx +41 -54
  218. package/src/nativeAd/NativeAdViewComponents.tsx +80 -42
  219. package/src/nativeAd/NativeAdViewProvider.tsx +75 -17
  220. package/src/types/AdInfo.ts +17 -0
  221. package/src/types/AdProps.ts +0 -2
  222. package/src/types/NativeAdViewProps.ts +7 -0
  223. package/android/src/admob/java/com/daro/reactnative/DaroSdkBridge.kt +0 -23
  224. package/android/src/main/java/com/daro/reactnative/DaroMAdBannerViewManager.kt +0 -132
  225. package/android/src/main/java/com/daro/reactnative/DaroMAdNativeViewManager.kt +0 -136
  226. package/android/src/main/java/com/daro/reactnative/DaroMModule.kt +0 -202
  227. package/android/src/main/java/com/daro/reactnative/DaroMPackage.kt +0 -21
  228. package/android/src/main/java/com/daro/reactnative/view/DaroMAdNativeViewContainer.kt +0 -375
  229. package/ios/DaroMAdBannerViewManager.swift +0 -91
  230. package/ios/DaroMModule.mm +0 -45
  231. package/ios/DaroMNativeAdViewManager.swift +0 -291
  232. package/ios/mediation/admob/DaroMediationDebugger.swift +0 -11
  233. package/lib/commonjs/types/DaroMMobileAds.js +0 -2
  234. package/lib/commonjs/types/DaroMMobileAds.js.map +0 -1
  235. package/lib/module/types/DaroMMobileAds.js +0 -2
  236. package/lib/module/types/DaroMMobileAds.js.map +0 -1
  237. package/lib/typescript/commonjs/src/types/DaroMMobileAds.d.ts +0 -6
  238. package/lib/typescript/commonjs/src/types/DaroMMobileAds.d.ts.map +0 -1
  239. package/lib/typescript/module/src/types/DaroMMobileAds.d.ts +0 -6
  240. package/lib/typescript/module/src/types/DaroMMobileAds.d.ts.map +0 -1
  241. package/src/types/DaroMMobileAds.ts +0 -5
@@ -0,0 +1,117 @@
1
+ import { useCallback, useEffect, useRef, useState } from 'react';
2
+ import { InterstitialAd } from '../InterstitialAd';
3
+ import { AdEventType } from '../types/AdEvent';
4
+ import type {
5
+ AdDisplayFailedInfo,
6
+ AdInfo,
7
+ AdLoadFailedInfo,
8
+ } from '../types/AdInfo';
9
+
10
+ export type UseInterstitialAdOptions = {
11
+ onLoaded?: (adInfo: AdInfo) => void;
12
+ onLoadFailed?: (error: AdLoadFailedInfo) => void;
13
+ onClicked?: (adInfo: AdInfo) => void;
14
+ onDisplayed?: (adInfo: AdInfo) => void;
15
+ onFailedToDisplay?: (error: AdDisplayFailedInfo) => void;
16
+ onHidden?: (adInfo: AdInfo) => void;
17
+ onImpressionRecorded?: (adInfo: AdInfo) => void;
18
+ };
19
+
20
+ export type UseInterstitialAdResult = {
21
+ isLoaded: boolean;
22
+ isLoading: boolean;
23
+ load: () => void;
24
+ show: () => void;
25
+ isAdReady: () => Promise<boolean>;
26
+ };
27
+
28
+ export function useInterstitialAd(
29
+ adUnitId: string | null,
30
+ options: UseInterstitialAdOptions = {}
31
+ ): UseInterstitialAdResult {
32
+ const adRef = useRef<InterstitialAd | null>(null);
33
+ const optionsRef = useRef(options);
34
+ optionsRef.current = options;
35
+ const [state, setState] = useState({
36
+ isLoaded: false,
37
+ isLoading: false,
38
+ });
39
+
40
+ const load = useCallback(() => {
41
+ if (!adUnitId) {
42
+ return;
43
+ }
44
+
45
+ const ad = adRef.current;
46
+ if (!ad) {
47
+ return;
48
+ }
49
+
50
+ setState({ isLoaded: false, isLoading: true });
51
+ ad.load();
52
+ }, [adUnitId]);
53
+
54
+ const show = useCallback(() => {
55
+ adRef.current?.show();
56
+ }, []);
57
+
58
+ const isAdReady = useCallback(async () => {
59
+ const isLoaded = (await adRef.current?.isAdReady()) ?? false;
60
+ setState((prevState) => ({ ...prevState, isLoaded }));
61
+ return isLoaded;
62
+ }, []);
63
+
64
+ useEffect(() => {
65
+ adRef.current?.removeAllListeners();
66
+ adRef.current = null;
67
+ setState({ isLoaded: false, isLoading: false });
68
+
69
+ if (!adUnitId) {
70
+ return;
71
+ }
72
+
73
+ const ad = InterstitialAd.createForAdRequest(adUnitId);
74
+ adRef.current = ad;
75
+
76
+ ad.addAdEventListener(AdEventType.LOADED, (info) => {
77
+ setState({ isLoaded: true, isLoading: false });
78
+ optionsRef.current.onLoaded?.(info);
79
+ });
80
+ ad.addAdEventListener(AdEventType.LOAD_FAILED, (error) => {
81
+ setState({ isLoaded: false, isLoading: false });
82
+ optionsRef.current.onLoadFailed?.(error);
83
+ });
84
+ ad.addAdEventListener(AdEventType.DISPLAYED, (info) => {
85
+ setState((prevState) => ({ ...prevState, isLoaded: false }));
86
+ optionsRef.current.onDisplayed?.(info);
87
+ });
88
+ ad.addAdEventListener(AdEventType.FAILED_TO_DISPLAY, (error) => {
89
+ setState({ isLoaded: false, isLoading: false });
90
+ optionsRef.current.onFailedToDisplay?.(error);
91
+ });
92
+ ad.addAdEventListener(AdEventType.HIDDEN, (info) => {
93
+ setState((prevState) => ({ ...prevState, isLoaded: false }));
94
+ optionsRef.current.onHidden?.(info);
95
+ });
96
+ ad.addAdEventListener(AdEventType.CLICKED, (info) => {
97
+ optionsRef.current.onClicked?.(info);
98
+ });
99
+ ad.addAdEventListener(AdEventType.IMPRESSION_RECORDED, (info) => {
100
+ optionsRef.current.onImpressionRecorded?.(info);
101
+ });
102
+
103
+ return () => {
104
+ ad.removeAllListeners();
105
+ if (adRef.current === ad) {
106
+ adRef.current = null;
107
+ }
108
+ };
109
+ }, [adUnitId]);
110
+
111
+ return {
112
+ ...state,
113
+ load,
114
+ show,
115
+ isAdReady,
116
+ };
117
+ }
@@ -0,0 +1,132 @@
1
+ import { useCallback, useEffect, useRef, useState } from 'react';
2
+ import { LightPopupAd } from '../LightPopupAd';
3
+ import { AdEventType } from '../types/AdEvent';
4
+ import type {
5
+ AdDisplayFailedInfo,
6
+ AdInfo,
7
+ AdLoadFailedInfo,
8
+ } from '../types/AdInfo';
9
+ import type { LightPopupAdConfiguration } from '../types/LightPopupAd';
10
+
11
+ export type UseLightPopupAdOptions = {
12
+ onLoaded?: (adInfo: AdInfo) => void;
13
+ onLoadFailed?: (error: AdLoadFailedInfo) => void;
14
+ onClicked?: (adInfo: AdInfo) => void;
15
+ onDisplayed?: (adInfo: AdInfo) => void;
16
+ onFailedToDisplay?: (error: AdDisplayFailedInfo) => void;
17
+ onHidden?: (adInfo: AdInfo) => void;
18
+ onImpressionRecorded?: (adInfo: AdInfo) => void;
19
+ };
20
+
21
+ export type UseLightPopupAdLoadOptions = {
22
+ configuration?: LightPopupAdConfiguration;
23
+ };
24
+
25
+ export type UseLightPopupAdResult = {
26
+ isLoaded: boolean;
27
+ isLoading: boolean;
28
+ load: (options?: UseLightPopupAdLoadOptions) => void;
29
+ show: () => void;
30
+ isAdReady: () => Promise<boolean>;
31
+ };
32
+
33
+ export function useLightPopupAd(
34
+ adUnitId: string | null,
35
+ options: UseLightPopupAdOptions = {}
36
+ ): UseLightPopupAdResult {
37
+ const adRef = useRef<LightPopupAd | null>(null);
38
+ const optionsRef = useRef(options);
39
+ optionsRef.current = options;
40
+ const [state, setState] = useState({
41
+ isLoaded: false,
42
+ isLoading: false,
43
+ });
44
+
45
+ const createAd = useCallback(() => {
46
+ if (!adUnitId) {
47
+ return null;
48
+ }
49
+
50
+ adRef.current?.removeAllListeners();
51
+
52
+ const ad = LightPopupAd.createForAdRequest(adUnitId);
53
+ adRef.current = ad;
54
+
55
+ ad.addAdEventListener(AdEventType.LOADED, (info) => {
56
+ setState({ isLoaded: true, isLoading: false });
57
+ optionsRef.current.onLoaded?.(info);
58
+ });
59
+ ad.addAdEventListener(AdEventType.LOAD_FAILED, (error) => {
60
+ setState({ isLoaded: false, isLoading: false });
61
+ optionsRef.current.onLoadFailed?.(error);
62
+ });
63
+ ad.addAdEventListener(AdEventType.DISPLAYED, (info) => {
64
+ setState((prevState) => ({ ...prevState, isLoaded: false }));
65
+ optionsRef.current.onDisplayed?.(info);
66
+ });
67
+ ad.addAdEventListener(AdEventType.FAILED_TO_DISPLAY, (error) => {
68
+ setState({ isLoaded: false, isLoading: false });
69
+ optionsRef.current.onFailedToDisplay?.(error);
70
+ });
71
+ ad.addAdEventListener(AdEventType.HIDDEN, (info) => {
72
+ setState((prevState) => ({ ...prevState, isLoaded: false }));
73
+ optionsRef.current.onHidden?.(info);
74
+ });
75
+ ad.addAdEventListener(AdEventType.CLICKED, (info) => {
76
+ optionsRef.current.onClicked?.(info);
77
+ });
78
+ ad.addAdEventListener(AdEventType.IMPRESSION_RECORDED, (info) => {
79
+ optionsRef.current.onImpressionRecorded?.(info);
80
+ });
81
+
82
+ return ad;
83
+ }, [adUnitId]);
84
+
85
+ const load = useCallback(
86
+ (loadOptions?: UseLightPopupAdLoadOptions) => {
87
+ const ad = createAd();
88
+ if (!ad) {
89
+ return;
90
+ }
91
+
92
+ setState({ isLoaded: false, isLoading: true });
93
+
94
+ if (loadOptions?.configuration) {
95
+ ad.setConfiguration(loadOptions.configuration);
96
+ }
97
+
98
+ ad.load();
99
+ },
100
+ [createAd]
101
+ );
102
+
103
+ const show = useCallback(() => {
104
+ adRef.current?.show();
105
+ }, []);
106
+
107
+ const isAdReady = useCallback(async () => {
108
+ const isLoaded = (await adRef.current?.isAdReady()) ?? false;
109
+ setState((prevState) => ({ ...prevState, isLoaded }));
110
+ return isLoaded;
111
+ }, []);
112
+
113
+ useEffect(() => {
114
+ adRef.current?.removeAllListeners();
115
+ adRef.current = null;
116
+ setState({ isLoaded: false, isLoading: false });
117
+ }, [adUnitId]);
118
+
119
+ useEffect(() => {
120
+ return () => {
121
+ adRef.current?.removeAllListeners();
122
+ adRef.current = null;
123
+ };
124
+ }, []);
125
+
126
+ return {
127
+ ...state,
128
+ load,
129
+ show,
130
+ isAdReady,
131
+ };
132
+ }
@@ -0,0 +1,122 @@
1
+ import { useCallback, useEffect, useRef, useState } from 'react';
2
+ import { RewardedAd } from '../RewardedAd';
3
+ import { AdEventType, RewardedAdEventType } from '../types/AdEvent';
4
+ import type {
5
+ AdDisplayFailedInfo,
6
+ AdInfo,
7
+ AdLoadFailedInfo,
8
+ AdRewardInfo,
9
+ } from '../types/AdInfo';
10
+
11
+ export type UseRewardedAdOptions = {
12
+ onLoaded?: (adInfo: AdInfo) => void;
13
+ onLoadFailed?: (error: AdLoadFailedInfo) => void;
14
+ onClicked?: (adInfo: AdInfo) => void;
15
+ onDisplayed?: (adInfo: AdInfo) => void;
16
+ onFailedToDisplay?: (error: AdDisplayFailedInfo) => void;
17
+ onHidden?: (adInfo: AdInfo) => void;
18
+ onImpressionRecorded?: (adInfo: AdInfo) => void;
19
+ onReceivedReward?: (reward: AdRewardInfo) => void;
20
+ };
21
+
22
+ export type UseRewardedAdResult = {
23
+ isLoaded: boolean;
24
+ isLoading: boolean;
25
+ load: () => void;
26
+ show: (customData?: string | null) => void;
27
+ isAdReady: () => Promise<boolean>;
28
+ };
29
+
30
+ export function useRewardedAd(
31
+ adUnitId: string | null,
32
+ options: UseRewardedAdOptions = {}
33
+ ): UseRewardedAdResult {
34
+ const adRef = useRef<RewardedAd | null>(null);
35
+ const optionsRef = useRef(options);
36
+ optionsRef.current = options;
37
+ const [state, setState] = useState({
38
+ isLoaded: false,
39
+ isLoading: false,
40
+ });
41
+
42
+ const load = useCallback(() => {
43
+ if (!adUnitId) {
44
+ return;
45
+ }
46
+
47
+ const ad = adRef.current;
48
+ if (!ad) {
49
+ return;
50
+ }
51
+
52
+ setState({ isLoaded: false, isLoading: true });
53
+ ad.load();
54
+ }, [adUnitId]);
55
+
56
+ const show = useCallback((customData?: string | null) => {
57
+ adRef.current?.show(customData);
58
+ }, []);
59
+
60
+ const isAdReady = useCallback(async () => {
61
+ const isLoaded = (await adRef.current?.isAdReady()) ?? false;
62
+ setState((prevState) => ({ ...prevState, isLoaded }));
63
+ return isLoaded;
64
+ }, []);
65
+
66
+ useEffect(() => {
67
+ adRef.current?.removeAllListeners();
68
+ adRef.current = null;
69
+ setState({ isLoaded: false, isLoading: false });
70
+
71
+ if (!adUnitId) {
72
+ return;
73
+ }
74
+
75
+ const ad = RewardedAd.createForAdRequest(adUnitId);
76
+ adRef.current = ad;
77
+
78
+ ad.addAdEventListener(AdEventType.LOADED, (info) => {
79
+ setState({ isLoaded: true, isLoading: false });
80
+ optionsRef.current.onLoaded?.(info);
81
+ });
82
+ ad.addAdEventListener(AdEventType.LOAD_FAILED, (error) => {
83
+ setState({ isLoaded: false, isLoading: false });
84
+ optionsRef.current.onLoadFailed?.(error);
85
+ });
86
+ ad.addAdEventListener(AdEventType.DISPLAYED, (info) => {
87
+ setState((prevState) => ({ ...prevState, isLoaded: false }));
88
+ optionsRef.current.onDisplayed?.(info);
89
+ });
90
+ ad.addAdEventListener(AdEventType.FAILED_TO_DISPLAY, (error) => {
91
+ setState({ isLoaded: false, isLoading: false });
92
+ optionsRef.current.onFailedToDisplay?.(error);
93
+ });
94
+ ad.addAdEventListener(AdEventType.HIDDEN, (info) => {
95
+ setState((prevState) => ({ ...prevState, isLoaded: false }));
96
+ optionsRef.current.onHidden?.(info);
97
+ });
98
+ ad.addAdEventListener(AdEventType.CLICKED, (info) => {
99
+ optionsRef.current.onClicked?.(info);
100
+ });
101
+ ad.addAdEventListener(AdEventType.IMPRESSION_RECORDED, (info) => {
102
+ optionsRef.current.onImpressionRecorded?.(info);
103
+ });
104
+ ad.addAdEventListener(RewardedAdEventType.RECEIVED_REWARD, (reward) => {
105
+ optionsRef.current.onReceivedReward?.(reward);
106
+ });
107
+
108
+ return () => {
109
+ ad.removeAllListeners();
110
+ if (adRef.current === ad) {
111
+ adRef.current = null;
112
+ }
113
+ };
114
+ }, [adUnitId]);
115
+
116
+ return {
117
+ ...state,
118
+ load,
119
+ show,
120
+ isAdReady,
121
+ };
122
+ }
package/src/index.tsx CHANGED
@@ -1,10 +1,26 @@
1
- import { NativeModules, Platform } from 'react-native';
1
+ import NativeDaroModule from './NativeDaroModule';
2
2
 
3
3
  export * from './AdBannerView';
4
4
  export * from './types';
5
5
  export { InterstitialAd } from './InterstitialAd';
6
+ export { useInterstitialAd } from './hooks/useInterstitialAd';
7
+ export type {
8
+ UseInterstitialAdOptions,
9
+ UseInterstitialAdResult,
10
+ } from './hooks/useInterstitialAd';
6
11
  export { RewardedAd } from './RewardedAd';
12
+ export { useRewardedAd } from './hooks/useRewardedAd';
13
+ export type {
14
+ UseRewardedAdOptions,
15
+ UseRewardedAdResult,
16
+ } from './hooks/useRewardedAd';
7
17
  export { LightPopupAd } from './LightPopupAd';
18
+ export { useLightPopupAd } from './hooks/useLightPopupAd';
19
+ export type {
20
+ UseLightPopupAdOptions,
21
+ UseLightPopupAdLoadOptions,
22
+ UseLightPopupAdResult,
23
+ } from './hooks/useLightPopupAd';
8
24
 
9
25
  export { NativeAdView } from './nativeAd/NativeAdView';
10
26
  export {
@@ -15,31 +31,150 @@ export {
15
31
  TitleView,
16
32
  } from './nativeAd/NativeAdViewComponents';
17
33
 
18
- const LINKING_ERROR =
19
- `The native module 'DaroMModule' doesn't seem to be linked. Make sure: \n\n` +
20
- Platform.select({ ios: "- You have run 'pod install'\n", default: '' }) +
21
- '- You rebuilt the app after installing the package\n' +
22
- '- You are not using Expo Go\n';
23
-
24
- const DaroMModule = NativeModules.DaroMModule
25
- ? NativeModules.DaroMModule
26
- : new Proxy(
27
- {},
28
- {
29
- get() {
30
- throw new Error(LINKING_ERROR);
31
- },
32
- }
33
- );
34
-
35
34
  export async function initialize() {
36
- await DaroMModule.initializeSdk();
35
+ await NativeDaroModule.initializeSdk();
36
+ }
37
+
38
+ export async function isInitialized(): Promise<boolean> {
39
+ return NativeDaroModule.isInitialized();
40
+ }
41
+
42
+ export type DaroMediationStatus = {
43
+ mediationPlatform: string;
44
+ isReady: boolean;
45
+ hasFailed: boolean;
46
+ };
47
+
48
+ // 키가 공개 어휘(`daroa`/`darom`)를 따른다 (DARO-1594). 한때 `admob`/`applovin` 이었고
49
+ // 그것은 벤더 이름이라 공개 표면에서 걷었다.
50
+ export type DaroMediationWeights = {
51
+ daroa: number;
52
+ darom: number;
53
+ };
54
+
55
+ export async function getSdkVersion(): Promise<string | null> {
56
+ return (await NativeDaroModule.getSdkVersion()) ?? null;
57
+ }
58
+
59
+ export async function getMediationStatuses(): Promise<
60
+ DaroMediationStatus[] | null
61
+ > {
62
+ const statuses = await NativeDaroModule.getMediationStatuses();
63
+ return (statuses as DaroMediationStatus[] | null) ?? null;
64
+ }
65
+
66
+ export async function getMediationWeights(): Promise<DaroMediationWeights | null> {
67
+ const weights = await NativeDaroModule.getMediationWeights();
68
+ return (weights as DaroMediationWeights | null) ?? null;
69
+ }
70
+
71
+ /**
72
+ * 미디에이션별 벤더 검사기를 띄운다.
73
+ *
74
+ * 값은 {@link DaroAdInfo.mediationPlatform} 과 **같은 어휘**다. 구 어휘
75
+ * (`admob`/`applovin`)도 네이티브가 아직 받아주지만 타입으로는 광고하지 않는다 —
76
+ * 벤더 이름을 공개 표면에서 걷는 것이 이 어휘를 만든 이유다.
77
+ */
78
+ export async function showMediationDebuggerFor(mediation: 'daroa' | 'darom') {
79
+ await NativeDaroModule.showMediationDebuggerFor(mediation);
80
+ }
81
+
82
+ export type DaroAdapterRow = {
83
+ name: string;
84
+ detail: string;
85
+ isReady: boolean;
86
+ };
87
+
88
+ // QA 전용 — 벤더 SDK(GMA·MAX)에 직접 묻는다. SDK 는 서브네트워크 목록을 갖지 않는다.
89
+ export async function getAdapterInventory(): Promise<
90
+ Record<string, DaroAdapterRow[]>
91
+ > {
92
+ const inventory = await NativeDaroModule.getAdapterInventory();
93
+ return inventory as Record<string, DaroAdapterRow[]>;
94
+ }
95
+
96
+ // QA 전용 — 주입 결과(런타임 plist/manifest)의 파생 키를 그대로 돌려준다. JS 는
97
+ // 원문을 읽을 수 없어 이 브리지가 유일한 창이다. 판정·마스킹은 앱이 한다.
98
+ export async function getIntegrationKeyInfo(): Promise<
99
+ Record<string, string | null>
100
+ > {
101
+ const info = await NativeDaroModule.getIntegrationKeyInfo();
102
+ return info as Record<string, string | null>;
37
103
  }
38
104
 
39
105
  export async function showMediationDebugger() {
40
- await DaroMModule.showMediationDebugger();
106
+ await NativeDaroModule.showMediationDebugger();
107
+ }
108
+
109
+ export async function setUserId(userId: string) {
110
+ await NativeDaroModule.setUserId(userId);
111
+ }
112
+
113
+ /**
114
+ * GDPR 동의 상태. `unknown` 이 SDK 기본값(미확정)이다.
115
+ *
116
+ * **네이티브의 표현을 노출하지 않는다.** Android 는 `GdprStatus` enum 이름
117
+ * (`OPT_IN`…), iOS 는 `DaroGdprStatus` 의 Int raw value(0…3)로 같은 개념을 서로 다르게
118
+ * 적는다. 둘 중 하나를 골라 JS 계약으로 삼으면 나머지 플랫폼이 그 표현을 되옮겨야 하고,
119
+ * 되옮기는 코드가 없거나 낡으면 **에러 없이 틀린 상태가 전달된다** — Flutter 가 Android
120
+ * enum 이름을 그대로 보내 iOS 에서 어긋난 것이 그 사고다(DARO-1471). 그래서 JS 는 어느
121
+ * 플랫폼 것도 아닌 문자열을 쓰고, 옮기는 일은 각 네이티브 어댑터가 자기 쪽에서 한다.
122
+ */
123
+ export type DaroGdprStatus = 'optIn' | 'optOut' | 'notApplicable' | 'unknown';
124
+
125
+ /** CCPA 동의 상태. GDPR 과 달리 `unknown` 이 없다. */
126
+ export type DaroCcpaStatus = 'optIn' | 'optOut' | 'notApplicable';
127
+
128
+ /** 퍼블리셔가 선언하는 COPPA 아동 대상 여부. */
129
+ export type DaroCoppaStatus = 'child' | 'notChild';
130
+
131
+ /**
132
+ * GDPR 동의 상태를 설정한다.
133
+ *
134
+ * **{@link initialize} 전에 호출한다.** 동의는 첫 광고 요청보다 먼저 확정돼 있어야 한다.
135
+ * 셋 중 {@link setCoppa} 는 이것이 권고가 아니라 요구이고, 나머지 둘의 순서를 거기에
136
+ * 맞춘다 — 세 API 의 규칙이 갈리면 지키는 쪽이 더 어렵다.
137
+ *
138
+ * 모르는 상태 문자열은 **기본값으로 떨어지지 않고 reject 된다**(`INVALID_CONSENT_STATUS`).
139
+ * 동의는 조용히 틀리면 안 되는 값이라, 오타가 "일단 옵트인"으로 흡수되는 쪽이 더 나쁘다.
140
+ *
141
+ * **이미 넘긴 동의 문자열이 있으면 상태만 갱신할 때도 같이 넘겨라.** 빈 문자열은 양쪽
142
+ * 플랫폼 모두 건너뛰므로 이전 값이 지워지지는 않지만, 상태와 문자열을 한 호출로 함께
143
+ * 넘기면 어느 쪽이 최신인지 따질 일이 아예 없다.
144
+ *
145
+ * @param consentString IAB TCF 동의 문자열. 없으면 비워 둔다.
146
+ */
147
+ export async function setGdpr(
148
+ status: DaroGdprStatus,
149
+ consentString: string = ''
150
+ ) {
151
+ await NativeDaroModule.setGdpr(status, consentString);
152
+ }
153
+
154
+ /**
155
+ * CCPA 동의 상태를 설정한다.
156
+ *
157
+ * **{@link initialize} 전에 호출한다** — {@link setGdpr} 과 같은 이유다.
158
+ *
159
+ * `consentString` 취급도 {@link setGdpr} 과 같다 — 빈 문자열은 이전 값을 덮지 않고,
160
+ * 상태만 갱신할 때도 이미 넘긴 문자열이 있으면 같이 넘기는 편이 낫다.
161
+ *
162
+ * @param consentString IAB US Privacy 문자열. 없으면 비워 둔다.
163
+ */
164
+ export async function setCcpa(
165
+ status: DaroCcpaStatus,
166
+ consentString: string = ''
167
+ ) {
168
+ await NativeDaroModule.setCcpa(status, consentString);
41
169
  }
42
170
 
43
- export async function setUserId(userId: String) {
44
- await DaroMModule.setUserId(userId);
171
+ /**
172
+ * COPPA 아동 대상 여부를 설정한다.
173
+ *
174
+ * **{@link initialize} 전에 호출한다.** 셋 중 이것만은 순서가 권고가 아니라 요구다 —
175
+ * 아동 대상으로 선언하면 광고 식별자 전송이 차단되는데, 그 차단이 **초기화 요청부터**
176
+ * 걸려야 한다. 초기화 뒤에 부르면 첫 요청은 이미 식별자를 달고 나간 뒤다.
177
+ */
178
+ export async function setCoppa(status: DaroCoppaStatus) {
179
+ await NativeDaroModule.setCoppa(status);
45
180
  }