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,147 @@
|
|
|
1
|
+
package com.daro.reactnative.util
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import com.applovin.sdk.AppLovinSdk
|
|
5
|
+
import com.facebook.react.bridge.Arguments
|
|
6
|
+
import com.facebook.react.bridge.WritableArray
|
|
7
|
+
import com.facebook.react.bridge.WritableMap
|
|
8
|
+
import com.google.android.gms.ads.MobileAds
|
|
9
|
+
import com.google.android.gms.ads.VersionInfo
|
|
10
|
+
import com.google.android.gms.ads.initialization.AdapterStatus.State
|
|
11
|
+
import com.google.android.gms.ads.mediation.Adapter
|
|
12
|
+
import droom.daro.core.model.DaroMediationType
|
|
13
|
+
import droom.daro.core.routing.MediationReadiness
|
|
14
|
+
import java.util.concurrent.ConcurrentHashMap
|
|
15
|
+
|
|
16
|
+
// daro-android-qa 의 MediationStatusProbe 와 같은 축 — 초기화 판정은 라우팅이 쓰는
|
|
17
|
+
// SDK 값(@Keep MediationReadiness)을 그대로 읽고, 서브네트워크 어댑터 목록은 SDK 가
|
|
18
|
+
// 갖지 않으므로 벤더에 직접 묻는다. 여기서 다시 추론하면 화면과 실제 라우팅이 갈린다.
|
|
19
|
+
object DaroQaProbe {
|
|
20
|
+
|
|
21
|
+
// GMA 의 adapterStatusMap 은 초기화된 것만 담는다 — 탑재 여부는 클래스로,
|
|
22
|
+
// 버전은 어댑터에게, 초기화 상태는 맵에서 따로 읽는다.
|
|
23
|
+
private val ADMOB_ADAPTERS = listOf(
|
|
24
|
+
"AppLovin" to "com.google.ads.mediation.applovin.AppLovinMediationAdapter",
|
|
25
|
+
"DT Exchange" to "com.google.ads.mediation.fyber.FyberMediationAdapter",
|
|
26
|
+
"InMobi" to "com.google.ads.mediation.inmobi.InMobiMediationAdapter",
|
|
27
|
+
"LINE" to "com.google.ads.mediation.line.LineMediationAdapter",
|
|
28
|
+
"Meta" to "com.google.ads.mediation.facebook.FacebookMediationAdapter",
|
|
29
|
+
"Mintegral" to "com.google.ads.mediation.mintegral.MintegralMediationAdapter",
|
|
30
|
+
"Moloco" to "com.google.ads.mediation.moloco.MolocoMediationAdapter",
|
|
31
|
+
"Pangle" to "com.google.ads.mediation.pangle.PangleMediationAdapter",
|
|
32
|
+
"PubMatic" to "com.google.ads.mediation.pubmatic.PubMaticMediationAdapter",
|
|
33
|
+
"Unity Ads" to "com.google.ads.mediation.unity.UnityMediationAdapter",
|
|
34
|
+
"Vungle" to "com.google.ads.mediation.vungle.VungleMediationAdapter",
|
|
35
|
+
"ironSource" to "com.google.ads.mediation.ironsource.IronSourceMediationAdapter",
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
fun mediationStatuses(): WritableArray {
|
|
39
|
+
val statuses = Arguments.createArray()
|
|
40
|
+
listOf(DaroMediationType.Daro, DaroMediationType.DaroM).forEach { mediation ->
|
|
41
|
+
val ready = MediationReadiness.isReady(mediation)
|
|
42
|
+
statuses.pushMap(
|
|
43
|
+
Arguments.createMap().apply {
|
|
44
|
+
// **공개 어휘(publicName)를 쓴다** — `daroa`/`darom` (DARO-1587).
|
|
45
|
+
// 이 값은 getMediationStatuses() 로 소비자에게 나가므로 DaroAdInfo.mediationPlatform
|
|
46
|
+
// 과 같은 어휘여야 한다. 갈리면 한 앱 안에서 두 이름이 돌아다닌다.
|
|
47
|
+
// iOS 는 DaroMediationState 가 provider.publicName 을 쓰는 것과 같은 자리다.
|
|
48
|
+
putString("mediationPlatform", mediation.publicName)
|
|
49
|
+
putBoolean("isReady", ready == true)
|
|
50
|
+
putBoolean("hasFailed", ready == false)
|
|
51
|
+
}
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
return statuses
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
fun adapterInventory(context: Context): WritableMap =
|
|
58
|
+
Arguments.createMap().apply {
|
|
59
|
+
putArray("admob", adMobAdapters())
|
|
60
|
+
putArray("applovin", appLovinAdapters(context))
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
private fun adapterRow(name: String, detail: String, isReady: Boolean): WritableMap =
|
|
64
|
+
Arguments.createMap().apply {
|
|
65
|
+
putString("name", name)
|
|
66
|
+
putString("detail", detail)
|
|
67
|
+
putBoolean("isReady", isReady)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
private fun adMobAdapters(): WritableArray {
|
|
71
|
+
val initStates = runCatching {
|
|
72
|
+
MobileAds.getInitializationStatus()?.adapterStatusMap.orEmpty()
|
|
73
|
+
}.getOrDefault(emptyMap())
|
|
74
|
+
|
|
75
|
+
val rows = Arguments.createArray()
|
|
76
|
+
ADMOB_ADAPTERS.forEach { (name, className) ->
|
|
77
|
+
val version = adapterVersion(className)
|
|
78
|
+
val state = initStates[className]?.initializationState
|
|
79
|
+
rows.pushMap(
|
|
80
|
+
adapterRow(
|
|
81
|
+
name = name,
|
|
82
|
+
detail = when {
|
|
83
|
+
version == null -> "미탑재"
|
|
84
|
+
state == State.READY -> "$version · READY"
|
|
85
|
+
state == State.NOT_READY -> "$version · NOT_READY"
|
|
86
|
+
else -> "$version · 미초기화"
|
|
87
|
+
},
|
|
88
|
+
isReady = version != null,
|
|
89
|
+
)
|
|
90
|
+
)
|
|
91
|
+
}
|
|
92
|
+
return rows
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// 탑재된 어댑터의 버전은 바이너리가 정하므로 안 바뀐다 — 호출마다 12종을
|
|
96
|
+
// Class.forName + newInstance 하면 직렬화된 NativeModules 스레드를 잡아먹는다.
|
|
97
|
+
//
|
|
98
|
+
// **성공과 '진짜 미탑재'만 캐시한다.** 실패를 전부 캐시하면 다른 이유로 한 번 실패한
|
|
99
|
+
// 프로브가(벤더 SDK 로드 전 생성자 예외·클래스로더 문제) 프로세스 수명 동안 가짜
|
|
100
|
+
// '미탑재'로 굳는다 — 이 프로브가 배제하려던 오신호다. 반대로 아무것도 캐시하지
|
|
101
|
+
// 않으면 없는 어댑터마다 매 호출 ClassNotFoundException 을 던져(직렬 브리지 스레드다)
|
|
102
|
+
// 펼칠 때마다 12번 반복한다. 클래스 부재는 바이너리가 정하므로 그것만 캐시한다.
|
|
103
|
+
private val adapterVersionCache = ConcurrentHashMap<String, String>()
|
|
104
|
+
private val absentAdapters = ConcurrentHashMap.newKeySet<String>()
|
|
105
|
+
|
|
106
|
+
private fun adapterVersion(className: String): String? {
|
|
107
|
+
adapterVersionCache[className]?.let { return it }
|
|
108
|
+
if (className in absentAdapters) {
|
|
109
|
+
return null
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return try {
|
|
113
|
+
val adapter = Class.forName(className).getDeclaredConstructor().newInstance() as Adapter
|
|
114
|
+
adapter.versionInfo.format().also { adapterVersionCache[className] = it }
|
|
115
|
+
} catch (ignored: ClassNotFoundException) {
|
|
116
|
+
// 바이너리에 없다 — 이 프로세스에서 생길 리 없으니 기억한다.
|
|
117
|
+
absentAdapters.add(className)
|
|
118
|
+
null
|
|
119
|
+
} catch (ignored: Throwable) {
|
|
120
|
+
// 그 밖의 실패는 일시적일 수 있다 — 다음 조회에서 다시 시도한다.
|
|
121
|
+
null
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// GMA 는 4자리 어댑터 버전을 3필드에 담는다 — micro 가 "patch*100 + build" 다.
|
|
126
|
+
private fun VersionInfo.format() =
|
|
127
|
+
"$majorVersion.$minorVersion.${microVersion / 100}.${microVersion % 100}"
|
|
128
|
+
|
|
129
|
+
// MAX 는 어댑터별 초기화 상태를 내주지 않는다 — 실린 어댑터와 버전만 안다.
|
|
130
|
+
private fun appLovinAdapters(context: Context): WritableArray {
|
|
131
|
+
val rows = Arguments.createArray()
|
|
132
|
+
runCatching {
|
|
133
|
+
AppLovinSdk.getInstance(context).availableMediatedNetworks
|
|
134
|
+
.sortedBy { it.name }
|
|
135
|
+
.forEach {
|
|
136
|
+
rows.pushMap(
|
|
137
|
+
adapterRow(
|
|
138
|
+
name = it.name,
|
|
139
|
+
detail = it.adapterVersion.ifBlank { "미탑재" },
|
|
140
|
+
isReady = it.adapterVersion.isNotBlank(),
|
|
141
|
+
)
|
|
142
|
+
)
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return rows
|
|
146
|
+
}
|
|
147
|
+
}
|
|
@@ -1,24 +1,37 @@
|
|
|
1
1
|
package com.daro.reactnative.util
|
|
2
2
|
|
|
3
3
|
import android.view.View
|
|
4
|
-
import com.daro.reactnative.event.
|
|
4
|
+
import com.daro.reactnative.event.AdViewEvent
|
|
5
|
+
import com.daro.reactnative.event.DaroRNEvent
|
|
5
6
|
import com.facebook.react.bridge.ReactContext
|
|
6
7
|
import com.facebook.react.bridge.WritableMap
|
|
7
8
|
import com.facebook.react.modules.core.DeviceEventManagerModule
|
|
8
|
-
import com.facebook.react.uimanager.
|
|
9
|
+
import com.facebook.react.uimanager.UIManagerHelper
|
|
10
|
+
import com.facebook.react.uimanager.events.Event
|
|
9
11
|
|
|
10
12
|
internal object EventEmitterUtil {
|
|
11
13
|
// React Native Bridge
|
|
12
|
-
fun sendReactNativeEvent(reactContext: ReactContext, event:
|
|
14
|
+
fun sendReactNativeEvent(reactContext: ReactContext, event: DaroRNEvent, params: WritableMap?) {
|
|
13
15
|
reactContext
|
|
14
16
|
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
|
|
15
17
|
.emit(event.value, params)
|
|
16
18
|
}
|
|
17
19
|
|
|
18
|
-
fun View.sendNativeViewEvent(reactContext: ReactContext, event:
|
|
19
|
-
reactContext
|
|
20
|
-
|
|
21
|
-
.
|
|
20
|
+
fun View.sendNativeViewEvent(reactContext: ReactContext, event: AdViewEvent, params: WritableMap?) {
|
|
21
|
+
val eventDispatcher = UIManagerHelper.getEventDispatcherForReactTag(reactContext, id) ?: return
|
|
22
|
+
eventDispatcher.dispatchEvent(
|
|
23
|
+
AdViewDispatchedEvent(UIManagerHelper.getSurfaceId(reactContext), id, event, params)
|
|
24
|
+
)
|
|
22
25
|
}
|
|
23
26
|
}
|
|
24
27
|
|
|
28
|
+
private class AdViewDispatchedEvent(
|
|
29
|
+
surfaceId: Int,
|
|
30
|
+
viewId: Int,
|
|
31
|
+
private val event: AdViewEvent,
|
|
32
|
+
private val payload: WritableMap?,
|
|
33
|
+
) : Event<AdViewDispatchedEvent>(surfaceId, viewId) {
|
|
34
|
+
override fun getEventName() = event.value
|
|
35
|
+
|
|
36
|
+
override fun getEventData() = payload
|
|
37
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
package com.daro.reactnative.view
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.view.View
|
|
5
|
+
import android.view.ViewGroup
|
|
6
|
+
import android.view.ViewTreeObserver
|
|
7
|
+
import android.widget.FrameLayout
|
|
8
|
+
|
|
9
|
+
class DaroMediaView(context: Context) : FrameLayout(context) {
|
|
10
|
+
|
|
11
|
+
private var relayoutPending = false
|
|
12
|
+
private var scanZeroCount = 0
|
|
13
|
+
private var scanViewCount = 0
|
|
14
|
+
private var lastZeroSignature = 0L
|
|
15
|
+
private var zeroSizeRelayoutAttempts = 0
|
|
16
|
+
|
|
17
|
+
private companion object {
|
|
18
|
+
private const val MAX_ZERO_SIZE_RELAYOUT_ATTEMPTS = 3
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
private val relayoutRunnable = Runnable {
|
|
22
|
+
relayoutPending = false
|
|
23
|
+
relayoutChildren()
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
private val preDrawListener = ViewTreeObserver.OnPreDrawListener {
|
|
27
|
+
if (width > 0 && height > 0 && childCount > 0) {
|
|
28
|
+
scanZeroCount = 0
|
|
29
|
+
scanViewCount = 0
|
|
30
|
+
scanSubtree(this)
|
|
31
|
+
|
|
32
|
+
if (scanZeroCount == 0) {
|
|
33
|
+
lastZeroSignature = 0L
|
|
34
|
+
zeroSizeRelayoutAttempts = 0
|
|
35
|
+
} else {
|
|
36
|
+
val signature = (scanZeroCount.toLong() shl 32) or scanViewCount.toLong()
|
|
37
|
+
if (signature != lastZeroSignature) {
|
|
38
|
+
lastZeroSignature = signature
|
|
39
|
+
zeroSizeRelayoutAttempts = 0
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (zeroSizeRelayoutAttempts < MAX_ZERO_SIZE_RELAYOUT_ATTEMPTS) {
|
|
43
|
+
zeroSizeRelayoutAttempts++
|
|
44
|
+
relayoutChildren()
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
true
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
override fun requestLayout() {
|
|
52
|
+
super.requestLayout()
|
|
53
|
+
scheduleRelayout()
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
override fun onViewAdded(child: View?) {
|
|
57
|
+
super.onViewAdded(child)
|
|
58
|
+
relayoutChildren()
|
|
59
|
+
scheduleRelayout()
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
override fun onAttachedToWindow() {
|
|
63
|
+
super.onAttachedToWindow()
|
|
64
|
+
relayoutChildren()
|
|
65
|
+
relayoutPending = false
|
|
66
|
+
removeCallbacks(relayoutRunnable)
|
|
67
|
+
scheduleRelayout()
|
|
68
|
+
viewTreeObserver.addOnPreDrawListener(preDrawListener)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
override fun onDetachedFromWindow() {
|
|
72
|
+
viewTreeObserver.removeOnPreDrawListener(preDrawListener)
|
|
73
|
+
removeCallbacks(relayoutRunnable)
|
|
74
|
+
relayoutPending = false
|
|
75
|
+
super.onDetachedFromWindow()
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
private fun scheduleRelayout() {
|
|
79
|
+
lastZeroSignature = 0L
|
|
80
|
+
zeroSizeRelayoutAttempts = 0
|
|
81
|
+
|
|
82
|
+
if (relayoutPending) return
|
|
83
|
+
|
|
84
|
+
relayoutPending = true
|
|
85
|
+
post(relayoutRunnable)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
private fun relayoutChildren() {
|
|
89
|
+
val width = width
|
|
90
|
+
val height = height
|
|
91
|
+
|
|
92
|
+
if (width <= 0 || height <= 0) return
|
|
93
|
+
|
|
94
|
+
for (i in 0 until childCount) {
|
|
95
|
+
val child = getChildAt(i)
|
|
96
|
+
if (child.visibility == GONE) continue
|
|
97
|
+
|
|
98
|
+
forceLayoutRecursive(child)
|
|
99
|
+
child.measure(
|
|
100
|
+
MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
|
|
101
|
+
MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
|
|
102
|
+
)
|
|
103
|
+
child.layout(0, 0, width, height)
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
private fun forceLayoutRecursive(view: View) {
|
|
108
|
+
view.forceLayout()
|
|
109
|
+
if (view is ViewGroup) {
|
|
110
|
+
for (i in 0 until view.childCount) forceLayoutRecursive(view.getChildAt(i))
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
private fun scanSubtree(parent: ViewGroup) {
|
|
115
|
+
for (i in 0 until parent.childCount) {
|
|
116
|
+
val child = parent.getChildAt(i)
|
|
117
|
+
scanViewCount++
|
|
118
|
+
if (child.visibility != View.VISIBLE) continue
|
|
119
|
+
if (child.width <= 0 || child.height <= 0) scanZeroCount++
|
|
120
|
+
if (child is ViewGroup) scanSubtree(child)
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
@@ -22,7 +22,7 @@ import droom.daro.view.DaroAdViewListener
|
|
|
22
22
|
import droom.daro.view.DaroBannerAdView
|
|
23
23
|
|
|
24
24
|
@SuppressLint("ViewConstructor")
|
|
25
|
-
class
|
|
25
|
+
class DaroRNAdBannerViewContainer(val context: ReactContext) : ReactViewGroup(context),
|
|
26
26
|
DaroAdViewListener {
|
|
27
27
|
private companion object {
|
|
28
28
|
private const val MAX_PENDING_LOAD_RETRIES = 10
|
|
@@ -59,7 +59,7 @@ class DaroMAdBannerViewContainer(val context: ReactContext) : ReactViewGroup(con
|
|
|
59
59
|
ViewGroup.LayoutParams.MATCH_PARENT,
|
|
60
60
|
ViewGroup.LayoutParams.MATCH_PARENT,
|
|
61
61
|
)
|
|
62
|
-
this@
|
|
62
|
+
this@DaroRNAdBannerViewContainer.addView(this)
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
layoutAdView()
|
|
@@ -92,7 +92,6 @@ class DaroMAdBannerViewContainer(val context: ReactContext) : ReactViewGroup(con
|
|
|
92
92
|
context,
|
|
93
93
|
DaroBannerAdUnit(
|
|
94
94
|
key = adUnitId,
|
|
95
|
-
placement = adUnitId,
|
|
96
95
|
bannerSize = adSize!!,
|
|
97
96
|
)
|
|
98
97
|
).also { view ->
|