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
|
@@ -1,43 +1,46 @@
|
|
|
1
1
|
import React
|
|
2
2
|
|
|
3
|
-
extension
|
|
4
|
-
@objc(isRewardedAdReady
|
|
3
|
+
extension DaroRNModule {
|
|
4
|
+
@objc(isRewardedAdReady:adUnitId:resolve:reject:)
|
|
5
5
|
func isRewardedAdReady(
|
|
6
|
-
|
|
6
|
+
requestId: Double,
|
|
7
7
|
adUnitId: String,
|
|
8
8
|
resolve: RCTPromiseResolveBlock,
|
|
9
9
|
reject: RCTPromiseRejectBlock
|
|
10
10
|
) {
|
|
11
|
+
let requestId = Int(requestId)
|
|
11
12
|
if !Self.sdkInitialized {
|
|
12
|
-
|
|
13
|
+
DaroRNModule.logger.debug("[DaroRNMobileAds] !isInitialized")
|
|
13
14
|
resolve(false)
|
|
14
15
|
return
|
|
15
16
|
}
|
|
16
17
|
|
|
17
|
-
resolve(rewardedAds[requestId
|
|
18
|
+
resolve(rewardedAds[requestId]?.loadedAd != nil)
|
|
18
19
|
}
|
|
19
20
|
|
|
20
|
-
@objc(loadRewardedAd
|
|
21
|
+
@objc(loadRewardedAd:adUnitId:resolve:reject:)
|
|
21
22
|
func loadRewardedAd(
|
|
22
|
-
|
|
23
|
+
requestId: Double,
|
|
23
24
|
adUnitId: String,
|
|
24
25
|
resolve: RCTPromiseResolveBlock,
|
|
25
26
|
reject: RCTPromiseRejectBlock
|
|
26
27
|
) {
|
|
27
|
-
let
|
|
28
|
+
let requestId = Int(requestId)
|
|
29
|
+
let rewardedLoader = retrieveRewardedLoader(requestId: requestId, adUnitId: adUnitId)
|
|
28
30
|
rewardedLoader.loadAd()
|
|
29
31
|
resolve(Void())
|
|
30
32
|
}
|
|
31
33
|
|
|
32
|
-
@objc(showRewardedAd
|
|
34
|
+
@objc(showRewardedAd:adUnitId:customData:resolve:reject:)
|
|
33
35
|
func showRewardedAd(
|
|
34
|
-
|
|
36
|
+
requestId: Double,
|
|
35
37
|
adUnitId: String,
|
|
36
38
|
customData: String?,
|
|
37
39
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
38
40
|
reject: @escaping RCTPromiseRejectBlock
|
|
39
41
|
) {
|
|
40
|
-
|
|
42
|
+
let requestId = Int(requestId)
|
|
43
|
+
guard let loadedAd = rewardedAds[requestId]?.loadedAd else {
|
|
41
44
|
reject("REWARDED_AD_NOT_LOADED", "Rewarded ad not loaded", nil)
|
|
42
45
|
return
|
|
43
46
|
}
|
|
@@ -60,25 +63,25 @@ extension DaroMModule {
|
|
|
60
63
|
} else {
|
|
61
64
|
let rewardedAdLoader = DaroRewardedAdLoader(unit: DaroAdUnit(unitId: adUnitId))
|
|
62
65
|
rewardedAdLoader.listener.onAdClicked = { [weak self] adInfo in
|
|
63
|
-
|
|
66
|
+
DaroRNModule.logger.debug("[DARO] Sample Rewarded Ad clicked")
|
|
64
67
|
self?.sendEvent(with: .onRewardedAdClickedEvent, body: adInfo?.toBody(requestId: requestId))
|
|
65
68
|
}
|
|
66
69
|
|
|
67
70
|
rewardedAdLoader.listener.onAdImpression = { [weak self] adInfo in
|
|
68
|
-
|
|
71
|
+
DaroRNModule.logger.debug("[DARO] Sample Rewarded Ad impression")
|
|
69
72
|
self?.rewardedAds[requestId]?.loadedAd = nil
|
|
70
73
|
self?.sendEvent(with: .onRewardedAdImpressionRecordedEvent, body: adInfo?.toBody(requestId: requestId))
|
|
71
74
|
}
|
|
72
75
|
|
|
73
76
|
rewardedAdLoader.listener.onAdLoadSuccess = { [weak self] ad, adInfo in
|
|
74
|
-
|
|
77
|
+
DaroRNModule.logger.debug("[DARO] Sample Rewarded Ad loaded")
|
|
75
78
|
self?.rewardedAds[requestId]?.loadedAd = ad
|
|
76
79
|
self?.sendEvent(with: .onRewardedAdLoadedEvent, body: adInfo?.toBody(requestId: requestId))
|
|
77
80
|
self?.setupRewardedListener(for: ad, requestId: requestId)
|
|
78
81
|
}
|
|
79
82
|
|
|
80
83
|
rewardedAdLoader.listener.onAdLoadFail = { [weak self] error in
|
|
81
|
-
|
|
84
|
+
DaroRNModule.logger.debug("[DARO] Sample Rewarded Ad failed to load: \(error)")
|
|
82
85
|
self?.sendEvent(with: .onRewardedAdLoadFailedEvent, body: error.toBody(requestId: requestId))
|
|
83
86
|
}
|
|
84
87
|
self.rewardedAds[requestId] = RewardedAd(loader: rewardedAdLoader)
|
|
@@ -88,22 +91,22 @@ extension DaroMModule {
|
|
|
88
91
|
|
|
89
92
|
private func setupRewardedListener(for ad: DaroRewardedAd, requestId: Int) {
|
|
90
93
|
ad.rewardedAdListener.onShown = { [weak self] adInfo in
|
|
91
|
-
|
|
94
|
+
DaroRNModule.logger.debug("[DARO] Sample Rewarded Ad displayed")
|
|
92
95
|
self?.sendEvent(with: .onRewardedAdDisplayedEvent, body: adInfo?.toBody(requestId: requestId))
|
|
93
96
|
}
|
|
94
97
|
|
|
95
98
|
ad.rewardedAdListener.onDismiss = { [weak self] adInfo in
|
|
96
|
-
|
|
99
|
+
DaroRNModule.logger.debug("[DARO] Sample Rewarded Ad hidden")
|
|
97
100
|
self?.sendEvent(with: .onRewardedAdHiddenEvent, body: adInfo?.toBody(requestId: requestId))
|
|
98
101
|
}
|
|
99
102
|
|
|
100
103
|
ad.rewardedAdListener.onFailedToShow = { [weak self] adInfo, error in
|
|
101
|
-
|
|
104
|
+
DaroRNModule.logger.debug("[DARO] Sample Rewarded Ad failed to display: \(error)")
|
|
102
105
|
self?.sendEvent(with: .onRewardedAdFailedToDisplayEvent, body: adInfo?.toBody(requestId: requestId))
|
|
103
106
|
}
|
|
104
107
|
|
|
105
108
|
ad.rewardedAdListener.onEarnedReward = { [weak self] adInfo, rewardItem in
|
|
106
|
-
|
|
109
|
+
DaroRNModule.logger.debug("[DARO] Sample Rewarded Ad received reward")
|
|
107
110
|
self?.sendEvent(with: .onRewardedAdReceivedRewardEvent, body: rewardItem?.toBody(requestId: requestId, unitId: adInfo?.adUnitId ?? ""))
|
|
108
111
|
}
|
|
109
112
|
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
#import <React/RCTBridgeModule.h>
|
|
2
|
+
#import <React/RCTEventEmitter.h>
|
|
3
|
+
|
|
4
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
5
|
+
#import <DaroReactNativeSpec/DaroReactNativeSpec.h>
|
|
6
|
+
#endif
|
|
7
|
+
|
|
8
|
+
@interface RCT_EXTERN_MODULE (DaroRNModule, RCTEventEmitter)
|
|
9
|
+
|
|
10
|
+
#pragma mark - Initialization
|
|
11
|
+
|
|
12
|
+
RCT_EXTERN_METHOD(isInitialized:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
13
|
+
RCT_EXTERN_METHOD(initializeSdk:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
14
|
+
RCT_EXTERN_METHOD(setUserId:(NSString *)userId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
15
|
+
|
|
16
|
+
#pragma mark - Consent
|
|
17
|
+
|
|
18
|
+
RCT_EXTERN_METHOD(setGdpr:(NSString *)status consentString:(NSString *)consentString resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
19
|
+
RCT_EXTERN_METHOD(setCcpa:(NSString *)status consentString:(NSString *)consentString resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
20
|
+
RCT_EXTERN_METHOD(setCoppa:(NSString *)status resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
21
|
+
|
|
22
|
+
#pragma mark - Mediation Debugger
|
|
23
|
+
|
|
24
|
+
RCT_EXTERN_METHOD(showMediationDebugger:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
25
|
+
RCT_EXTERN_METHOD(showMediationDebuggerFor:(NSString *)mediation resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
26
|
+
|
|
27
|
+
#pragma mark - QA Surface
|
|
28
|
+
|
|
29
|
+
RCT_EXTERN_METHOD(getSdkVersion:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
30
|
+
RCT_EXTERN_METHOD(getMediationStatuses:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
31
|
+
RCT_EXTERN_METHOD(getMediationWeights:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
32
|
+
RCT_EXTERN_METHOD(getAdapterInventory:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
33
|
+
RCT_EXTERN_METHOD(getIntegrationKeyInfo:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
34
|
+
|
|
35
|
+
#pragma mark - Interstitial
|
|
36
|
+
|
|
37
|
+
RCT_EXTERN_METHOD(isInterstitialReady:(double)requestId adUnitId:(NSString *)adUnitId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
38
|
+
RCT_EXTERN_METHOD(loadInterstitial:(double)requestId adUnitId:(NSString *)adUnitId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
39
|
+
RCT_EXTERN_METHOD(showInterstitial:(double)requestId adUnitId:(NSString *)adUnitId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
40
|
+
|
|
41
|
+
#pragma mark - Rewarded
|
|
42
|
+
|
|
43
|
+
RCT_EXTERN_METHOD(isRewardedAdReady:(double)requestId adUnitId:(NSString *)adUnitId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
44
|
+
RCT_EXTERN_METHOD(loadRewardedAd:(double)requestId adUnitId:(NSString *)adUnitId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
45
|
+
RCT_EXTERN_METHOD(showRewardedAd:(double)requestId adUnitId:(NSString *)adUnitId customData:(nullable NSString *)customData resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
46
|
+
|
|
47
|
+
#pragma mark - AppOpen Ad
|
|
48
|
+
|
|
49
|
+
RCT_EXTERN_METHOD(isAppOpenAdReady:(double)requestId adUnitId:(NSString *)adUnitId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
50
|
+
RCT_EXTERN_METHOD(loadAppOpenAd:(double)requestId adUnitId:(NSString *)adUnitId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
51
|
+
RCT_EXTERN_METHOD(showAppOpenAd:(double)requestId adUnitId:(NSString *)adUnitId customData:(nullable NSString *)customData resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
52
|
+
|
|
53
|
+
#pragma mark - Light Popup
|
|
54
|
+
|
|
55
|
+
RCT_EXTERN_METHOD(isLightPopupReady:(double)requestId adUnitId:(NSString *)adUnitId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
56
|
+
RCT_EXTERN_METHOD(loadLightPopup:(double)requestId adUnitId:(NSString *)adUnitId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
57
|
+
RCT_EXTERN_METHOD(showLightPopup:(double)requestId adUnitId:(NSString *)adUnitId resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
58
|
+
RCT_EXTERN_METHOD(setLightPopupAdConfiguration:(double)requestId adUnitId:(NSString *)adUnitId configuration:(NSDictionary *)configuration resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject)
|
|
59
|
+
|
|
60
|
+
+ (BOOL)requiresMainQueueSetup {
|
|
61
|
+
return YES;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@end
|
|
65
|
+
|
|
66
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
67
|
+
|
|
68
|
+
@interface DaroRNModule (TurboModule) <RCTTurboModule>
|
|
69
|
+
@end
|
|
70
|
+
|
|
71
|
+
@implementation DaroRNModule (TurboModule)
|
|
72
|
+
|
|
73
|
+
- (facebook::react::ModuleConstants<JS::NativeDaroModule::Constants>)getConstants
|
|
74
|
+
{
|
|
75
|
+
NSDictionary *constants = [self constantsToExport] ?: @{};
|
|
76
|
+
return (facebook::react::ModuleConstants<JS::NativeDaroModule::Constants>)
|
|
77
|
+
[_RCTTypedModuleConstants newWithUnsafeDictionary:constants];
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
|
|
81
|
+
(const facebook::react::ObjCTurboModule::InitParams &)params
|
|
82
|
+
{
|
|
83
|
+
return std::make_shared<facebook::react::NativeDaroModuleSpecJSI>(params);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
@end
|
|
87
|
+
|
|
88
|
+
#endif
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import React
|
|
2
2
|
import os.log
|
|
3
3
|
|
|
4
|
-
@objc(
|
|
5
|
-
class
|
|
4
|
+
@objc(DaroRNModule)
|
|
5
|
+
class DaroRNModule: RCTEventEmitter {
|
|
6
6
|
|
|
7
7
|
// 중앙집중식 로거 - 다른 파일에서도 사용 가능
|
|
8
|
-
static let logger = Logger(subsystem: "com.
|
|
8
|
+
static let logger = Logger(subsystem: "com.daro.reactnative", category: "DaroRNModule")
|
|
9
9
|
|
|
10
10
|
enum Event: String, CaseIterable {
|
|
11
11
|
|
|
@@ -90,12 +90,12 @@ class DaroMModule: RCTEventEmitter {
|
|
|
90
90
|
|
|
91
91
|
// MARK: - SDK 초기화 및 설정
|
|
92
92
|
|
|
93
|
-
@objc(isInitialized
|
|
93
|
+
@objc(isInitialized:reject:)
|
|
94
94
|
func isInitialized(resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
|
|
95
95
|
resolve(Self.sdkInitialized)
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
@objc(initializeSdk
|
|
98
|
+
@objc(initializeSdk:reject:)
|
|
99
99
|
func initializeSdk(
|
|
100
100
|
resolve: @escaping RCTPromiseResolveBlock,
|
|
101
101
|
reject: @escaping RCTPromiseRejectBlock
|
|
@@ -121,14 +121,14 @@ class DaroMModule: RCTEventEmitter {
|
|
|
121
121
|
}
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
-
@objc(showMediationDebugger
|
|
124
|
+
@objc(showMediationDebugger:reject:)
|
|
125
125
|
func showMediationDebugger(resolve: @escaping RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
|
|
126
126
|
DaroMediationDebugger.show {
|
|
127
127
|
resolve(Void())
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
@objc(setUserId
|
|
131
|
+
@objc(setUserId:resolve:reject:)
|
|
132
132
|
func setUserId(userId: String, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) {
|
|
133
133
|
DaroAds.shared.userId = userId
|
|
134
134
|
resolve(Void())
|
|
@@ -172,7 +172,7 @@ class DaroMModule: RCTEventEmitter {
|
|
|
172
172
|
}
|
|
173
173
|
|
|
174
174
|
// MARK: - Constants
|
|
175
|
-
extension
|
|
175
|
+
extension DaroRNModule {
|
|
176
176
|
|
|
177
177
|
// https://reactnative.dev/docs/legacy/native-modules-ios#sending-events-to-javascript
|
|
178
178
|
// Sending Events to JavaScript
|
|
@@ -188,18 +188,32 @@ extension DaroMModule {
|
|
|
188
188
|
}
|
|
189
189
|
|
|
190
190
|
// MARK: - Helpers
|
|
191
|
-
extension
|
|
191
|
+
extension DaroRNModule {
|
|
192
192
|
func sendEvent(with event: Event, body: Any?) {
|
|
193
193
|
sendEvent(withName: event.rawValue, body: body)
|
|
194
194
|
}
|
|
195
195
|
}
|
|
196
196
|
|
|
197
197
|
extension DaroAdInfo {
|
|
198
|
+
// 모듈 경로와 뷰 경로(DaroRNBannerAdView·DaroRNNativeAdView)가 **둘 다 여기를 지난다.**
|
|
198
199
|
var toBody: [String: Any] {
|
|
199
|
-
|
|
200
|
+
var body: [String: Any] = [
|
|
200
201
|
"adUnitId": self.adUnitId,
|
|
201
202
|
"latencyMillis": self.latency as Any,
|
|
202
203
|
]
|
|
204
|
+
// 없을 때는 키를 넣지 않는다 — [String: Any] 에 nil 을 담으면 JS 에서 null 로
|
|
205
|
+
// 보이고, 타입은 옵셔널이라 undefined 여야 한다.
|
|
206
|
+
//
|
|
207
|
+
// SDK 가 정한 어휘를 **그대로** 넘긴다. 래퍼에서 매핑하지 않는다 — 발행 tarball 이
|
|
208
|
+
// android/ios 를 소스로 싣기 때문에 여기 매핑을 두면 그대로 읽힌다.
|
|
209
|
+
if let mediationPlatform = self.mediationPlatform {
|
|
210
|
+
body["mediationPlatform"] = mediationPlatform
|
|
211
|
+
}
|
|
212
|
+
// 벤더 어휘. 정규화하지 않는다 (AdMob responseInfo.adNetwork / AppLovin networkName).
|
|
213
|
+
if let adNetwork = self.adNetwork {
|
|
214
|
+
body["adNetwork"] = adNetwork
|
|
215
|
+
}
|
|
216
|
+
return body
|
|
203
217
|
}
|
|
204
218
|
|
|
205
219
|
func toBody(requestId: Int) -> [String: Any] {
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
#import <React/RCTDefines.h>
|
|
2
|
+
|
|
3
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
4
|
+
|
|
5
|
+
#import <React/RCTComponent.h>
|
|
6
|
+
#import <React/RCTFabricComponentsPlugins.h>
|
|
7
|
+
#import <React/RCTViewComponentView.h>
|
|
8
|
+
#import <react/renderer/components/DaroReactNativeSpec/ComponentDescriptors.h>
|
|
9
|
+
#import <react/renderer/components/DaroReactNativeSpec/EventEmitters.h>
|
|
10
|
+
#import <react/renderer/components/DaroReactNativeSpec/Props.h>
|
|
11
|
+
#import <react/renderer/components/DaroReactNativeSpec/RCTComponentViewHelpers.h>
|
|
12
|
+
#include <folly/dynamic.h>
|
|
13
|
+
#include <string>
|
|
14
|
+
|
|
15
|
+
using namespace facebook::react;
|
|
16
|
+
|
|
17
|
+
extern UIView *DaroRNFabricCreateSwiftView(NSString *className);
|
|
18
|
+
extern void DaroRNFabricSetValue(UIView *view, NSString *key, id value);
|
|
19
|
+
extern void DaroRNFabricPerformSelector(UIView *view, SEL selector);
|
|
20
|
+
extern void DaroRNFabricPerformSelectorWithObject(UIView *view, SEL selector, id object);
|
|
21
|
+
extern NSString *DaroRNFabricNSStringFromStdString(const std::string &value);
|
|
22
|
+
extern NSDictionary *DaroRNFabricEventBody(NSDictionary *body);
|
|
23
|
+
extern std::string DaroRNFabricEventString(NSDictionary *body, NSString *key);
|
|
24
|
+
extern double DaroRNFabricEventDouble(NSDictionary *body, NSString *key);
|
|
25
|
+
extern int DaroRNFabricEventInt(NSDictionary *body, NSString *key);
|
|
26
|
+
|
|
27
|
+
@interface DaroRNAdBannerViewComponentView : RCTViewComponentView <RCTDaroRNAdBannerViewViewProtocol>
|
|
28
|
+
@end
|
|
29
|
+
|
|
30
|
+
@implementation DaroRNAdBannerViewComponentView {
|
|
31
|
+
UIView *_bannerView;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
+ (void)load
|
|
35
|
+
{
|
|
36
|
+
[super load];
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
- (instancetype)initWithFrame:(CGRect)frame
|
|
40
|
+
{
|
|
41
|
+
if (self = [super initWithFrame:frame]) {
|
|
42
|
+
static const auto defaultProps = std::make_shared<const DaroRNAdBannerViewProps>();
|
|
43
|
+
_props = defaultProps;
|
|
44
|
+
[self createBannerView];
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return self;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
- (void)createBannerView
|
|
51
|
+
{
|
|
52
|
+
_bannerView = DaroRNFabricCreateSwiftView(@"DaroRNAdBannerView");
|
|
53
|
+
self.contentView = _bannerView;
|
|
54
|
+
[self installEventHandlers];
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
- (void)installEventHandlers
|
|
58
|
+
{
|
|
59
|
+
__weak DaroRNAdBannerViewComponentView *weakSelf = self;
|
|
60
|
+
|
|
61
|
+
RCTDirectEventBlock onAdLoadedEvent = ^(NSDictionary *body) {
|
|
62
|
+
DaroRNAdBannerViewComponentView *strongSelf = weakSelf;
|
|
63
|
+
if (!strongSelf) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
auto eventEmitter = std::static_pointer_cast<const DaroRNAdBannerViewEventEmitter>(strongSelf->_eventEmitter);
|
|
68
|
+
if (!eventEmitter) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
NSDictionary *eventBody = DaroRNFabricEventBody(body);
|
|
73
|
+
eventEmitter->onAdLoadedEvent({
|
|
74
|
+
.adUnitId = DaroRNFabricEventString(eventBody, @"adUnitId"),
|
|
75
|
+
.latencyMillis = DaroRNFabricEventDouble(eventBody, @"latencyMillis"),
|
|
76
|
+
// Fabric 이벤트는 타입 있는 구조체다 — **여기 안 적으면 네이티브가 보내도 JS 에 안 온다.**
|
|
77
|
+
// Android 는 맵을 통째로 넘겨서 안 걸린다. codegen 타입만 넓히면 부족하다.
|
|
78
|
+
.mediationPlatform = DaroRNFabricEventString(eventBody, @"mediationPlatform"),
|
|
79
|
+
.adNetwork = DaroRNFabricEventString(eventBody, @"adNetwork"),
|
|
80
|
+
});
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
RCTDirectEventBlock onAdLoadFailedEvent = ^(NSDictionary *body) {
|
|
84
|
+
DaroRNAdBannerViewComponentView *strongSelf = weakSelf;
|
|
85
|
+
if (!strongSelf) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
auto eventEmitter = std::static_pointer_cast<const DaroRNAdBannerViewEventEmitter>(strongSelf->_eventEmitter);
|
|
90
|
+
if (!eventEmitter) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
NSDictionary *eventBody = DaroRNFabricEventBody(body);
|
|
95
|
+
eventEmitter->onAdLoadFailedEvent({
|
|
96
|
+
.adUnitId = DaroRNFabricEventString(eventBody, @"adUnitId"),
|
|
97
|
+
.code = DaroRNFabricEventInt(eventBody, @"code"),
|
|
98
|
+
.message = DaroRNFabricEventString(eventBody, @"message"),
|
|
99
|
+
.latencyMillis = DaroRNFabricEventDouble(eventBody, @"latencyMillis"),
|
|
100
|
+
});
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
RCTDirectEventBlock onAdClickedEvent = ^(NSDictionary *body) {
|
|
104
|
+
DaroRNAdBannerViewComponentView *strongSelf = weakSelf;
|
|
105
|
+
if (!strongSelf) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
auto eventEmitter = std::static_pointer_cast<const DaroRNAdBannerViewEventEmitter>(strongSelf->_eventEmitter);
|
|
110
|
+
if (!eventEmitter) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
NSDictionary *eventBody = DaroRNFabricEventBody(body);
|
|
115
|
+
eventEmitter->onAdClickedEvent({
|
|
116
|
+
.adUnitId = DaroRNFabricEventString(eventBody, @"adUnitId"),
|
|
117
|
+
.latencyMillis = DaroRNFabricEventDouble(eventBody, @"latencyMillis"),
|
|
118
|
+
// Fabric 이벤트는 타입 있는 구조체다 — **여기 안 적으면 네이티브가 보내도 JS 에 안 온다.**
|
|
119
|
+
// Android 는 맵을 통째로 넘겨서 안 걸린다. codegen 타입만 넓히면 부족하다.
|
|
120
|
+
.mediationPlatform = DaroRNFabricEventString(eventBody, @"mediationPlatform"),
|
|
121
|
+
.adNetwork = DaroRNFabricEventString(eventBody, @"adNetwork"),
|
|
122
|
+
});
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
RCTDirectEventBlock onAdImpressionRecordedEvent = ^(NSDictionary *body) {
|
|
126
|
+
DaroRNAdBannerViewComponentView *strongSelf = weakSelf;
|
|
127
|
+
if (!strongSelf) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
auto eventEmitter = std::static_pointer_cast<const DaroRNAdBannerViewEventEmitter>(strongSelf->_eventEmitter);
|
|
132
|
+
if (!eventEmitter) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
NSDictionary *eventBody = DaroRNFabricEventBody(body);
|
|
137
|
+
eventEmitter->onAdImpressionRecordedEvent({
|
|
138
|
+
.adUnitId = DaroRNFabricEventString(eventBody, @"adUnitId"),
|
|
139
|
+
.latencyMillis = DaroRNFabricEventDouble(eventBody, @"latencyMillis"),
|
|
140
|
+
// Fabric 이벤트는 타입 있는 구조체다 — **여기 안 적으면 네이티브가 보내도 JS 에 안 온다.**
|
|
141
|
+
// Android 는 맵을 통째로 넘겨서 안 걸린다. codegen 타입만 넓히면 부족하다.
|
|
142
|
+
.mediationPlatform = DaroRNFabricEventString(eventBody, @"mediationPlatform"),
|
|
143
|
+
.adNetwork = DaroRNFabricEventString(eventBody, @"adNetwork"),
|
|
144
|
+
});
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
DaroRNFabricSetValue(_bannerView, @"onAdLoadedEvent", onAdLoadedEvent);
|
|
148
|
+
DaroRNFabricSetValue(_bannerView, @"onAdLoadFailedEvent", onAdLoadFailedEvent);
|
|
149
|
+
DaroRNFabricSetValue(_bannerView, @"onAdClickedEvent", onAdClickedEvent);
|
|
150
|
+
DaroRNFabricSetValue(_bannerView, @"onAdImpressionRecordedEvent", onAdImpressionRecordedEvent);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
+ (ComponentDescriptorProvider)componentDescriptorProvider
|
|
154
|
+
{
|
|
155
|
+
return concreteComponentDescriptorProvider<DaroRNAdBannerViewComponentDescriptor>();
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
- (void)updateProps:(const Props::Shared &)props oldProps:(const Props::Shared &)oldProps
|
|
159
|
+
{
|
|
160
|
+
const auto &oldComponentProps = *std::static_pointer_cast<const DaroRNAdBannerViewProps>(_props);
|
|
161
|
+
const auto &newComponentProps = *std::static_pointer_cast<const DaroRNAdBannerViewProps>(props);
|
|
162
|
+
NSMutableArray<NSString *> *changedProps = [NSMutableArray new];
|
|
163
|
+
|
|
164
|
+
if (oldComponentProps.adUnitId != newComponentProps.adUnitId) {
|
|
165
|
+
DaroRNFabricSetValue(_bannerView, @"adUnitId", DaroRNFabricNSStringFromStdString(newComponentProps.adUnitId));
|
|
166
|
+
[changedProps addObject:@"adUnitId"];
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (oldComponentProps.adFormat != newComponentProps.adFormat) {
|
|
170
|
+
DaroRNFabricSetValue(_bannerView, @"adFormat", DaroRNFabricNSStringFromStdString(newComponentProps.adFormat));
|
|
171
|
+
[changedProps addObject:@"adFormat"];
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
if (oldComponentProps.loadOnMount != newComponentProps.loadOnMount) {
|
|
175
|
+
DaroRNFabricSetValue(_bannerView, @"loadOnMount", @(newComponentProps.loadOnMount));
|
|
176
|
+
[changedProps addObject:@"loadOnMount"];
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
if (oldComponentProps.isVisible != newComponentProps.isVisible) {
|
|
180
|
+
DaroRNFabricSetValue(_bannerView, @"isVisible", @(newComponentProps.isVisible));
|
|
181
|
+
[changedProps addObject:@"isVisible"];
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
[super updateProps:props oldProps:oldProps];
|
|
185
|
+
|
|
186
|
+
DaroRNFabricPerformSelectorWithObject(_bannerView, NSSelectorFromString(@"applyReactProps:"), changedProps);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
- (void)loadAd
|
|
190
|
+
{
|
|
191
|
+
DaroRNFabricPerformSelector(_bannerView, NSSelectorFromString(@"loadAd"));
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
- (void)handleCommand:(const NSString *)commandName args:(const NSArray *)args
|
|
195
|
+
{
|
|
196
|
+
RCTDaroRNAdBannerViewHandleCommand(self, commandName, args);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
- (void)prepareForRecycle
|
|
200
|
+
{
|
|
201
|
+
[super prepareForRecycle];
|
|
202
|
+
DaroRNFabricSetValue(_bannerView, @"onAdLoadedEvent", nil);
|
|
203
|
+
DaroRNFabricSetValue(_bannerView, @"onAdLoadFailedEvent", nil);
|
|
204
|
+
DaroRNFabricSetValue(_bannerView, @"onAdClickedEvent", nil);
|
|
205
|
+
DaroRNFabricSetValue(_bannerView, @"onAdImpressionRecordedEvent", nil);
|
|
206
|
+
DaroRNFabricPerformSelector(_bannerView, NSSelectorFromString(@"prepareForReuse"));
|
|
207
|
+
[self installEventHandlers];
|
|
208
|
+
static const auto defaultProps = std::make_shared<const DaroRNAdBannerViewProps>();
|
|
209
|
+
_props = defaultProps;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
@end
|
|
213
|
+
|
|
214
|
+
Class<RCTComponentViewProtocol> DaroRNAdBannerViewCls(void)
|
|
215
|
+
{
|
|
216
|
+
return DaroRNAdBannerViewComponentView.class;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
#endif
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#import <React/RCTDefines.h>
|
|
2
|
+
|
|
3
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
4
|
+
|
|
5
|
+
#import <Foundation/Foundation.h>
|
|
6
|
+
#include <string>
|
|
7
|
+
|
|
8
|
+
NSDictionary *DaroRNFabricEventBody(NSDictionary *body)
|
|
9
|
+
{
|
|
10
|
+
return [body isKindOfClass:NSDictionary.class] ? body : @{};
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
std::string DaroRNFabricEventString(NSDictionary *body, NSString *key)
|
|
14
|
+
{
|
|
15
|
+
id value = body[key];
|
|
16
|
+
return [value isKindOfClass:NSString.class] ? std::string([value UTF8String]) : "";
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
double DaroRNFabricEventDouble(NSDictionary *body, NSString *key)
|
|
20
|
+
{
|
|
21
|
+
id value = body[key];
|
|
22
|
+
return [value respondsToSelector:@selector(doubleValue)] ? [value doubleValue] : 0;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
int DaroRNFabricEventInt(NSDictionary *body, NSString *key)
|
|
26
|
+
{
|
|
27
|
+
id value = body[key];
|
|
28
|
+
return [value respondsToSelector:@selector(intValue)] ? [value intValue] : 0;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
#endif
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
#import <React/RCTDefines.h>
|
|
2
|
+
|
|
3
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
4
|
+
|
|
5
|
+
#import <React/RCTLog.h>
|
|
6
|
+
#import <UIKit/UIKit.h>
|
|
7
|
+
#include <folly/dynamic.h>
|
|
8
|
+
#include <string>
|
|
9
|
+
|
|
10
|
+
static NSString *DaroRNFabricSetterNameForKey(NSString *key)
|
|
11
|
+
{
|
|
12
|
+
if (key.length == 0) {
|
|
13
|
+
return nil;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
NSString *first = [[key substringToIndex:1] uppercaseString];
|
|
17
|
+
NSString *rest = [key substringFromIndex:1];
|
|
18
|
+
return [NSString stringWithFormat:@"set%@%@:", first, rest];
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
void DaroRNFabricSetValue(UIView *view, NSString *key, id value)
|
|
22
|
+
{
|
|
23
|
+
SEL setter = NSSelectorFromString(DaroRNFabricSetterNameForKey(key));
|
|
24
|
+
if (![view respondsToSelector:setter]) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
[view setValue:value forKey:key];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
void DaroRNFabricPerformSelector(UIView *view, SEL selector)
|
|
32
|
+
{
|
|
33
|
+
if (![view respondsToSelector:selector]) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
IMP imp = [view methodForSelector:selector];
|
|
38
|
+
auto function = reinterpret_cast<void (*)(id, SEL)>(imp);
|
|
39
|
+
function(view, selector);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
void DaroRNFabricPerformSelectorWithObject(UIView *view, SEL selector, id object)
|
|
43
|
+
{
|
|
44
|
+
if (![view respondsToSelector:selector]) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
IMP imp = [view methodForSelector:selector];
|
|
49
|
+
auto function = reinterpret_cast<void (*)(id, SEL, id)>(imp);
|
|
50
|
+
function(view, selector, object);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
void DaroRNFabricPerformSelectorWithTwoObjects(UIView *view, SEL selector, id firstObject, id secondObject)
|
|
54
|
+
{
|
|
55
|
+
if (![view respondsToSelector:selector]) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
IMP imp = [view methodForSelector:selector];
|
|
60
|
+
auto function = reinterpret_cast<void (*)(id, SEL, id, id)>(imp);
|
|
61
|
+
function(view, selector, firstObject, secondObject);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
UIView *DaroRNFabricCreateSwiftView(NSString *className)
|
|
65
|
+
{
|
|
66
|
+
Class viewClass = NSClassFromString(className);
|
|
67
|
+
if (![viewClass isSubclassOfClass:UIView.class]) {
|
|
68
|
+
RCTLogError(@"%@ is not available as a UIView subclass.", className);
|
|
69
|
+
return [UIView new];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return [[viewClass alloc] init];
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
NSString *DaroRNFabricNSStringFromStdString(const std::string &value)
|
|
76
|
+
{
|
|
77
|
+
return [NSString stringWithUTF8String:value.c_str()];
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
static id DaroRNFabricNSObjectFromDynamic(const folly::dynamic &value)
|
|
81
|
+
{
|
|
82
|
+
switch (value.type()) {
|
|
83
|
+
case folly::dynamic::NULLT:
|
|
84
|
+
return (id)kCFNull;
|
|
85
|
+
case folly::dynamic::BOOL:
|
|
86
|
+
return value.getBool() ? @YES : @NO;
|
|
87
|
+
case folly::dynamic::INT64:
|
|
88
|
+
return @(value.getInt());
|
|
89
|
+
case folly::dynamic::DOUBLE:
|
|
90
|
+
return @(value.getDouble());
|
|
91
|
+
case folly::dynamic::STRING:
|
|
92
|
+
return [[NSString alloc] initWithBytes:value.c_str() length:value.size() encoding:NSUTF8StringEncoding];
|
|
93
|
+
case folly::dynamic::ARRAY: {
|
|
94
|
+
NSMutableArray *array = [[NSMutableArray alloc] initWithCapacity:value.size()];
|
|
95
|
+
for (const auto &item : value) {
|
|
96
|
+
id converted = DaroRNFabricNSObjectFromDynamic(item);
|
|
97
|
+
if (converted != nil) {
|
|
98
|
+
[array addObject:converted];
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return array;
|
|
102
|
+
}
|
|
103
|
+
case folly::dynamic::OBJECT: {
|
|
104
|
+
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] initWithCapacity:value.size()];
|
|
105
|
+
for (const auto &item : value.items()) {
|
|
106
|
+
id key = DaroRNFabricNSObjectFromDynamic(item.first);
|
|
107
|
+
id converted = DaroRNFabricNSObjectFromDynamic(item.second);
|
|
108
|
+
if (key != nil && converted != nil && [key conformsToProtocol:@protocol(NSCopying)]) {
|
|
109
|
+
dictionary[key] = converted;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return dictionary;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
id DaroRNFabricIdFromDynamic(const folly::dynamic &value)
|
|
118
|
+
{
|
|
119
|
+
id converted = DaroRNFabricNSObjectFromDynamic(value);
|
|
120
|
+
return converted == (id)kCFNull ? nil : converted;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
#endif
|