@javascriptcommon/react-native-google-mobile-ads 16.3.3
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/LICENSE +32 -0
- package/README.md +181 -0
- package/RNGoogleMobileAds.podspec +74 -0
- package/__tests__/banner.test.tsx +53 -0
- package/__tests__/consent.test.ts +33 -0
- package/__tests__/googleMobileAds.test.ts +108 -0
- package/__tests__/interstitial.test.ts +140 -0
- package/__tests__/nativeEventEmitter.test.ts +72 -0
- package/__tests__/requestOptions.test.tsx +82 -0
- package/__tests__/rewarded.test.tsx +4 -0
- package/__tests__/showOptions.test.tsx +4 -0
- package/android/.editorconfig +10 -0
- package/android/app-json.gradle +69 -0
- package/android/build.gradle +149 -0
- package/android/lint.xml +5 -0
- package/android/settings.gradle +1 -0
- package/android/src/main/AndroidManifest.xml +23 -0
- package/android/src/main/java/io/invertase/googlemobileads/OnNativeEvent.kt +23 -0
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeAppModule.java +152 -0
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsAppOpenModule.kt +92 -0
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsBannerAdViewManager.java +303 -0
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsCommon.java +277 -0
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsConsentModule.java +293 -0
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsEvent.java +76 -0
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsFullScreenAdModule.kt +201 -0
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsInterstitialModule.kt +92 -0
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsMediaViewManager.java +79 -0
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsModule.kt +178 -0
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsNativeAdViewManager.java +164 -0
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsNativeModule.kt +172 -0
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsPackage.kt +113 -0
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsRewardedInterstitialModule.kt +127 -0
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsRewardedModule.kt +121 -0
- package/android/src/main/java/io/invertase/googlemobileads/common/RCTConvert.java +111 -0
- package/android/src/main/java/io/invertase/googlemobileads/common/ReactNativeAdView.java +128 -0
- package/android/src/main/java/io/invertase/googlemobileads/common/ReactNativeApp.java +34 -0
- package/android/src/main/java/io/invertase/googlemobileads/common/ReactNativeEvent.java +41 -0
- package/android/src/main/java/io/invertase/googlemobileads/common/ReactNativeEventEmitter.java +150 -0
- package/android/src/main/java/io/invertase/googlemobileads/common/ReactNativeInitProvider.java +77 -0
- package/android/src/main/java/io/invertase/googlemobileads/common/ReactNativeJSON.java +107 -0
- package/android/src/main/java/io/invertase/googlemobileads/common/ReactNativeMeta.java +92 -0
- package/android/src/main/java/io/invertase/googlemobileads/common/ReactNativeModule.java +96 -0
- package/android/src/main/java/io/invertase/googlemobileads/common/ReactNativePreferences.java +86 -0
- package/android/src/main/java/io/invertase/googlemobileads/common/SharedUtils.java +429 -0
- package/android/src/main/java/io/invertase/googlemobileads/common/TaskExecutorService.java +124 -0
- package/android/src/main/java/io/invertase/googlemobileads/interfaces/ContextProvider.java +30 -0
- package/android/src/main/java/io/invertase/googlemobileads/interfaces/NativeError.java +28 -0
- package/android/src/main/java/io/invertase/googlemobileads/interfaces/NativeEvent.java +26 -0
- package/android/src/oldarch/com/facebook/react/viewmanagers/RNGoogleMobileAdsMediaViewManagerDelegate.java +32 -0
- package/android/src/oldarch/com/facebook/react/viewmanagers/RNGoogleMobileAdsMediaViewManagerInterface.java +10 -0
- package/android/src/oldarch/com/facebook/react/viewmanagers/RNGoogleMobileAdsNativeViewManagerDelegate.java +36 -0
- package/android/src/oldarch/com/facebook/react/viewmanagers/RNGoogleMobileAdsNativeViewManagerInterface.java +10 -0
- package/android/src/oldarch/io/invertase/googlemobileads/NativeGoogleMobileAdsNativeModuleSpec.kt +18 -0
- package/app.plugin.js +1 -0
- package/babel.config.js +8 -0
- package/docs/ad-inspector.mdx +47 -0
- package/docs/common-reasons-for-ads-not-showing.mdx +111 -0
- package/docs/displaying-ads-hook.mdx +103 -0
- package/docs/displaying-ads.mdx +512 -0
- package/docs/european-user-consent.mdx +315 -0
- package/docs/img/logo_admob_192px.svg +19 -0
- package/docs/impression-level-ad-revenue.mdx +41 -0
- package/docs/index.mdx +508 -0
- package/docs/mediation.mdx +323 -0
- package/docs/migrating-to-v15.mdx +7 -0
- package/docs/migrating-to-v5.mdx +63 -0
- package/docs/migrating-to-v6.mdx +111 -0
- package/docs/native-ads.mdx +385 -0
- package/docs/testing.mdx +17 -0
- package/docs/video-ad_volume-control.mdx +49 -0
- package/docs.json +36 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAds-Bridging-Header.h +5 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsAppOpenModule.h +36 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsAppOpenModule.mm +104 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsBannerComponent.h +44 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsBannerComponent.m +221 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsBannerView.h +34 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsBannerView.mm +282 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsBannerViewManager.mm +87 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsCommon.h +72 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsCommon.mm +248 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsConsentModule.h +36 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsConsentModule.mm +356 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsFullScreenAd.h +53 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsFullScreenAd.mm +220 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsFullScreenContentDelegate.h +36 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsFullScreenContentDelegate.mm +80 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsInterstitialModule.h +36 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsInterstitialModule.mm +106 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsMediaView.h +52 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsMediaView.mm +155 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsModule.h +32 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsModule.mm +180 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsNativeModule.h +35 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsNativeModule.mm +321 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsNativeView.h +51 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsNativeView.mm +251 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsRewardedInterstitialModule.h +37 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsRewardedInterstitialModule.mm +106 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsRewardedModule.h +36 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsRewardedModule.mm +104 -0
- package/ios/RNGoogleMobileAds/common/RNAppModule.h +24 -0
- package/ios/RNGoogleMobileAds/common/RNAppModule.mm +95 -0
- package/ios/RNGoogleMobileAds/common/RNRCTEventEmitter.h +73 -0
- package/ios/RNGoogleMobileAds/common/RNRCTEventEmitter.mm +150 -0
- package/ios/RNGoogleMobileAds/common/RNSharedUtils.h +43 -0
- package/ios/RNGoogleMobileAds/common/RNSharedUtils.mm +34 -0
- package/ios/RNGoogleMobileAds.xcodeproj/project.pbxproj +377 -0
- package/ios/RNGoogleMobileAds.xcodeproj/xcshareddata/IDETemplateMacros.plist +24 -0
- package/ios_config.sh +192 -0
- package/jest.config.js +7 -0
- package/jest.setup.ts +92 -0
- package/lib/commonjs/AdEventType.js +72 -0
- package/lib/commonjs/AdEventType.js.map +1 -0
- package/lib/commonjs/AdsConsent.js +117 -0
- package/lib/commonjs/AdsConsent.js.map +1 -0
- package/lib/commonjs/AdsConsentPurposes.js +180 -0
- package/lib/commonjs/AdsConsentPurposes.js.map +1 -0
- package/lib/commonjs/AdsConsentSpecialFeatures.js +54 -0
- package/lib/commonjs/AdsConsentSpecialFeatures.js.map +1 -0
- package/lib/commonjs/BannerAdSize.js +75 -0
- package/lib/commonjs/BannerAdSize.js.map +1 -0
- package/lib/commonjs/GAMAdEventType.js +44 -0
- package/lib/commonjs/GAMAdEventType.js.map +1 -0
- package/lib/commonjs/MaxAdContentRating.js +42 -0
- package/lib/commonjs/MaxAdContentRating.js.map +1 -0
- package/lib/commonjs/MobileAds.js +63 -0
- package/lib/commonjs/MobileAds.js.map +1 -0
- package/lib/commonjs/NativeAdEventType.js +50 -0
- package/lib/commonjs/NativeAdEventType.js.map +1 -0
- package/lib/commonjs/RewardedAdEventType.js +66 -0
- package/lib/commonjs/RewardedAdEventType.js.map +1 -0
- package/lib/commonjs/TestIds.js +66 -0
- package/lib/commonjs/TestIds.js.map +1 -0
- package/lib/commonjs/ads/AppOpenAd.js +54 -0
- package/lib/commonjs/ads/AppOpenAd.js.map +1 -0
- package/lib/commonjs/ads/BannerAd.js +45 -0
- package/lib/commonjs/ads/BannerAd.js.map +1 -0
- package/lib/commonjs/ads/BaseAd.js +155 -0
- package/lib/commonjs/ads/BaseAd.js.map +1 -0
- package/lib/commonjs/ads/GAMBannerAd.js +49 -0
- package/lib/commonjs/ads/GAMBannerAd.js.map +1 -0
- package/lib/commonjs/ads/GAMInterstitialAd.js +42 -0
- package/lib/commonjs/ads/GAMInterstitialAd.js.map +1 -0
- package/lib/commonjs/ads/InterstitialAd.js +115 -0
- package/lib/commonjs/ads/InterstitialAd.js.map +1 -0
- package/lib/commonjs/ads/MobileAd.js +153 -0
- package/lib/commonjs/ads/MobileAd.js.map +1 -0
- package/lib/commonjs/ads/RewardedAd.js +128 -0
- package/lib/commonjs/ads/RewardedAd.js.map +1 -0
- package/lib/commonjs/ads/RewardedInterstitialAd.js +128 -0
- package/lib/commonjs/ads/RewardedInterstitialAd.js.map +1 -0
- package/lib/commonjs/ads/native-ad/NativeAd.js +123 -0
- package/lib/commonjs/ads/native-ad/NativeAd.js.map +1 -0
- package/lib/commonjs/ads/native-ad/NativeAdContext.js +26 -0
- package/lib/commonjs/ads/native-ad/NativeAdContext.js.map +1 -0
- package/lib/commonjs/ads/native-ad/NativeAdView.js +52 -0
- package/lib/commonjs/ads/native-ad/NativeAdView.js.map +1 -0
- package/lib/commonjs/ads/native-ad/NativeAsset.js +70 -0
- package/lib/commonjs/ads/native-ad/NativeAsset.js.map +1 -0
- package/lib/commonjs/ads/native-ad/NativeMediaView.js +61 -0
- package/lib/commonjs/ads/native-ad/NativeMediaView.js.map +1 -0
- package/lib/commonjs/common/constants.js +17 -0
- package/lib/commonjs/common/constants.js.map +1 -0
- package/lib/commonjs/common/debounce.js +18 -0
- package/lib/commonjs/common/debounce.js.map +1 -0
- package/lib/commonjs/common/index.js +47 -0
- package/lib/commonjs/common/index.js.map +1 -0
- package/lib/commonjs/common/ref.js +46 -0
- package/lib/commonjs/common/ref.js.map +1 -0
- package/lib/commonjs/common/validate.js +132 -0
- package/lib/commonjs/common/validate.js.map +1 -0
- package/lib/commonjs/declarations.d.js +2 -0
- package/lib/commonjs/declarations.d.js.map +1 -0
- package/lib/commonjs/hooks/useAppOpenAd.js +44 -0
- package/lib/commonjs/hooks/useAppOpenAd.js.map +1 -0
- package/lib/commonjs/hooks/useForeground.js +45 -0
- package/lib/commonjs/hooks/useForeground.js.map +1 -0
- package/lib/commonjs/hooks/useFullScreenAd.js +121 -0
- package/lib/commonjs/hooks/useFullScreenAd.js.map +1 -0
- package/lib/commonjs/hooks/useInterstitialAd.js +44 -0
- package/lib/commonjs/hooks/useInterstitialAd.js.map +1 -0
- package/lib/commonjs/hooks/useRewardedAd.js +44 -0
- package/lib/commonjs/hooks/useRewardedAd.js.map +1 -0
- package/lib/commonjs/hooks/useRewardedInterstitialAd.js +44 -0
- package/lib/commonjs/hooks/useRewardedInterstitialAd.js.map +1 -0
- package/lib/commonjs/index.js +337 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/internal/GoogleMobileAdsNativeEventEmitter.js +54 -0
- package/lib/commonjs/internal/GoogleMobileAdsNativeEventEmitter.js.map +1 -0
- package/lib/commonjs/internal/NativeError.js +53 -0
- package/lib/commonjs/internal/NativeError.js.map +1 -0
- package/lib/commonjs/internal/SharedEventEmitter.js +27 -0
- package/lib/commonjs/internal/SharedEventEmitter.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/specs/components/GoogleMobileAdsBannerViewNativeComponent.ts +62 -0
- package/lib/commonjs/specs/components/GoogleMobileAdsMediaViewNativeComponent.ts +30 -0
- package/lib/commonjs/specs/components/GoogleMobileAdsNativeViewNativeComponent.ts +45 -0
- package/lib/commonjs/specs/modules/NativeAppModule.js +24 -0
- package/lib/commonjs/specs/modules/NativeAppModule.js.map +1 -0
- package/lib/commonjs/specs/modules/NativeAppOpenModule.js +25 -0
- package/lib/commonjs/specs/modules/NativeAppOpenModule.js.map +1 -0
- package/lib/commonjs/specs/modules/NativeConsentModule.js +105 -0
- package/lib/commonjs/specs/modules/NativeConsentModule.js.map +1 -0
- package/lib/commonjs/specs/modules/NativeGoogleMobileAdsModule.js +25 -0
- package/lib/commonjs/specs/modules/NativeGoogleMobileAdsModule.js.map +1 -0
- package/lib/commonjs/specs/modules/NativeGoogleMobileAdsNativeModule.js +25 -0
- package/lib/commonjs/specs/modules/NativeGoogleMobileAdsNativeModule.js.map +1 -0
- package/lib/commonjs/specs/modules/NativeInterstitialModule.js +25 -0
- package/lib/commonjs/specs/modules/NativeInterstitialModule.js.map +1 -0
- package/lib/commonjs/specs/modules/NativeRewardedInterstitialModule.js +25 -0
- package/lib/commonjs/specs/modules/NativeRewardedInterstitialModule.js.map +1 -0
- package/lib/commonjs/specs/modules/NativeRewardedModule.js +25 -0
- package/lib/commonjs/specs/modules/NativeRewardedModule.js.map +1 -0
- package/lib/commonjs/types/AdEventListener.js +6 -0
- package/lib/commonjs/types/AdEventListener.js.map +1 -0
- package/lib/commonjs/types/AdEventsListener.js +6 -0
- package/lib/commonjs/types/AdEventsListener.js.map +1 -0
- package/lib/commonjs/types/AdShowOptions.js +2 -0
- package/lib/commonjs/types/AdShowOptions.js.map +1 -0
- package/lib/commonjs/types/AdStates.js +6 -0
- package/lib/commonjs/types/AdStates.js.map +1 -0
- package/lib/commonjs/types/AdapterStatus.js +21 -0
- package/lib/commonjs/types/AdapterStatus.js.map +1 -0
- package/lib/commonjs/types/AppEvent.js +2 -0
- package/lib/commonjs/types/AppEvent.js.map +1 -0
- package/lib/commonjs/types/BannerAdProps.js +6 -0
- package/lib/commonjs/types/BannerAdProps.js.map +1 -0
- package/lib/commonjs/types/MobileAd.interface.js +6 -0
- package/lib/commonjs/types/MobileAd.interface.js.map +1 -0
- package/lib/commonjs/types/MobileAdsModule.interface.js +6 -0
- package/lib/commonjs/types/MobileAdsModule.interface.js.map +1 -0
- package/lib/commonjs/types/NativeAdRequestOptions.js +37 -0
- package/lib/commonjs/types/NativeAdRequestOptions.js.map +1 -0
- package/lib/commonjs/types/PaidEventListener.js +6 -0
- package/lib/commonjs/types/PaidEventListener.js.map +1 -0
- package/lib/commonjs/types/RequestConfiguration.js +6 -0
- package/lib/commonjs/types/RequestConfiguration.js.map +1 -0
- package/lib/commonjs/types/RequestOptions.js +2 -0
- package/lib/commonjs/types/RequestOptions.js.map +1 -0
- package/lib/commonjs/types/RewardedAdReward.js +2 -0
- package/lib/commonjs/types/RewardedAdReward.js.map +1 -0
- package/lib/commonjs/types/index.js +138 -0
- package/lib/commonjs/types/index.js.map +1 -0
- package/lib/commonjs/validateAdRequestConfiguration.js +57 -0
- package/lib/commonjs/validateAdRequestConfiguration.js.map +1 -0
- package/lib/commonjs/validateAdRequestOptions.js +121 -0
- package/lib/commonjs/validateAdRequestOptions.js.map +1 -0
- package/lib/commonjs/validateAdShowOptions.js +41 -0
- package/lib/commonjs/validateAdShowOptions.js.map +1 -0
- package/lib/commonjs/validateNativeAdRequestOptions.js +51 -0
- package/lib/commonjs/validateNativeAdRequestOptions.js.map +1 -0
- package/lib/commonjs/version.js +9 -0
- package/lib/commonjs/version.js.map +1 -0
- package/lib/module/AdEventType.js +69 -0
- package/lib/module/AdEventType.js.map +1 -0
- package/lib/module/AdsConsent.js +113 -0
- package/lib/module/AdsConsent.js.map +1 -0
- package/lib/module/AdsConsentPurposes.js +177 -0
- package/lib/module/AdsConsentPurposes.js.map +1 -0
- package/lib/module/AdsConsentSpecialFeatures.js +51 -0
- package/lib/module/AdsConsentSpecialFeatures.js.map +1 -0
- package/lib/module/BannerAdSize.js +72 -0
- package/lib/module/BannerAdSize.js.map +1 -0
- package/lib/module/GAMAdEventType.js +41 -0
- package/lib/module/GAMAdEventType.js.map +1 -0
- package/lib/module/MaxAdContentRating.js +39 -0
- package/lib/module/MaxAdContentRating.js.map +1 -0
- package/lib/module/MobileAds.js +57 -0
- package/lib/module/MobileAds.js.map +1 -0
- package/lib/module/NativeAdEventType.js +46 -0
- package/lib/module/NativeAdEventType.js.map +1 -0
- package/lib/module/RewardedAdEventType.js +63 -0
- package/lib/module/RewardedAdEventType.js.map +1 -0
- package/lib/module/TestIds.js +62 -0
- package/lib/module/TestIds.js.map +1 -0
- package/lib/module/ads/AppOpenAd.js +48 -0
- package/lib/module/ads/AppOpenAd.js.map +1 -0
- package/lib/module/ads/BannerAd.js +39 -0
- package/lib/module/ads/BannerAd.js.map +1 -0
- package/lib/module/ads/BaseAd.js +149 -0
- package/lib/module/ads/BaseAd.js.map +1 -0
- package/lib/module/ads/GAMBannerAd.js +43 -0
- package/lib/module/ads/GAMBannerAd.js.map +1 -0
- package/lib/module/ads/GAMInterstitialAd.js +37 -0
- package/lib/module/ads/GAMInterstitialAd.js.map +1 -0
- package/lib/module/ads/InterstitialAd.js +110 -0
- package/lib/module/ads/InterstitialAd.js.map +1 -0
- package/lib/module/ads/MobileAd.js +148 -0
- package/lib/module/ads/MobileAd.js.map +1 -0
- package/lib/module/ads/RewardedAd.js +123 -0
- package/lib/module/ads/RewardedAd.js.map +1 -0
- package/lib/module/ads/RewardedInterstitialAd.js +123 -0
- package/lib/module/ads/RewardedInterstitialAd.js.map +1 -0
- package/lib/module/ads/native-ad/NativeAd.js +117 -0
- package/lib/module/ads/native-ad/NativeAd.js.map +1 -0
- package/lib/module/ads/native-ad/NativeAdContext.js +22 -0
- package/lib/module/ads/native-ad/NativeAdContext.js.map +1 -0
- package/lib/module/ads/native-ad/NativeAdView.js +45 -0
- package/lib/module/ads/native-ad/NativeAdView.js.map +1 -0
- package/lib/module/ads/native-ad/NativeAsset.js +65 -0
- package/lib/module/ads/native-ad/NativeAsset.js.map +1 -0
- package/lib/module/ads/native-ad/NativeMediaView.js +54 -0
- package/lib/module/ads/native-ad/NativeMediaView.js.map +1 -0
- package/lib/module/common/constants.js +13 -0
- package/lib/module/common/constants.js.map +1 -0
- package/lib/module/common/debounce.js +13 -0
- package/lib/module/common/debounce.js.map +1 -0
- package/lib/module/common/index.js +28 -0
- package/lib/module/common/index.js.map +1 -0
- package/lib/module/common/ref.js +41 -0
- package/lib/module/common/ref.js.map +1 -0
- package/lib/module/common/validate.js +119 -0
- package/lib/module/common/validate.js.map +1 -0
- package/lib/module/declarations.d.js +2 -0
- package/lib/module/declarations.d.js.map +1 -0
- package/lib/module/hooks/useAppOpenAd.js +40 -0
- package/lib/module/hooks/useAppOpenAd.js.map +1 -0
- package/lib/module/hooks/useForeground.js +42 -0
- package/lib/module/hooks/useForeground.js.map +1 -0
- package/lib/module/hooks/useFullScreenAd.js +117 -0
- package/lib/module/hooks/useFullScreenAd.js.map +1 -0
- package/lib/module/hooks/useInterstitialAd.js +40 -0
- package/lib/module/hooks/useInterstitialAd.js.map +1 -0
- package/lib/module/hooks/useRewardedAd.js +40 -0
- package/lib/module/hooks/useRewardedAd.js.map +1 -0
- package/lib/module/hooks/useRewardedInterstitialAd.js +40 -0
- package/lib/module/hooks/useRewardedInterstitialAd.js.map +1 -0
- package/lib/module/index.js +54 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/internal/GoogleMobileAdsNativeEventEmitter.js +49 -0
- package/lib/module/internal/GoogleMobileAdsNativeEventEmitter.js.map +1 -0
- package/lib/module/internal/NativeError.js +48 -0
- package/lib/module/internal/NativeError.js.map +1 -0
- package/lib/module/internal/SharedEventEmitter.js +22 -0
- package/lib/module/internal/SharedEventEmitter.js.map +1 -0
- package/lib/module/specs/components/GoogleMobileAdsBannerViewNativeComponent.ts +62 -0
- package/lib/module/specs/components/GoogleMobileAdsMediaViewNativeComponent.ts +30 -0
- package/lib/module/specs/components/GoogleMobileAdsNativeViewNativeComponent.ts +45 -0
- package/lib/module/specs/modules/NativeAppModule.js +21 -0
- package/lib/module/specs/modules/NativeAppModule.js.map +1 -0
- package/lib/module/specs/modules/NativeAppOpenModule.js +22 -0
- package/lib/module/specs/modules/NativeAppOpenModule.js.map +1 -0
- package/lib/module/specs/modules/NativeConsentModule.js +108 -0
- package/lib/module/specs/modules/NativeConsentModule.js.map +1 -0
- package/lib/module/specs/modules/NativeGoogleMobileAdsModule.js +22 -0
- package/lib/module/specs/modules/NativeGoogleMobileAdsModule.js.map +1 -0
- package/lib/module/specs/modules/NativeGoogleMobileAdsNativeModule.js +22 -0
- package/lib/module/specs/modules/NativeGoogleMobileAdsNativeModule.js.map +1 -0
- package/lib/module/specs/modules/NativeInterstitialModule.js +22 -0
- package/lib/module/specs/modules/NativeInterstitialModule.js.map +1 -0
- package/lib/module/specs/modules/NativeRewardedInterstitialModule.js +22 -0
- package/lib/module/specs/modules/NativeRewardedInterstitialModule.js.map +1 -0
- package/lib/module/specs/modules/NativeRewardedModule.js +22 -0
- package/lib/module/specs/modules/NativeRewardedModule.js.map +1 -0
- package/lib/module/types/AdEventListener.js +4 -0
- package/lib/module/types/AdEventListener.js.map +1 -0
- package/lib/module/types/AdEventsListener.js +4 -0
- package/lib/module/types/AdEventsListener.js.map +1 -0
- package/lib/module/types/AdShowOptions.js +2 -0
- package/lib/module/types/AdShowOptions.js.map +1 -0
- package/lib/module/types/AdStates.js +4 -0
- package/lib/module/types/AdStates.js.map +1 -0
- package/lib/module/types/AdapterStatus.js +18 -0
- package/lib/module/types/AdapterStatus.js.map +1 -0
- package/lib/module/types/AppEvent.js +2 -0
- package/lib/module/types/AppEvent.js.map +1 -0
- package/lib/module/types/BannerAdProps.js +4 -0
- package/lib/module/types/BannerAdProps.js.map +1 -0
- package/lib/module/types/MobileAd.interface.js +4 -0
- package/lib/module/types/MobileAd.interface.js.map +1 -0
- package/lib/module/types/MobileAdsModule.interface.js +4 -0
- package/lib/module/types/MobileAdsModule.interface.js.map +1 -0
- package/lib/module/types/NativeAdRequestOptions.js +34 -0
- package/lib/module/types/NativeAdRequestOptions.js.map +1 -0
- package/lib/module/types/PaidEventListener.js +4 -0
- package/lib/module/types/PaidEventListener.js.map +1 -0
- package/lib/module/types/RequestConfiguration.js +4 -0
- package/lib/module/types/RequestConfiguration.js.map +1 -0
- package/lib/module/types/RequestOptions.js +2 -0
- package/lib/module/types/RequestOptions.js.map +1 -0
- package/lib/module/types/RewardedAdReward.js +2 -0
- package/lib/module/types/RewardedAdReward.js.map +1 -0
- package/lib/module/types/index.js +32 -0
- package/lib/module/types/index.js.map +1 -0
- package/lib/module/validateAdRequestConfiguration.js +53 -0
- package/lib/module/validateAdRequestConfiguration.js.map +1 -0
- package/lib/module/validateAdRequestOptions.js +117 -0
- package/lib/module/validateAdRequestOptions.js.map +1 -0
- package/lib/module/validateAdShowOptions.js +37 -0
- package/lib/module/validateAdShowOptions.js.map +1 -0
- package/lib/module/validateNativeAdRequestOptions.js +47 -0
- package/lib/module/validateNativeAdRequestOptions.js.map +1 -0
- package/lib/module/version.js +5 -0
- package/lib/module/version.js.map +1 -0
- package/lib/typescript/AdEventType.d.ts +49 -0
- package/lib/typescript/AdEventType.d.ts.map +1 -0
- package/lib/typescript/AdsConsent.d.ts +3 -0
- package/lib/typescript/AdsConsent.d.ts.map +1 -0
- package/lib/typescript/AdsConsentPurposes.d.ts +149 -0
- package/lib/typescript/AdsConsentPurposes.d.ts.map +1 -0
- package/lib/typescript/AdsConsentSpecialFeatures.d.ts +23 -0
- package/lib/typescript/AdsConsentSpecialFeatures.d.ts.map +1 -0
- package/lib/typescript/BannerAdSize.d.ts +91 -0
- package/lib/typescript/BannerAdSize.d.ts.map +1 -0
- package/lib/typescript/GAMAdEventType.d.ts +21 -0
- package/lib/typescript/GAMAdEventType.d.ts.map +1 -0
- package/lib/typescript/MaxAdContentRating.d.ts +19 -0
- package/lib/typescript/MaxAdContentRating.d.ts.map +1 -0
- package/lib/typescript/MobileAds.d.ts +15 -0
- package/lib/typescript/MobileAds.d.ts.map +1 -0
- package/lib/typescript/NativeAdEventType.d.ts +43 -0
- package/lib/typescript/NativeAdEventType.d.ts.map +1 -0
- package/lib/typescript/RewardedAdEventType.d.ts +43 -0
- package/lib/typescript/RewardedAdEventType.d.ts.map +1 -0
- package/lib/typescript/TestIds.d.ts +19 -0
- package/lib/typescript/TestIds.d.ts.map +1 -0
- package/lib/typescript/ads/AppOpenAd.d.ts +12 -0
- package/lib/typescript/ads/AppOpenAd.d.ts.map +1 -0
- package/lib/typescript/ads/BannerAd.d.ts +8 -0
- package/lib/typescript/ads/BannerAd.d.ts.map +1 -0
- package/lib/typescript/ads/BaseAd.d.ts +4 -0
- package/lib/typescript/ads/BaseAd.d.ts.map +1 -0
- package/lib/typescript/ads/GAMBannerAd.d.ts +9 -0
- package/lib/typescript/ads/GAMBannerAd.d.ts.map +1 -0
- package/lib/typescript/ads/GAMInterstitialAd.d.ts +34 -0
- package/lib/typescript/ads/GAMInterstitialAd.d.ts.map +1 -0
- package/lib/typescript/ads/InterstitialAd.d.ts +73 -0
- package/lib/typescript/ads/InterstitialAd.d.ts.map +1 -0
- package/lib/typescript/ads/MobileAd.d.ts +54 -0
- package/lib/typescript/ads/MobileAd.d.ts.map +1 -0
- package/lib/typescript/ads/RewardedAd.d.ts +83 -0
- package/lib/typescript/ads/RewardedAd.d.ts.map +1 -0
- package/lib/typescript/ads/RewardedInterstitialAd.d.ts +83 -0
- package/lib/typescript/ads/RewardedInterstitialAd.d.ts.map +1 -0
- package/lib/typescript/ads/native-ad/NativeAd.d.ts +48 -0
- package/lib/typescript/ads/native-ad/NativeAd.d.ts.map +1 -0
- package/lib/typescript/ads/native-ad/NativeAdContext.d.ts +10 -0
- package/lib/typescript/ads/native-ad/NativeAdContext.d.ts.map +1 -0
- package/lib/typescript/ads/native-ad/NativeAdView.d.ts +8 -0
- package/lib/typescript/ads/native-ad/NativeAdView.d.ts.map +1 -0
- package/lib/typescript/ads/native-ad/NativeAsset.d.ts +18 -0
- package/lib/typescript/ads/native-ad/NativeAsset.d.ts.map +1 -0
- package/lib/typescript/ads/native-ad/NativeMediaView.d.ts +7 -0
- package/lib/typescript/ads/native-ad/NativeMediaView.d.ts.map +1 -0
- package/lib/typescript/common/constants.d.ts +7 -0
- package/lib/typescript/common/constants.d.ts.map +1 -0
- package/lib/typescript/common/debounce.d.ts +2 -0
- package/lib/typescript/common/debounce.d.ts.map +1 -0
- package/lib/typescript/common/index.d.ts +4 -0
- package/lib/typescript/common/index.d.ts.map +1 -0
- package/lib/typescript/common/ref.d.ts +13 -0
- package/lib/typescript/common/ref.d.ts.map +1 -0
- package/lib/typescript/common/validate.d.ts +62 -0
- package/lib/typescript/common/validate.d.ts.map +1 -0
- package/lib/typescript/hooks/useAppOpenAd.d.ts +10 -0
- package/lib/typescript/hooks/useAppOpenAd.d.ts.map +1 -0
- package/lib/typescript/hooks/useForeground.d.ts +7 -0
- package/lib/typescript/hooks/useForeground.d.ts.map +1 -0
- package/lib/typescript/hooks/useFullScreenAd.d.ts +7 -0
- package/lib/typescript/hooks/useFullScreenAd.d.ts.map +1 -0
- package/lib/typescript/hooks/useInterstitialAd.d.ts +10 -0
- package/lib/typescript/hooks/useInterstitialAd.d.ts.map +1 -0
- package/lib/typescript/hooks/useRewardedAd.d.ts +10 -0
- package/lib/typescript/hooks/useRewardedAd.d.ts.map +1 -0
- package/lib/typescript/hooks/useRewardedInterstitialAd.d.ts +10 -0
- package/lib/typescript/hooks/useRewardedInterstitialAd.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +32 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/internal/GoogleMobileAdsNativeEventEmitter.d.ts +13 -0
- package/lib/typescript/internal/GoogleMobileAdsNativeEventEmitter.d.ts.map +1 -0
- package/lib/typescript/internal/NativeError.d.ts +27 -0
- package/lib/typescript/internal/NativeError.d.ts.map +1 -0
- package/lib/typescript/internal/SharedEventEmitter.d.ts +3 -0
- package/lib/typescript/internal/SharedEventEmitter.d.ts.map +1 -0
- package/lib/typescript/specs/components/GoogleMobileAdsBannerViewNativeComponent.d.ts +35 -0
- package/lib/typescript/specs/components/GoogleMobileAdsBannerViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/specs/components/GoogleMobileAdsMediaViewNativeComponent.d.ts +9 -0
- package/lib/typescript/specs/components/GoogleMobileAdsMediaViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/specs/components/GoogleMobileAdsNativeViewNativeComponent.d.ts +14 -0
- package/lib/typescript/specs/components/GoogleMobileAdsNativeViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/specs/modules/NativeAppModule.d.ts +23 -0
- package/lib/typescript/specs/modules/NativeAppModule.d.ts.map +1 -0
- package/lib/typescript/specs/modules/NativeAppOpenModule.d.ts +25 -0
- package/lib/typescript/specs/modules/NativeAppOpenModule.d.ts.map +1 -0
- package/lib/typescript/specs/modules/NativeConsentModule.d.ts +498 -0
- package/lib/typescript/specs/modules/NativeConsentModule.d.ts.map +1 -0
- package/lib/typescript/specs/modules/NativeGoogleMobileAdsModule.d.ts +14 -0
- package/lib/typescript/specs/modules/NativeGoogleMobileAdsModule.d.ts.map +1 -0
- package/lib/typescript/specs/modules/NativeGoogleMobileAdsNativeModule.d.ts +42 -0
- package/lib/typescript/specs/modules/NativeGoogleMobileAdsNativeModule.d.ts.map +1 -0
- package/lib/typescript/specs/modules/NativeInterstitialModule.d.ts +25 -0
- package/lib/typescript/specs/modules/NativeInterstitialModule.d.ts.map +1 -0
- package/lib/typescript/specs/modules/NativeRewardedInterstitialModule.d.ts +25 -0
- package/lib/typescript/specs/modules/NativeRewardedInterstitialModule.d.ts.map +1 -0
- package/lib/typescript/specs/modules/NativeRewardedModule.d.ts +25 -0
- package/lib/typescript/specs/modules/NativeRewardedModule.d.ts.map +1 -0
- package/lib/typescript/types/AdEventListener.d.ts +8 -0
- package/lib/typescript/types/AdEventListener.d.ts.map +1 -0
- package/lib/typescript/types/AdEventsListener.d.ts +9 -0
- package/lib/typescript/types/AdEventsListener.d.ts.map +1 -0
- package/lib/typescript/types/AdShowOptions.d.ts +13 -0
- package/lib/typescript/types/AdShowOptions.d.ts.map +1 -0
- package/lib/typescript/types/AdStates.d.ts +91 -0
- package/lib/typescript/types/AdStates.d.ts.map +1 -0
- package/lib/typescript/types/AdapterStatus.d.ts +19 -0
- package/lib/typescript/types/AdapterStatus.d.ts.map +1 -0
- package/lib/typescript/types/AppEvent.d.ts +14 -0
- package/lib/typescript/types/AppEvent.d.ts.map +1 -0
- package/lib/typescript/types/BannerAdProps.d.ts +175 -0
- package/lib/typescript/types/BannerAdProps.d.ts.map +1 -0
- package/lib/typescript/types/MobileAd.interface.d.ts +90 -0
- package/lib/typescript/types/MobileAd.interface.d.ts.map +1 -0
- package/lib/typescript/types/MobileAdsModule.interface.d.ts +75 -0
- package/lib/typescript/types/MobileAdsModule.interface.d.ts.map +1 -0
- package/lib/typescript/types/NativeAdRequestOptions.d.ts +36 -0
- package/lib/typescript/types/NativeAdRequestOptions.d.ts.map +1 -0
- package/lib/typescript/types/PaidEventListener.d.ts +8 -0
- package/lib/typescript/types/PaidEventListener.d.ts.map +1 -0
- package/lib/typescript/types/RequestConfiguration.d.ts +37 -0
- package/lib/typescript/types/RequestConfiguration.d.ts.map +1 -0
- package/lib/typescript/types/RequestOptions.d.ts +133 -0
- package/lib/typescript/types/RequestOptions.d.ts.map +1 -0
- package/lib/typescript/types/RewardedAdReward.d.ts +14 -0
- package/lib/typescript/types/RewardedAdReward.d.ts.map +1 -0
- package/lib/typescript/types/index.d.ts +13 -0
- package/lib/typescript/types/index.d.ts.map +1 -0
- package/lib/typescript/validateAdRequestConfiguration.d.ts +3 -0
- package/lib/typescript/validateAdRequestConfiguration.d.ts.map +1 -0
- package/lib/typescript/validateAdRequestOptions.d.ts +3 -0
- package/lib/typescript/validateAdRequestOptions.d.ts.map +1 -0
- package/lib/typescript/validateAdShowOptions.d.ts +3 -0
- package/lib/typescript/validateAdShowOptions.d.ts.map +1 -0
- package/lib/typescript/validateNativeAdRequestOptions.d.ts +3 -0
- package/lib/typescript/validateNativeAdRequestOptions.d.ts.map +1 -0
- package/lib/typescript/version.d.ts +2 -0
- package/lib/typescript/version.d.ts.map +1 -0
- package/package.json +176 -0
- package/plugin/__tests__/__snapshots__/plugin.test.ts.snap +739 -0
- package/plugin/__tests__/fixtures/app.config.js +24 -0
- package/plugin/__tests__/fixtures/app.config.ts +24 -0
- package/plugin/__tests__/fixtures/app.json +24 -0
- package/plugin/__tests__/fixtures/package.json +19 -0
- package/plugin/__tests__/fixtures/without-params/app.config.js +11 -0
- package/plugin/__tests__/fixtures/without-params/app.config.ts +11 -0
- package/plugin/__tests__/fixtures/without-params/app.json +11 -0
- package/plugin/__tests__/plugin.test.ts +115 -0
- package/plugin/build/index.d.ts +12 -0
- package/plugin/build/index.js +109 -0
- package/plugin/jest.config.js +1 -0
- package/plugin/src/index.ts +205 -0
- package/plugin/tsconfig.json +9 -0
- package/plugin/tsconfig.tsbuildinfo +1 -0
- package/react-native.config.js +19 -0
- package/src/AdEventType.ts +70 -0
- package/src/AdsConsent.ts +170 -0
- package/src/AdsConsentPurposes.ts +182 -0
- package/src/AdsConsentSpecialFeatures.ts +48 -0
- package/src/BannerAdSize.ts +78 -0
- package/src/GAMAdEventType.ts +37 -0
- package/src/MaxAdContentRating.ts +38 -0
- package/src/MobileAds.ts +77 -0
- package/src/NativeAdEventType.ts +51 -0
- package/src/RewardedAdEventType.ts +60 -0
- package/src/TestIds.ts +60 -0
- package/src/ads/AppOpenAd.ts +62 -0
- package/src/ads/BannerAd.tsx +37 -0
- package/src/ads/BaseAd.tsx +185 -0
- package/src/ads/GAMBannerAd.tsx +43 -0
- package/src/ads/GAMInterstitialAd.ts +45 -0
- package/src/ads/InterstitialAd.ts +122 -0
- package/src/ads/MobileAd.ts +227 -0
- package/src/ads/RewardedAd.ts +142 -0
- package/src/ads/RewardedInterstitialAd.ts +144 -0
- package/src/ads/native-ad/NativeAd.ts +159 -0
- package/src/ads/native-ad/NativeAdContext.ts +26 -0
- package/src/ads/native-ad/NativeAdView.tsx +43 -0
- package/src/ads/native-ad/NativeAsset.tsx +66 -0
- package/src/ads/native-ad/NativeMediaView.tsx +44 -0
- package/src/common/constants.ts +9 -0
- package/src/common/debounce.ts +15 -0
- package/src/common/index.ts +30 -0
- package/src/common/ref.ts +46 -0
- package/src/common/validate.ts +116 -0
- package/src/declarations.d.ts +3 -0
- package/src/hooks/useAppOpenAd.ts +46 -0
- package/src/hooks/useForeground.ts +41 -0
- package/src/hooks/useFullScreenAd.ts +112 -0
- package/src/hooks/useInterstitialAd.ts +46 -0
- package/src/hooks/useRewardedAd.ts +46 -0
- package/src/hooks/useRewardedInterstitialAd.ts +47 -0
- package/src/index.ts +60 -0
- package/src/internal/GoogleMobileAdsNativeEventEmitter.ts +58 -0
- package/src/internal/NativeError.ts +56 -0
- package/src/internal/SharedEventEmitter.ts +20 -0
- package/src/specs/components/GoogleMobileAdsBannerViewNativeComponent.ts +62 -0
- package/src/specs/components/GoogleMobileAdsMediaViewNativeComponent.ts +30 -0
- package/src/specs/components/GoogleMobileAdsNativeViewNativeComponent.ts +45 -0
- package/src/specs/modules/NativeAppModule.ts +57 -0
- package/src/specs/modules/NativeAppOpenModule.ts +26 -0
- package/src/specs/modules/NativeConsentModule.ts +532 -0
- package/src/specs/modules/NativeGoogleMobileAdsModule.ts +33 -0
- package/src/specs/modules/NativeGoogleMobileAdsNativeModule.ts +70 -0
- package/src/specs/modules/NativeInterstitialModule.ts +26 -0
- package/src/specs/modules/NativeRewardedInterstitialModule.ts +32 -0
- package/src/specs/modules/NativeRewardedModule.ts +26 -0
- package/src/types/AdEventListener.ts +34 -0
- package/src/types/AdEventsListener.ts +24 -0
- package/src/types/AdShowOptions.ts +12 -0
- package/src/types/AdStates.ts +92 -0
- package/src/types/AdapterStatus.ts +20 -0
- package/src/types/AppEvent.ts +14 -0
- package/src/types/BannerAdProps.ts +184 -0
- package/src/types/MobileAd.interface.ts +113 -0
- package/src/types/MobileAdsModule.interface.ts +80 -0
- package/src/types/NativeAdRequestOptions.ts +55 -0
- package/src/types/PaidEventListener.ts +9 -0
- package/src/types/RequestConfiguration.ts +40 -0
- package/src/types/RequestOptions.ts +137 -0
- package/src/types/RewardedAdReward.ts +14 -0
- package/src/types/index.ts +29 -0
- package/src/validateAdRequestConfiguration.ts +66 -0
- package/src/validateAdRequestOptions.ts +154 -0
- package/src/validateAdShowOptions.ts +41 -0
- package/src/validateNativeAdRequestOptions.ts +50 -0
- package/src/version.ts +2 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
package io.invertase.googlemobileads
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Copyright (c) 2016-present Invertase Limited & Contributors
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this library except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import android.app.Activity
|
|
21
|
+
import com.facebook.react.bridge.Promise
|
|
22
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
23
|
+
import com.facebook.react.bridge.ReactMethod
|
|
24
|
+
import com.facebook.react.bridge.ReadableMap
|
|
25
|
+
import com.google.android.libraries.ads.mobile.sdk.appopen.AppOpenAd
|
|
26
|
+
import com.google.android.libraries.ads.mobile.sdk.appopen.AppOpenAdEventCallback
|
|
27
|
+
import com.google.android.libraries.ads.mobile.sdk.common.AdLoadCallback
|
|
28
|
+
import com.google.android.libraries.ads.mobile.sdk.common.AdRequest
|
|
29
|
+
import com.google.android.libraries.ads.mobile.sdk.common.AdValue
|
|
30
|
+
|
|
31
|
+
class ReactNativeGoogleMobileAdsAppOpenModule(reactContext: ReactApplicationContext?) :
|
|
32
|
+
ReactNativeGoogleMobileAdsFullScreenAdModule<AppOpenAd>(reactContext, NAME) {
|
|
33
|
+
|
|
34
|
+
override fun getAdEventName(): String {
|
|
35
|
+
return ReactNativeGoogleMobileAdsEvent.GOOGLE_MOBILE_ADS_EVENT_APP_OPEN
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
@ReactMethod
|
|
39
|
+
fun appOpenLoad(requestId: Int, adUnitId: String, adRequestOptions: ReadableMap) {
|
|
40
|
+
load(requestId, adUnitId, adRequestOptions)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@ReactMethod
|
|
44
|
+
fun appOpenShow(
|
|
45
|
+
requestId: Int, adUnitId: String, showOptions: ReadableMap, promise: Promise
|
|
46
|
+
) {
|
|
47
|
+
show(requestId, adUnitId, showOptions, promise)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
override fun loadAd(adRequest: AdRequest, adLoadCallback: AdLoadCallback<AppOpenAd>) {
|
|
51
|
+
AppOpenAd.load(adRequest, adLoadCallback)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
override fun attachAdEventCallback(ad: AppOpenAd, requestId: Int, adUnitId: String) {
|
|
55
|
+
ad.adEventCallback =
|
|
56
|
+
object : AppOpenAdEventCallback {
|
|
57
|
+
override fun onAdShowedFullScreenContent() {
|
|
58
|
+
dispatchFullScreenEvent(
|
|
59
|
+
ReactNativeGoogleMobileAdsEvent.GOOGLE_MOBILE_ADS_EVENT_OPENED, requestId, adUnitId)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
override fun onAdDismissedFullScreenContent() {
|
|
63
|
+
dispatchFullScreenEvent(
|
|
64
|
+
ReactNativeGoogleMobileAdsEvent.GOOGLE_MOBILE_ADS_EVENT_CLOSED, requestId, adUnitId)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
override fun onAdClicked() {
|
|
68
|
+
dispatchFullScreenEvent(
|
|
69
|
+
ReactNativeGoogleMobileAdsEvent.GOOGLE_MOBILE_ADS_EVENT_CLICKED, requestId, adUnitId)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
override fun onAdPaid(adValue: AdValue) {
|
|
73
|
+
dispatchPaidEvent(requestId, adUnitId, adValue)
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
override fun showAd(
|
|
79
|
+
ad: AppOpenAd,
|
|
80
|
+
activity: Activity,
|
|
81
|
+
immersiveModeEnabled: Boolean,
|
|
82
|
+
requestId: Int,
|
|
83
|
+
adUnitId: String
|
|
84
|
+
) {
|
|
85
|
+
ad.setImmersiveMode(immersiveModeEnabled)
|
|
86
|
+
ad.show(activity)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
companion object {
|
|
90
|
+
const val NAME = "RNGoogleMobileAdsAppOpenModule"
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
package io.invertase.googlemobileads;
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Copyright (c) 2016-present Invertase Limited & Contributors
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this library except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
// Migrated to the GMA Next-Gen SDK (com.google.android.libraries.ads.mobile.sdk) on Android.
|
|
21
|
+
// Ad Manager / GAM paths are dropped: this app serves plain AdMob banners only. iOS is unchanged.
|
|
22
|
+
|
|
23
|
+
import android.view.ViewGroup;
|
|
24
|
+
import androidx.annotation.NonNull;
|
|
25
|
+
import com.facebook.react.bridge.Arguments;
|
|
26
|
+
import com.facebook.react.bridge.ReadableArray;
|
|
27
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
28
|
+
import com.facebook.react.bridge.ReadableType;
|
|
29
|
+
import com.facebook.react.bridge.WritableMap;
|
|
30
|
+
import com.facebook.react.common.MapBuilder;
|
|
31
|
+
import com.facebook.react.uimanager.SimpleViewManager;
|
|
32
|
+
import com.facebook.react.uimanager.ThemedReactContext;
|
|
33
|
+
import com.facebook.react.uimanager.UIManagerHelper;
|
|
34
|
+
import com.facebook.react.uimanager.annotations.ReactProp;
|
|
35
|
+
import com.facebook.react.uimanager.events.EventDispatcher;
|
|
36
|
+
import com.google.android.libraries.ads.mobile.sdk.banner.AdSize;
|
|
37
|
+
import com.google.android.libraries.ads.mobile.sdk.banner.AdView;
|
|
38
|
+
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAd;
|
|
39
|
+
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAdEventCallback;
|
|
40
|
+
import com.google.android.libraries.ads.mobile.sdk.banner.BannerAdRequest;
|
|
41
|
+
import com.google.android.libraries.ads.mobile.sdk.common.AdLoadCallback;
|
|
42
|
+
import com.google.android.libraries.ads.mobile.sdk.common.AdValue;
|
|
43
|
+
import com.google.android.libraries.ads.mobile.sdk.common.LoadAdError;
|
|
44
|
+
import io.invertase.googlemobileads.common.ReactNativeAdView;
|
|
45
|
+
import io.invertase.googlemobileads.common.SharedUtils;
|
|
46
|
+
import java.util.ArrayList;
|
|
47
|
+
import java.util.List;
|
|
48
|
+
import java.util.Map;
|
|
49
|
+
import javax.annotation.Nonnull;
|
|
50
|
+
import javax.annotation.Nullable;
|
|
51
|
+
import org.json.JSONException;
|
|
52
|
+
import org.json.JSONObject;
|
|
53
|
+
|
|
54
|
+
public class ReactNativeGoogleMobileAdsBannerAdViewManager
|
|
55
|
+
extends SimpleViewManager<ReactNativeAdView> {
|
|
56
|
+
private static final String REACT_CLASS = "RNGoogleMobileAdsBannerView";
|
|
57
|
+
private final String EVENT_AD_LOADED = "onAdLoaded";
|
|
58
|
+
private final String EVENT_AD_IMPRESSION = "onAdImpression";
|
|
59
|
+
private final String EVENT_AD_CLICKED = "onAdClicked";
|
|
60
|
+
private final String EVENT_AD_FAILED_TO_LOAD = "onAdFailedToLoad";
|
|
61
|
+
private final String EVENT_AD_OPENED = "onAdOpened";
|
|
62
|
+
private final String EVENT_AD_CLOSED = "onAdClosed";
|
|
63
|
+
private final String EVENT_PAID = "onPaid";
|
|
64
|
+
private final String EVENT_SIZE_CHANGE = "onSizeChange";
|
|
65
|
+
private final String COMMAND_ID_RECORD_MANUAL_IMPRESSION = "recordManualImpression";
|
|
66
|
+
private final String COMMAND_ID_LOAD = "load";
|
|
67
|
+
|
|
68
|
+
@Nonnull
|
|
69
|
+
@Override
|
|
70
|
+
public String getName() {
|
|
71
|
+
return REACT_CLASS;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
@Nonnull
|
|
75
|
+
@Override
|
|
76
|
+
public ReactNativeAdView createViewInstance(@Nonnull ThemedReactContext themedReactContext) {
|
|
77
|
+
return new ReactNativeAdView(themedReactContext);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@Override
|
|
81
|
+
public Map<String, Object> getExportedCustomDirectEventTypeConstants() {
|
|
82
|
+
MapBuilder.Builder<String, Object> builder = MapBuilder.builder();
|
|
83
|
+
builder.put(OnNativeEvent.EVENT_NAME, MapBuilder.of("registrationName", "onNativeEvent"));
|
|
84
|
+
return builder.build();
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
@Override
|
|
88
|
+
public void receiveCommand(
|
|
89
|
+
@NonNull ReactNativeAdView reactViewGroup, String commandId, @Nullable ReadableArray args) {
|
|
90
|
+
super.receiveCommand(reactViewGroup, commandId, args);
|
|
91
|
+
|
|
92
|
+
AdView adView = getAdView(reactViewGroup);
|
|
93
|
+
|
|
94
|
+
if (commandId.equals(COMMAND_ID_RECORD_MANUAL_IMPRESSION)) {
|
|
95
|
+
if (adView != null) {
|
|
96
|
+
BannerAd bannerAd = adView.getBannerAd();
|
|
97
|
+
if (bannerAd != null) {
|
|
98
|
+
bannerAd.recordManualImpression();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
} else if (commandId.equals(COMMAND_ID_LOAD)) {
|
|
102
|
+
requestAd(reactViewGroup);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
@ReactProp(name = "unitId")
|
|
107
|
+
public void setUnitId(ReactNativeAdView reactViewGroup, String value) {
|
|
108
|
+
reactViewGroup.setUnitId(value);
|
|
109
|
+
reactViewGroup.setPropsChanged(true);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
@ReactProp(name = "request")
|
|
113
|
+
public void setRequest(ReactNativeAdView reactViewGroup, String value) {
|
|
114
|
+
try {
|
|
115
|
+
JSONObject jsonObject = new JSONObject(value);
|
|
116
|
+
WritableMap writableMap = SharedUtils.jsonObjectToWritableMap(jsonObject);
|
|
117
|
+
reactViewGroup.setRequestOptions(writableMap);
|
|
118
|
+
reactViewGroup.setPropsChanged(true);
|
|
119
|
+
} catch (JSONException e) {
|
|
120
|
+
e.printStackTrace();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
@ReactProp(name = "sizeConfig")
|
|
125
|
+
public void setSizeConfig(ReactNativeAdView reactViewGroup, ReadableMap sizeConfig) {
|
|
126
|
+
if (sizeConfig != null) {
|
|
127
|
+
if (sizeConfig.hasKey("maxHeight") && !sizeConfig.isNull("maxHeight")) {
|
|
128
|
+
reactViewGroup.setMaxAdHeight((float) sizeConfig.getDouble("maxHeight"));
|
|
129
|
+
} else {
|
|
130
|
+
reactViewGroup.setMaxAdHeight(0);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if (sizeConfig.hasKey("width") && !sizeConfig.isNull("width")) {
|
|
134
|
+
reactViewGroup.setAdWidth((float) sizeConfig.getDouble("width"));
|
|
135
|
+
} else {
|
|
136
|
+
reactViewGroup.setAdWidth(0);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
if (sizeConfig.hasKey("sizes") && !sizeConfig.isNull("sizes")) {
|
|
140
|
+
ReadableArray sizesArray = sizeConfig.getArray("sizes");
|
|
141
|
+
if (sizesArray != null) {
|
|
142
|
+
List<AdSize> sizeList = new ArrayList<>();
|
|
143
|
+
for (int i = 0; i < sizesArray.size(); i++) {
|
|
144
|
+
if (sizesArray.getType(i) == ReadableType.String) {
|
|
145
|
+
String sizeString = sizesArray.getString(i);
|
|
146
|
+
sizeList.add(ReactNativeGoogleMobileAdsCommon.getAdSize(sizeString, reactViewGroup));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if (!sizeList.isEmpty() && !sizeList.contains(AdSize.FLUID)) {
|
|
151
|
+
AdSize adSize = sizeList.get(0);
|
|
152
|
+
WritableMap payload = Arguments.createMap();
|
|
153
|
+
payload.putDouble("width", adSize.getWidth());
|
|
154
|
+
payload.putDouble("height", adSize.getHeight());
|
|
155
|
+
sendEvent(reactViewGroup, EVENT_SIZE_CHANGE, payload);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
reactViewGroup.setSizes(sizeList);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
reactViewGroup.setPropsChanged(true);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
@ReactProp(name = "manualImpressionsEnabled")
|
|
167
|
+
public void setManualImpressionsEnabled(ReactNativeAdView reactViewGroup, boolean value) {
|
|
168
|
+
reactViewGroup.setManualImpressionsEnabled(value);
|
|
169
|
+
reactViewGroup.setPropsChanged(true);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
@Override
|
|
173
|
+
public void onAfterUpdateTransaction(@NonNull ReactNativeAdView reactViewGroup) {
|
|
174
|
+
super.onAfterUpdateTransaction(reactViewGroup);
|
|
175
|
+
if (reactViewGroup.getPropsChanged()) {
|
|
176
|
+
requestAd(reactViewGroup);
|
|
177
|
+
}
|
|
178
|
+
reactViewGroup.setPropsChanged(false);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
@Override
|
|
182
|
+
public void onDropViewInstance(@NonNull ReactNativeAdView reactViewGroup) {
|
|
183
|
+
AdView adView = getAdView(reactViewGroup);
|
|
184
|
+
if (adView != null) {
|
|
185
|
+
adView.destroy();
|
|
186
|
+
reactViewGroup.removeView(adView);
|
|
187
|
+
}
|
|
188
|
+
super.onDropViewInstance(reactViewGroup);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
private AdView initAdView(ReactNativeAdView reactViewGroup) {
|
|
192
|
+
AdView oldAdView = getAdView(reactViewGroup);
|
|
193
|
+
if (oldAdView != null) {
|
|
194
|
+
oldAdView.destroy();
|
|
195
|
+
reactViewGroup.removeView(oldAdView);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
AdView adView = new AdView(reactViewGroup.getContext());
|
|
199
|
+
adView.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
|
|
200
|
+
reactViewGroup.addView(adView);
|
|
201
|
+
return adView;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
@Nullable
|
|
205
|
+
private AdView getAdView(ViewGroup reactViewGroup) {
|
|
206
|
+
if (reactViewGroup.getChildCount() == 0) return null;
|
|
207
|
+
android.view.View child = reactViewGroup.getChildAt(0);
|
|
208
|
+
return child instanceof AdView ? (AdView) child : null;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
private BannerAdEventCallback buildEventCallback(ReactNativeAdView reactViewGroup) {
|
|
212
|
+
return new BannerAdEventCallback() {
|
|
213
|
+
@Override
|
|
214
|
+
public void onAdImpression() {
|
|
215
|
+
sendEvent(reactViewGroup, EVENT_AD_IMPRESSION, null);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
@Override
|
|
219
|
+
public void onAdClicked() {
|
|
220
|
+
sendEvent(reactViewGroup, EVENT_AD_CLICKED, null);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
@Override
|
|
224
|
+
public void onAdShowedFullScreenContent() {
|
|
225
|
+
sendEvent(reactViewGroup, EVENT_AD_OPENED, null);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
@Override
|
|
229
|
+
public void onAdDismissedFullScreenContent() {
|
|
230
|
+
sendEvent(reactViewGroup, EVENT_AD_CLOSED, null);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
@Override
|
|
234
|
+
public void onAdPaid(@NonNull AdValue adValue) {
|
|
235
|
+
WritableMap payload = Arguments.createMap();
|
|
236
|
+
payload.putDouble("value", 1e-6 * adValue.getValueMicros());
|
|
237
|
+
payload.putDouble("precision", adValue.getPrecisionType().ordinal());
|
|
238
|
+
payload.putString("currency", adValue.getCurrencyCode());
|
|
239
|
+
sendEvent(reactViewGroup, EVENT_PAID, payload);
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
private void requestAd(ReactNativeAdView reactViewGroup) {
|
|
245
|
+
String unitId = reactViewGroup.getUnitId();
|
|
246
|
+
List<AdSize> sizes = reactViewGroup.getSizes();
|
|
247
|
+
ReadableMap requestOptions = reactViewGroup.getRequestOptions();
|
|
248
|
+
Boolean manualImpressionsEnabled = reactViewGroup.getManualImpressionsEnabled();
|
|
249
|
+
|
|
250
|
+
if (sizes == null || sizes.isEmpty() || unitId == null || requestOptions == null) {
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
final AdSize adSize = sizes.get(0);
|
|
255
|
+
reactViewGroup.setIsFluid(adSize.equals(AdSize.FLUID));
|
|
256
|
+
|
|
257
|
+
BannerAdRequest.Builder builder = new BannerAdRequest.Builder(unitId, adSize);
|
|
258
|
+
ReactNativeGoogleMobileAdsCommon.applyRequestOptions(builder, requestOptions);
|
|
259
|
+
if (manualImpressionsEnabled != null && manualImpressionsEnabled) {
|
|
260
|
+
builder.setManualImpressionEnabled(true);
|
|
261
|
+
}
|
|
262
|
+
BannerAdRequest request = builder.build();
|
|
263
|
+
|
|
264
|
+
final AdView adView = initAdView(reactViewGroup);
|
|
265
|
+
adView.loadAd(
|
|
266
|
+
request,
|
|
267
|
+
new AdLoadCallback<BannerAd>() {
|
|
268
|
+
@Override
|
|
269
|
+
public void onAdLoaded(@NonNull BannerAd ad) {
|
|
270
|
+
ad.setAdEventCallback(buildEventCallback(reactViewGroup));
|
|
271
|
+
|
|
272
|
+
AdSize loadedSize = ad.getAdSize() != null ? ad.getAdSize() : adSize;
|
|
273
|
+
WritableMap payload = Arguments.createMap();
|
|
274
|
+
payload.putDouble("width", loadedSize.getWidth());
|
|
275
|
+
payload.putDouble("height", loadedSize.getHeight());
|
|
276
|
+
sendEvent(reactViewGroup, EVENT_AD_LOADED, payload);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
@Override
|
|
280
|
+
public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
|
|
281
|
+
WritableMap payload =
|
|
282
|
+
ReactNativeGoogleMobileAdsCommon.errorCodeToMap(loadAdError.getCode());
|
|
283
|
+
sendEvent(reactViewGroup, EVENT_AD_FAILED_TO_LOAD, payload);
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
private void sendEvent(ReactNativeAdView reactViewGroup, String type, WritableMap payload) {
|
|
289
|
+
WritableMap event = Arguments.createMap();
|
|
290
|
+
event.putString("type", type);
|
|
291
|
+
|
|
292
|
+
if (payload != null) {
|
|
293
|
+
event.merge(payload);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
ThemedReactContext themedReactContext = ((ThemedReactContext) reactViewGroup.getContext());
|
|
297
|
+
EventDispatcher eventDispatcher =
|
|
298
|
+
UIManagerHelper.getEventDispatcherForReactTag(themedReactContext, reactViewGroup.getId());
|
|
299
|
+
if (eventDispatcher != null) {
|
|
300
|
+
eventDispatcher.dispatchEvent(new OnNativeEvent(reactViewGroup.getId(), event));
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsCommon.java
ADDED
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
package io.invertase.googlemobileads;
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
* Copyright (c) 2016-present Invertase Limited & Contributors
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this library except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import android.os.Bundle;
|
|
21
|
+
import android.util.DisplayMetrics;
|
|
22
|
+
import android.view.Display;
|
|
23
|
+
import android.view.ViewGroup;
|
|
24
|
+
import com.facebook.react.bridge.Arguments;
|
|
25
|
+
import com.facebook.react.bridge.ReactContext;
|
|
26
|
+
import com.facebook.react.bridge.ReadableArray;
|
|
27
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
28
|
+
import com.facebook.react.bridge.ReadableType;
|
|
29
|
+
import com.facebook.react.bridge.WritableMap;
|
|
30
|
+
// GMA Next-Gen SDK (com.google.android.libraries.ads.mobile.sdk) — replaces the
|
|
31
|
+
// legacy play-services-ads (com.google.android.gms.ads) on Android. iOS is untouched.
|
|
32
|
+
import com.google.android.libraries.ads.mobile.sdk.banner.AdSize;
|
|
33
|
+
import com.google.android.libraries.ads.mobile.sdk.common.BaseError;
|
|
34
|
+
import com.google.android.libraries.ads.mobile.sdk.common.BaseRequestBuilder;
|
|
35
|
+
import com.google.android.libraries.ads.mobile.sdk.common.LoadAdError;
|
|
36
|
+
import io.invertase.googlemobileads.common.ReactNativeAdView;
|
|
37
|
+
import io.invertase.googlemobileads.common.ReactNativeEventEmitter;
|
|
38
|
+
import java.util.ArrayList;
|
|
39
|
+
import java.util.List;
|
|
40
|
+
import java.util.Map;
|
|
41
|
+
import java.util.Objects;
|
|
42
|
+
import java.util.regex.Matcher;
|
|
43
|
+
import java.util.regex.Pattern;
|
|
44
|
+
import javax.annotation.Nullable;
|
|
45
|
+
|
|
46
|
+
public class ReactNativeGoogleMobileAdsCommon {
|
|
47
|
+
|
|
48
|
+
static AdSize getAdSizeForAdaptiveBanner(String preDefinedAdSize, ViewGroup reactViewGroup) {
|
|
49
|
+
|
|
50
|
+
try {
|
|
51
|
+
Display display =
|
|
52
|
+
Objects.requireNonNull(((ReactContext) reactViewGroup.getContext()).getCurrentActivity())
|
|
53
|
+
.getWindowManager()
|
|
54
|
+
.getDefaultDisplay();
|
|
55
|
+
|
|
56
|
+
DisplayMetrics outMetrics = new DisplayMetrics();
|
|
57
|
+
display.getMetrics(outMetrics);
|
|
58
|
+
|
|
59
|
+
// Get custom width if set, otherwise use device width
|
|
60
|
+
float customWidth = ((ReactNativeAdView) reactViewGroup).getAdWidth();
|
|
61
|
+
int screenWidth = (int) (outMetrics.widthPixels / outMetrics.density);
|
|
62
|
+
int adWidth = customWidth > 0 ? Math.min(Math.round(customWidth), screenWidth) : screenWidth;
|
|
63
|
+
|
|
64
|
+
float maxAdHeight = ((ReactNativeAdView) reactViewGroup).getMaxAdHeight();
|
|
65
|
+
if ("INLINE_ADAPTIVE_BANNER".equals(preDefinedAdSize)) {
|
|
66
|
+
if (maxAdHeight > 0) {
|
|
67
|
+
return AdSize.getInlineAdaptiveBannerAdSize(
|
|
68
|
+
adWidth, Math.round(Math.max(maxAdHeight, 32)));
|
|
69
|
+
}
|
|
70
|
+
return AdSize.getCurrentOrientationInlineAdaptiveBannerAdSize(
|
|
71
|
+
reactViewGroup.getContext(), adWidth);
|
|
72
|
+
}
|
|
73
|
+
if ("LARGE_ANCHORED_ADAPTIVE_BANNER".equals(preDefinedAdSize)) {
|
|
74
|
+
return AdSize.getLargeAnchoredAdaptiveBannerAdSize(reactViewGroup.getContext(), adWidth);
|
|
75
|
+
}
|
|
76
|
+
return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(
|
|
77
|
+
reactViewGroup.getContext(), adWidth);
|
|
78
|
+
} catch (Exception e) {
|
|
79
|
+
return AdSize.BANNER;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
static AdSize getAdSize(String preDefinedAdSize, ViewGroup reactViewGroup) {
|
|
84
|
+
if (preDefinedAdSize.matches(
|
|
85
|
+
"ANCHORED_ADAPTIVE_BANNER|LARGE_ANCHORED_ADAPTIVE_BANNER|INLINE_ADAPTIVE_BANNER")) {
|
|
86
|
+
return ReactNativeGoogleMobileAdsCommon.getAdSizeForAdaptiveBanner(
|
|
87
|
+
preDefinedAdSize, reactViewGroup);
|
|
88
|
+
} else {
|
|
89
|
+
return ReactNativeGoogleMobileAdsCommon.stringToAdSize(preDefinedAdSize);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
static AdSize stringToAdSize(String value) {
|
|
94
|
+
Pattern pattern = Pattern.compile("([0-9]+)x([0-9]+)");
|
|
95
|
+
Matcher matcher = pattern.matcher(value);
|
|
96
|
+
|
|
97
|
+
// If size is "valXval"
|
|
98
|
+
if (matcher.find()) {
|
|
99
|
+
int width = Integer.parseInt(matcher.group(1));
|
|
100
|
+
int height = Integer.parseInt(matcher.group(2));
|
|
101
|
+
return new AdSize(width, height);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
switch (value.toUpperCase()) {
|
|
105
|
+
case "FLUID":
|
|
106
|
+
return AdSize.FLUID;
|
|
107
|
+
case "WIDE_SKYSCRAPER":
|
|
108
|
+
// Next-Gen AdSize has no WIDE_SKYSCRAPER constant; use the same 160x600 dimensions.
|
|
109
|
+
return new AdSize(160, 600);
|
|
110
|
+
case "LARGE_BANNER":
|
|
111
|
+
return AdSize.LARGE_BANNER;
|
|
112
|
+
case "MEDIUM_RECTANGLE":
|
|
113
|
+
return AdSize.MEDIUM_RECTANGLE;
|
|
114
|
+
case "FULL_BANNER":
|
|
115
|
+
return AdSize.FULL_BANNER;
|
|
116
|
+
case "LEADERBOARD":
|
|
117
|
+
return AdSize.LEADERBOARD;
|
|
118
|
+
default:
|
|
119
|
+
case "BANNER":
|
|
120
|
+
return AdSize.BANNER;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/** Convert a Next-Gen load-error code into the JS-facing error code/message pair. */
|
|
125
|
+
static WritableMap errorCodeToMap(LoadAdError.ErrorCode errorCode) {
|
|
126
|
+
WritableMap map = Arguments.createMap();
|
|
127
|
+
|
|
128
|
+
switch (errorCode) {
|
|
129
|
+
case INTERNAL_ERROR:
|
|
130
|
+
map.putString("code", "error-code-internal-error");
|
|
131
|
+
map.putString(
|
|
132
|
+
"message",
|
|
133
|
+
"Something happened internally; for instance, an invalid response was received from the"
|
|
134
|
+
+ " ad server.");
|
|
135
|
+
break;
|
|
136
|
+
case INVALID_REQUEST:
|
|
137
|
+
map.putString("code", "error-code-invalid-request");
|
|
138
|
+
map.putString(
|
|
139
|
+
"message", "The ad request was invalid; for instance, the ad unit ID was incorrect.");
|
|
140
|
+
break;
|
|
141
|
+
case NETWORK_ERROR:
|
|
142
|
+
map.putString("code", "error-code-network-error");
|
|
143
|
+
map.putString("message", "The ad request was unsuccessful due to network connectivity.");
|
|
144
|
+
break;
|
|
145
|
+
case NO_FILL:
|
|
146
|
+
map.putString("code", "error-code-no-fill");
|
|
147
|
+
map.putString(
|
|
148
|
+
"message",
|
|
149
|
+
"The ad request was successful, but no ad was returned due to lack of ad inventory.");
|
|
150
|
+
break;
|
|
151
|
+
default:
|
|
152
|
+
map.putString("code", "error-code-internal-error");
|
|
153
|
+
map.putString("message", "Ad failed to load: " + errorCode.name());
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return map;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Apply the JS-supplied request options (keywords, content URL, non-personalized, etc.) onto any
|
|
162
|
+
* Next-Gen request builder. Works for both BannerAdRequest.Builder and AdRequest.Builder since
|
|
163
|
+
* both extend BaseRequestBuilder. AdMob-only: Ad Manager / GAM-specific options are not used by
|
|
164
|
+
* this app and are intentionally omitted.
|
|
165
|
+
*/
|
|
166
|
+
public static void applyRequestOptions(
|
|
167
|
+
BaseRequestBuilder<?> builder, ReadableMap adRequestOptions) {
|
|
168
|
+
if (adRequestOptions == null) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
if (adRequestOptions.hasKey("requestNonPersonalizedAdsOnly")
|
|
173
|
+
&& adRequestOptions.getBoolean("requestNonPersonalizedAdsOnly")) {
|
|
174
|
+
Bundle extras = new Bundle();
|
|
175
|
+
extras.putString("npa", "1");
|
|
176
|
+
builder.setGoogleExtrasBundle(extras);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
if (adRequestOptions.hasKey("keywords")) {
|
|
180
|
+
ArrayList<Object> keywords =
|
|
181
|
+
Objects.requireNonNull(adRequestOptions.getArray("keywords")).toArrayList();
|
|
182
|
+
for (Object keyword : keywords) {
|
|
183
|
+
builder.addKeyword((String) keyword);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
if (adRequestOptions.hasKey("contentUrl")) {
|
|
188
|
+
builder.setContentUrl(Objects.requireNonNull(adRequestOptions.getString("contentUrl")));
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
if (adRequestOptions.hasKey("requestAgent")) {
|
|
192
|
+
builder.setRequestAgent(Objects.requireNonNull(adRequestOptions.getString("requestAgent")));
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
if (adRequestOptions.hasKey("customTargeting")) {
|
|
196
|
+
Map<String, Object> customTargeting = adRequestOptions.getMap("customTargeting").toHashMap();
|
|
197
|
+
for (Map.Entry<String, Object> entry : customTargeting.entrySet()) {
|
|
198
|
+
String key = entry.getKey();
|
|
199
|
+
Object value = entry.getValue();
|
|
200
|
+
if (value instanceof String) {
|
|
201
|
+
builder.putCustomTargeting(key, (String) value);
|
|
202
|
+
} else if (value instanceof List) {
|
|
203
|
+
ArrayList<String> values = new ArrayList<>();
|
|
204
|
+
for (Object item : (List<?>) value) {
|
|
205
|
+
values.add(String.valueOf(item));
|
|
206
|
+
}
|
|
207
|
+
builder.putCustomTargeting(key, values);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
if (adRequestOptions.hasKey("publisherProvidedId")) {
|
|
213
|
+
builder.setPublisherProvidedId(
|
|
214
|
+
Objects.requireNonNull(adRequestOptions.getString("publisherProvidedId")));
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
public static void sendAdEvent(
|
|
219
|
+
String event, int requestId, String type, String adUnitId, @Nullable WritableMap error) {
|
|
220
|
+
ReactNativeEventEmitter emitter = ReactNativeEventEmitter.getSharedInstance();
|
|
221
|
+
|
|
222
|
+
WritableMap eventBody = Arguments.createMap();
|
|
223
|
+
eventBody.putString("type", type);
|
|
224
|
+
|
|
225
|
+
if (error != null) {
|
|
226
|
+
eventBody.putMap("error", error);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
emitter.sendEvent(new ReactNativeGoogleMobileAdsEvent(event, requestId, adUnitId, eventBody));
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
public static void sendAdEvent(
|
|
233
|
+
String event,
|
|
234
|
+
int requestId,
|
|
235
|
+
String type,
|
|
236
|
+
String adUnitId,
|
|
237
|
+
@Nullable WritableMap error,
|
|
238
|
+
@Nullable WritableMap data) {
|
|
239
|
+
ReactNativeEventEmitter emitter = ReactNativeEventEmitter.getSharedInstance();
|
|
240
|
+
|
|
241
|
+
WritableMap eventBody = Arguments.createMap();
|
|
242
|
+
eventBody.putString("type", type);
|
|
243
|
+
|
|
244
|
+
if (error != null) {
|
|
245
|
+
eventBody.putMap("error", error);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
if (data != null) {
|
|
249
|
+
eventBody.putMap("data", data);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
emitter.sendEvent(new ReactNativeGoogleMobileAdsEvent(event, requestId, adUnitId, eventBody));
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/** Extract a [code, message] pair from any Next-Gen error (LoadAdError, FullScreenContentError). */
|
|
256
|
+
public static String[] getCodeAndMessageFromAdError(BaseError<?> adError) {
|
|
257
|
+
String code = "unknown";
|
|
258
|
+
String message = adError.getMessage();
|
|
259
|
+
|
|
260
|
+
Object rawCode = adError.getCode();
|
|
261
|
+
if (rawCode instanceof Enum) {
|
|
262
|
+
code = ((Enum<?>) rawCode).name().toLowerCase().replace('_', '-');
|
|
263
|
+
} else if (rawCode != null) {
|
|
264
|
+
code = String.valueOf(rawCode);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
String[] codeAndMessage = new String[2];
|
|
268
|
+
codeAndMessage[0] = code;
|
|
269
|
+
codeAndMessage[1] = message;
|
|
270
|
+
return codeAndMessage;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
public static boolean isAdManagerUnit(String unitId) {
|
|
274
|
+
if (unitId == null) return false;
|
|
275
|
+
return unitId.startsWith("/");
|
|
276
|
+
}
|
|
277
|
+
}
|