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.
- package/README.md +2 -5
- package/android/build.gradle +17 -14
- package/android/src/main/java/com/daro/reactnative/DaroMediaViewManager.kt +25 -0
- package/android/src/main/java/com/daro/reactnative/DaroRNAdBannerViewManager.kt +105 -0
- package/android/src/main/java/com/daro/reactnative/DaroRNAdNativeViewManager.kt +163 -0
- package/android/src/main/java/com/daro/reactnative/DaroRNModule.kt +376 -0
- package/android/src/main/java/com/daro/reactnative/DaroRNPackage.kt +45 -0
- package/android/src/main/java/com/daro/reactnative/DaroSdkBridge.kt +52 -0
- package/android/src/main/java/com/daro/reactnative/constants/{InternalDaroMBannerSize.kt → InternalDaroRNBannerSize.kt} +2 -2
- package/android/src/main/java/com/daro/reactnative/event/{DaroMEvent.kt → DaroRNEvent.kt} +22 -11
- package/android/src/main/java/com/daro/reactnative/impl/{DaroMBannerViewModuleImpl.kt → DaroRNBannerViewModuleImpl.kt} +3 -3
- package/android/src/main/java/com/daro/reactnative/impl/{DaroMInterstitialModuleImpl.kt → DaroRNInterstitialModuleImpl.kt} +4 -4
- package/android/src/main/java/com/daro/reactnative/impl/{DaroMLightPopupModuleImpl.kt → DaroRNLightPopupModuleImpl.kt} +4 -4
- package/android/src/main/java/com/daro/reactnative/impl/{DaroMRewardedAdModuleImpl.kt → DaroRNRewardedAdModuleImpl.kt} +4 -4
- package/android/src/main/java/com/daro/reactnative/util/AdInfoUtil.kt +12 -0
- package/android/src/main/java/com/daro/reactnative/util/DaroQaProbe.kt +147 -0
- package/android/src/main/java/com/daro/reactnative/util/EventEmitterUtil.kt +20 -7
- package/android/src/main/java/com/daro/reactnative/view/DaroMediaView.kt +123 -0
- package/android/src/main/java/com/daro/reactnative/view/{DaroMAdBannerViewContainer.kt → DaroRNAdBannerViewContainer.kt} +2 -3
- package/android/src/main/java/com/daro/reactnative/view/DaroRNAdNativeViewContainer.kt +623 -0
- package/android/src/newarch/java/com/daro/reactnative/DaroRNModuleSpec.kt +6 -0
- package/android/src/oldarch/java/com/daro/reactnative/DaroRNModuleSpec.kt +119 -0
- package/ios/{DaroMModule+AppOpen.swift → DaroRNModule+AppOpen.swift} +22 -20
- package/ios/DaroRNModule+Consent.swift +88 -0
- package/ios/{DaroMModule+Interstitial.swift → DaroRNModule+Interstitial.swift} +21 -18
- package/ios/{DaroMModule+LightPopup.swift → DaroRNModule+LightPopup.swift} +18 -15
- package/ios/DaroRNModule+Qa.swift +158 -0
- package/ios/{DaroMModule+Rewarded.swift → DaroRNModule+Rewarded.swift} +22 -19
- package/ios/DaroRNModule.mm +88 -0
- package/ios/{DaroMModule.swift → DaroRNModule.swift} +24 -10
- package/ios/Fabric/DaroRNAdBannerComponentView.mm +219 -0
- package/ios/Fabric/DaroRNFabricEventSink.mm +31 -0
- package/ios/Fabric/DaroRNFabricPropApplier.mm +123 -0
- package/ios/Fabric/DaroRNNativeAdComponentView.mm +306 -0
- package/ios/{DaroMAdBannerViewManager.m → Paper/DaroRNAdBannerViewManager.m} +4 -2
- package/ios/Paper/DaroRNAdBannerViewManager.swift +21 -0
- package/ios/{DaroMNativeAdViewManager.m → Paper/DaroRNNativeAdViewManager.m} +3 -2
- package/ios/Paper/DaroRNNativeAdViewManager.swift +22 -0
- package/ios/Shared/DaroMediationDebugger.swift +14 -0
- package/ios/{mediation/admob → Shared}/DaroMediationTypes.swift +1 -0
- package/ios/Shared/DaroRNAdEventSink.swift +24 -0
- package/ios/Shared/DaroRNBannerAdView.swift +188 -0
- package/ios/Shared/DaroRNNativeAdLoadCoordinator.swift +49 -0
- package/ios/Shared/DaroRNNativeAdView.swift +575 -0
- package/ios/Shared/DaroRNNativeAssetResolver.swift +53 -0
- package/lib/commonjs/AdBannerView.js +20 -41
- package/lib/commonjs/AdBannerView.js.map +1 -1
- package/lib/commonjs/AppOpenAd.js +45 -12
- package/lib/commonjs/AppOpenAd.js.map +1 -1
- package/lib/commonjs/DaroMediaViewNativeComponent.ts +9 -0
- package/lib/commonjs/DaroRNAdBannerViewNativeComponent.ts +50 -0
- package/lib/commonjs/DaroRNNativeAdViewNativeComponent.ts +65 -0
- package/lib/commonjs/EventEmitter.js +4 -5
- package/lib/commonjs/EventEmitter.js.map +1 -1
- package/lib/commonjs/InterstitialAd.js +9 -11
- package/lib/commonjs/InterstitialAd.js.map +1 -1
- package/lib/commonjs/LightPopupAd.js +11 -12
- package/lib/commonjs/LightPopupAd.js.map +1 -1
- package/lib/commonjs/NativeDaroModule.js +9 -0
- package/lib/commonjs/NativeDaroModule.js.map +1 -0
- package/lib/commonjs/RewardedAd.js +9 -11
- package/lib/commonjs/RewardedAd.js.map +1 -1
- package/lib/commonjs/codegen-env.d.js +2 -0
- package/lib/commonjs/codegen-env.d.js.map +1 -0
- package/lib/commonjs/hooks/useInterstitialAd.js +110 -0
- package/lib/commonjs/hooks/useInterstitialAd.js.map +1 -0
- package/lib/commonjs/hooks/useLightPopupAd.js +114 -0
- package/lib/commonjs/hooks/useLightPopupAd.js.map +1 -0
- package/lib/commonjs/hooks/useRewardedAd.js +113 -0
- package/lib/commonjs/hooks/useRewardedAd.js.map +1 -0
- package/lib/commonjs/index.js +150 -13
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/nativeAd/NativeAdView.js +23 -22
- package/lib/commonjs/nativeAd/NativeAdView.js.map +1 -1
- package/lib/commonjs/nativeAd/NativeAdViewComponents.js +43 -31
- package/lib/commonjs/nativeAd/NativeAdViewComponents.js.map +1 -1
- package/lib/commonjs/nativeAd/NativeAdViewProvider.js +34 -7
- package/lib/commonjs/nativeAd/NativeAdViewProvider.js.map +1 -1
- package/lib/module/AdBannerView.js +19 -42
- package/lib/module/AdBannerView.js.map +1 -1
- package/lib/module/AppOpenAd.js +45 -13
- package/lib/module/AppOpenAd.js.map +1 -1
- package/lib/module/DaroMediaViewNativeComponent.ts +9 -0
- package/lib/module/DaroRNAdBannerViewNativeComponent.ts +50 -0
- package/lib/module/DaroRNNativeAdViewNativeComponent.ts +65 -0
- package/lib/module/EventEmitter.js +4 -6
- package/lib/module/EventEmitter.js.map +1 -1
- package/lib/module/InterstitialAd.js +8 -11
- package/lib/module/InterstitialAd.js.map +1 -1
- package/lib/module/LightPopupAd.js +11 -13
- package/lib/module/LightPopupAd.js.map +1 -1
- package/lib/module/NativeDaroModule.js +5 -0
- package/lib/module/NativeDaroModule.js.map +1 -0
- package/lib/module/RewardedAd.js +8 -11
- package/lib/module/RewardedAd.js.map +1 -1
- package/lib/module/codegen-env.d.js +2 -0
- package/lib/module/codegen-env.d.js.map +1 -0
- package/lib/module/hooks/useInterstitialAd.js +106 -0
- package/lib/module/hooks/useInterstitialAd.js.map +1 -0
- package/lib/module/hooks/useLightPopupAd.js +110 -0
- package/lib/module/hooks/useLightPopupAd.js.map +1 -0
- package/lib/module/hooks/useRewardedAd.js +109 -0
- package/lib/module/hooks/useRewardedAd.js.map +1 -0
- package/lib/module/index.js +108 -13
- package/lib/module/index.js.map +1 -1
- package/lib/module/nativeAd/NativeAdView.js +22 -23
- package/lib/module/nativeAd/NativeAdView.js.map +1 -1
- package/lib/module/nativeAd/NativeAdViewComponents.js +45 -34
- package/lib/module/nativeAd/NativeAdViewComponents.js.map +1 -1
- package/lib/module/nativeAd/NativeAdViewProvider.js +35 -8
- package/lib/module/nativeAd/NativeAdViewProvider.js.map +1 -1
- package/lib/typescript/commonjs/plugin/src/index.d.ts +2 -6
- package/lib/typescript/commonjs/plugin/src/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/plugin/src/withAndroid.d.ts +2 -6
- package/lib/typescript/commonjs/plugin/src/withAndroid.d.ts.map +1 -1
- package/lib/typescript/commonjs/plugin/src/withIos.d.ts +2 -6
- package/lib/typescript/commonjs/plugin/src/withIos.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/AdBannerView.d.ts +2 -2
- package/lib/typescript/commonjs/src/AdBannerView.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/AppOpenAd.d.ts +2 -2
- package/lib/typescript/commonjs/src/AppOpenAd.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/DaroMediaViewNativeComponent.d.ts +6 -0
- package/lib/typescript/commonjs/src/DaroMediaViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/DaroRNAdBannerViewNativeComponent.d.ts +33 -0
- package/lib/typescript/commonjs/src/DaroRNAdBannerViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/DaroRNNativeAdViewNativeComponent.d.ts +43 -0
- package/lib/typescript/commonjs/src/DaroRNNativeAdViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/EventEmitter.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/InterstitialAd.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/LightPopupAd.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/NativeDaroModule.d.ts +70 -0
- package/lib/typescript/commonjs/src/NativeDaroModule.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/RewardedAd.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/hooks/useInterstitialAd.d.ts +19 -0
- package/lib/typescript/commonjs/src/hooks/useInterstitialAd.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/hooks/useLightPopupAd.d.ts +23 -0
- package/lib/typescript/commonjs/src/hooks/useLightPopupAd.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/hooks/useRewardedAd.d.ts +20 -0
- package/lib/typescript/commonjs/src/hooks/useRewardedAd.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/index.d.ts +86 -1
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/nativeAd/NativeAdView.d.ts +1 -0
- package/lib/typescript/commonjs/src/nativeAd/NativeAdView.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/nativeAd/NativeAdViewComponents.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/nativeAd/NativeAdViewProvider.d.ts +11 -5
- package/lib/typescript/commonjs/src/nativeAd/NativeAdViewProvider.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/types/AdInfo.d.ts +15 -0
- package/lib/typescript/commonjs/src/types/AdInfo.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/types/AdProps.d.ts +0 -1
- package/lib/typescript/commonjs/src/types/AdProps.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/types/NativeAdViewProps.d.ts +2 -0
- package/lib/typescript/commonjs/src/types/NativeAdViewProps.d.ts.map +1 -1
- package/lib/typescript/module/plugin/src/index.d.ts +2 -6
- package/lib/typescript/module/plugin/src/index.d.ts.map +1 -1
- package/lib/typescript/module/plugin/src/withAndroid.d.ts +2 -6
- package/lib/typescript/module/plugin/src/withAndroid.d.ts.map +1 -1
- package/lib/typescript/module/plugin/src/withIos.d.ts +2 -6
- package/lib/typescript/module/plugin/src/withIos.d.ts.map +1 -1
- package/lib/typescript/module/src/AdBannerView.d.ts +2 -2
- package/lib/typescript/module/src/AdBannerView.d.ts.map +1 -1
- package/lib/typescript/module/src/AppOpenAd.d.ts +2 -2
- package/lib/typescript/module/src/AppOpenAd.d.ts.map +1 -1
- package/lib/typescript/module/src/DaroMediaViewNativeComponent.d.ts +6 -0
- package/lib/typescript/module/src/DaroMediaViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/DaroRNAdBannerViewNativeComponent.d.ts +33 -0
- package/lib/typescript/module/src/DaroRNAdBannerViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/DaroRNNativeAdViewNativeComponent.d.ts +43 -0
- package/lib/typescript/module/src/DaroRNNativeAdViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/module/src/EventEmitter.d.ts.map +1 -1
- package/lib/typescript/module/src/InterstitialAd.d.ts.map +1 -1
- package/lib/typescript/module/src/LightPopupAd.d.ts.map +1 -1
- package/lib/typescript/module/src/NativeDaroModule.d.ts +70 -0
- package/lib/typescript/module/src/NativeDaroModule.d.ts.map +1 -0
- package/lib/typescript/module/src/RewardedAd.d.ts.map +1 -1
- package/lib/typescript/module/src/hooks/useInterstitialAd.d.ts +19 -0
- package/lib/typescript/module/src/hooks/useInterstitialAd.d.ts.map +1 -0
- package/lib/typescript/module/src/hooks/useLightPopupAd.d.ts +23 -0
- package/lib/typescript/module/src/hooks/useLightPopupAd.d.ts.map +1 -0
- package/lib/typescript/module/src/hooks/useRewardedAd.d.ts +20 -0
- package/lib/typescript/module/src/hooks/useRewardedAd.d.ts.map +1 -0
- package/lib/typescript/module/src/index.d.ts +86 -1
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/nativeAd/NativeAdView.d.ts +1 -0
- package/lib/typescript/module/src/nativeAd/NativeAdView.d.ts.map +1 -1
- package/lib/typescript/module/src/nativeAd/NativeAdViewComponents.d.ts.map +1 -1
- package/lib/typescript/module/src/nativeAd/NativeAdViewProvider.d.ts +11 -5
- package/lib/typescript/module/src/nativeAd/NativeAdViewProvider.d.ts.map +1 -1
- package/lib/typescript/module/src/types/AdInfo.d.ts +15 -0
- package/lib/typescript/module/src/types/AdInfo.d.ts.map +1 -1
- package/lib/typescript/module/src/types/AdProps.d.ts +0 -1
- package/lib/typescript/module/src/types/AdProps.d.ts.map +1 -1
- package/lib/typescript/module/src/types/NativeAdViewProps.d.ts +2 -0
- package/lib/typescript/module/src/types/NativeAdViewProps.d.ts.map +1 -1
- package/package.json +12 -5
- package/plugin/build/index.d.ts +2 -6
- package/plugin/build/index.js +21 -56
- package/plugin/build/withAndroid.d.ts +2 -6
- package/plugin/build/withAndroid.js +123 -83
- package/plugin/build/withIos.d.ts +2 -6
- package/plugin/build/withIos.js +37 -34
- package/react-native-daro.podspec +4 -2
- package/src/AdBannerView.tsx +24 -63
- package/src/AppOpenAd.ts +48 -17
- package/src/DaroMediaViewNativeComponent.ts +9 -0
- package/src/DaroRNAdBannerViewNativeComponent.ts +50 -0
- package/src/DaroRNNativeAdViewNativeComponent.ts +65 -0
- package/src/EventEmitter.ts +4 -5
- package/src/InterstitialAd.ts +8 -10
- package/src/LightPopupAd.ts +11 -12
- package/src/NativeDaroModule.ts +106 -0
- package/src/RewardedAd.ts +8 -10
- package/src/codegen-env.d.ts +45 -0
- package/src/hooks/useInterstitialAd.ts +117 -0
- package/src/hooks/useLightPopupAd.ts +132 -0
- package/src/hooks/useRewardedAd.ts +122 -0
- package/src/index.tsx +157 -22
- package/src/nativeAd/NativeAdView.tsx +41 -54
- package/src/nativeAd/NativeAdViewComponents.tsx +80 -42
- package/src/nativeAd/NativeAdViewProvider.tsx +75 -17
- package/src/types/AdInfo.ts +17 -0
- package/src/types/AdProps.ts +0 -2
- package/src/types/NativeAdViewProps.ts +7 -0
- package/android/src/admob/java/com/daro/reactnative/DaroSdkBridge.kt +0 -23
- package/android/src/main/java/com/daro/reactnative/DaroMAdBannerViewManager.kt +0 -132
- package/android/src/main/java/com/daro/reactnative/DaroMAdNativeViewManager.kt +0 -136
- package/android/src/main/java/com/daro/reactnative/DaroMModule.kt +0 -202
- package/android/src/main/java/com/daro/reactnative/DaroMPackage.kt +0 -21
- package/android/src/main/java/com/daro/reactnative/view/DaroMAdNativeViewContainer.kt +0 -375
- package/ios/DaroMAdBannerViewManager.swift +0 -91
- package/ios/DaroMModule.mm +0 -45
- package/ios/DaroMNativeAdViewManager.swift +0 -291
- package/ios/mediation/admob/DaroMediationDebugger.swift +0 -11
- package/lib/commonjs/types/DaroMMobileAds.js +0 -2
- package/lib/commonjs/types/DaroMMobileAds.js.map +0 -1
- package/lib/module/types/DaroMMobileAds.js +0 -2
- package/lib/module/types/DaroMMobileAds.js.map +0 -1
- package/lib/typescript/commonjs/src/types/DaroMMobileAds.d.ts +0 -6
- package/lib/typescript/commonjs/src/types/DaroMMobileAds.d.ts.map +0 -1
- package/lib/typescript/module/src/types/DaroMMobileAds.d.ts +0 -6
- package/lib/typescript/module/src/types/DaroMMobileAds.d.ts.map +0 -1
- 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
|
|
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
|
|
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
|
|
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
|
-
|
|
44
|
-
|
|
171
|
+
/**
|
|
172
|
+
* COPPA 아동 대상 여부를 설정한다.
|
|
173
|
+
*
|
|
174
|
+
* **{@link initialize} 전에 호출한다.** 셋 중 이것만은 순서가 권고가 아니라 요구다 —
|
|
175
|
+
* 아동 대상으로 선언하면 광고 식별자 전송이 차단되는데, 그 차단이 **초기화 요청부터**
|
|
176
|
+
* 걸려야 한다. 초기화 뒤에 부르면 첫 요청은 이미 식별자를 달고 나간 뒤다.
|
|
177
|
+
*/
|
|
178
|
+
export async function setCoppa(status: DaroCoppaStatus) {
|
|
179
|
+
await NativeDaroModule.setCoppa(status);
|
|
45
180
|
}
|