react-native-google-mobile-ads 4.1.0
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 +65 -0
- package/RNGoogleMobileAds.podspec +42 -0
- package/__tests__/consent.test.ts +25 -0
- package/__tests__/googleMobileAds.test.ts +63 -0
- package/__tests__/interstitial.test.ts +53 -0
- package/__tests__/requestOptions.test.tsx +4 -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 +98 -0
- package/android/lint.xml +5 -0
- package/android/settings.gradle +1 -0
- package/android/src/main/AndroidManifest.xml +17 -0
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeAppModule.java +169 -0
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsAppOpenModule.java +161 -0
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsBannerAdViewManager.java +209 -0
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsCommon.java +256 -0
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsConsentModule.java +226 -0
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsEvent.java +72 -0
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsInterstitialModule.java +159 -0
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsModule.java +143 -0
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsPackage.java +48 -0
- package/android/src/main/java/io/invertase/googlemobileads/ReactNativeGoogleMobileAdsRewardedModule.java +177 -0
- package/android/src/main/java/io/invertase/googlemobileads/common/RCTConvert.java +111 -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 +427 -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/babel.config.js +18 -0
- package/docs/displaying-ads.mdx +319 -0
- package/docs/european-user-consent.mdx +258 -0
- package/docs/img/logo_admob_192px.svg +19 -0
- package/docs/index.mdx +168 -0
- package/docs.json +9 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsAppOpenModule.h +29 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsAppOpenModule.m +98 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsBannerViewManager.h +23 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsBannerViewManager.m +153 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsCommon.h +60 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsCommon.m +201 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsConsentModule.h +26 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsConsentModule.m +179 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsFullScreenContentDelegate.h +32 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsFullScreenContentDelegate.m +57 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsInterstitialModule.h +25 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsInterstitialModule.m +124 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsModule.h +24 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsModule.m +104 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsRewardedModule.h +25 -0
- package/ios/RNGoogleMobileAds/RNGoogleMobileAdsRewardedModule.m +173 -0
- package/ios/RNGoogleMobileAds/common/RNAppModule.h +24 -0
- package/ios/RNGoogleMobileAds/common/RNAppModule.m +158 -0
- package/ios/RNGoogleMobileAds/common/RNJSON.h +34 -0
- package/ios/RNGoogleMobileAds/common/RNJSON.m +93 -0
- package/ios/RNGoogleMobileAds/common/RNMeta.h +30 -0
- package/ios/RNGoogleMobileAds/common/RNMeta.m +61 -0
- package/ios/RNGoogleMobileAds/common/RNPreferences.h +44 -0
- package/ios/RNGoogleMobileAds/common/RNPreferences.m +94 -0
- package/ios/RNGoogleMobileAds/common/RNRCTEventEmitter.h +73 -0
- package/ios/RNGoogleMobileAds/common/RNRCTEventEmitter.m +150 -0
- package/ios/RNGoogleMobileAds/common/RNSharedUtils.h +48 -0
- package/ios/RNGoogleMobileAds/common/RNSharedUtils.m +56 -0
- package/ios/RNGoogleMobileAds.xcodeproj/project.pbxproj +377 -0
- package/ios/RNGoogleMobileAds.xcodeproj/xcshareddata/IDETemplateMacros.plist +24 -0
- package/ios_config.sh +140 -0
- package/jest.config.js +6 -0
- package/jest.setup.ts +29 -0
- package/lib/commonjs/AdEventType.js +34 -0
- package/lib/commonjs/AdEventType.js.map +1 -0
- package/lib/commonjs/AdsConsent.js +160 -0
- package/lib/commonjs/AdsConsent.js.map +1 -0
- package/lib/commonjs/AdsConsentDebugGeography.js +38 -0
- package/lib/commonjs/AdsConsentDebugGeography.js.map +1 -0
- package/lib/commonjs/AdsConsentStatus.js +36 -0
- package/lib/commonjs/AdsConsentStatus.js.map +1 -0
- package/lib/commonjs/BannerAdSize.js +38 -0
- package/lib/commonjs/BannerAdSize.js.map +1 -0
- package/lib/commonjs/MaxAdContentRating.js +33 -0
- package/lib/commonjs/MaxAdContentRating.js.map +1 -0
- package/lib/commonjs/MobileAds.js +67 -0
- package/lib/commonjs/MobileAds.js.map +1 -0
- package/lib/commonjs/RewardedAdEventType.js +31 -0
- package/lib/commonjs/RewardedAdEventType.js.map +1 -0
- package/lib/commonjs/TestIds.js +47 -0
- package/lib/commonjs/TestIds.js.map +1 -0
- package/lib/commonjs/ads/AppOpenAd.js +96 -0
- package/lib/commonjs/ads/AppOpenAd.js.map +1 -0
- package/lib/commonjs/ads/BannerAd.js +128 -0
- package/lib/commonjs/ads/BannerAd.js.map +1 -0
- package/lib/commonjs/ads/InterstitialAd.js +163 -0
- package/lib/commonjs/ads/InterstitialAd.js.map +1 -0
- package/lib/commonjs/ads/MobileAd.js +90 -0
- package/lib/commonjs/ads/MobileAd.js.map +1 -0
- package/lib/commonjs/ads/RewardedAd.js +169 -0
- package/lib/commonjs/ads/RewardedAd.js.map +1 -0
- package/lib/commonjs/common/Base64.js +121 -0
- package/lib/commonjs/common/Base64.js.map +1 -0
- package/lib/commonjs/common/MutatableParams.js +46 -0
- package/lib/commonjs/common/MutatableParams.js.map +1 -0
- package/lib/commonjs/common/ReferenceBase.js +59 -0
- package/lib/commonjs/common/ReferenceBase.js.map +1 -0
- package/lib/commonjs/common/deeps.js +101 -0
- package/lib/commonjs/common/deeps.js.map +1 -0
- package/lib/commonjs/common/id.js +82 -0
- package/lib/commonjs/common/id.js.map +1 -0
- package/lib/commonjs/common/index.js +212 -0
- package/lib/commonjs/common/index.js.map +1 -0
- package/lib/commonjs/common/path.js +144 -0
- package/lib/commonjs/common/path.js.map +1 -0
- package/lib/commonjs/common/promise.js +70 -0
- package/lib/commonjs/common/promise.js.map +1 -0
- package/lib/commonjs/common/serialize.js +52 -0
- package/lib/commonjs/common/serialize.js.map +1 -0
- package/lib/commonjs/common/validate.js +239 -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/index.js +143 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/internal/GoogleMobileAdsNativeEventEmitter.js +76 -0
- package/lib/commonjs/internal/GoogleMobileAdsNativeEventEmitter.js.map +1 -0
- package/lib/commonjs/internal/Module.js +60 -0
- package/lib/commonjs/internal/Module.js.map +1 -0
- package/lib/commonjs/internal/NativeError.js +70 -0
- package/lib/commonjs/internal/NativeError.js.map +1 -0
- package/lib/commonjs/internal/SharedEventEmitter.js +31 -0
- package/lib/commonjs/internal/SharedEventEmitter.js.map +1 -0
- package/lib/commonjs/internal/constants.js +30 -0
- package/lib/commonjs/internal/constants.js.map +1 -0
- package/lib/commonjs/internal/index.js +49 -0
- package/lib/commonjs/internal/index.js.map +1 -0
- package/lib/commonjs/internal/registry/nativeModule.js +231 -0
- package/lib/commonjs/internal/registry/nativeModule.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/AdShowOptions.js +2 -0
- package/lib/commonjs/types/AdShowOptions.js.map +1 -0
- package/lib/commonjs/types/AdapterStatus.js +18 -0
- package/lib/commonjs/types/AdapterStatus.js.map +1 -0
- package/lib/commonjs/types/AdsConsent.interface.js +6 -0
- package/lib/commonjs/types/AdsConsent.interface.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/GoogleMobileAdsNativeModule.js +6 -0
- package/lib/commonjs/types/GoogleMobileAdsNativeModule.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/Module.interface.js +2 -0
- package/lib/commonjs/types/Module.interface.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/validateAdRequestConfiguration.js +69 -0
- package/lib/commonjs/validateAdRequestConfiguration.js.map +1 -0
- package/lib/commonjs/validateAdRequestOptions.js +158 -0
- package/lib/commonjs/validateAdRequestOptions.js.map +1 -0
- package/lib/commonjs/validateAdShowOptions.js +47 -0
- package/lib/commonjs/validateAdShowOptions.js.map +1 -0
- package/lib/commonjs/version.js +10 -0
- package/lib/commonjs/version.js.map +1 -0
- package/lib/module/AdEventType.js +26 -0
- package/lib/module/AdEventType.js.map +1 -0
- package/lib/module/AdsConsent.js +148 -0
- package/lib/module/AdsConsent.js.map +1 -0
- package/lib/module/AdsConsentDebugGeography.js +30 -0
- package/lib/module/AdsConsentDebugGeography.js.map +1 -0
- package/lib/module/AdsConsentStatus.js +28 -0
- package/lib/module/AdsConsentStatus.js.map +1 -0
- package/lib/module/BannerAdSize.js +30 -0
- package/lib/module/BannerAdSize.js.map +1 -0
- package/lib/module/MaxAdContentRating.js +25 -0
- package/lib/module/MaxAdContentRating.js.map +1 -0
- package/lib/module/MobileAds.js +53 -0
- package/lib/module/MobileAds.js.map +1 -0
- package/lib/module/RewardedAdEventType.js +23 -0
- package/lib/module/RewardedAdEventType.js.map +1 -0
- package/lib/module/TestIds.js +38 -0
- package/lib/module/TestIds.js.map +1 -0
- package/lib/module/ads/AppOpenAd.js +81 -0
- package/lib/module/ads/AppOpenAd.js.map +1 -0
- package/lib/module/ads/BannerAd.js +108 -0
- package/lib/module/ads/BannerAd.js.map +1 -0
- package/lib/module/ads/InterstitialAd.js +149 -0
- package/lib/module/ads/InterstitialAd.js.map +1 -0
- package/lib/module/ads/MobileAd.js +94 -0
- package/lib/module/ads/MobileAd.js.map +1 -0
- package/lib/module/ads/RewardedAd.js +155 -0
- package/lib/module/ads/RewardedAd.js.map +1 -0
- package/lib/module/common/Base64.js +106 -0
- package/lib/module/common/Base64.js.map +1 -0
- package/lib/module/common/MutatableParams.js +52 -0
- package/lib/module/common/MutatableParams.js.map +1 -0
- package/lib/module/common/ReferenceBase.js +50 -0
- package/lib/module/common/ReferenceBase.js.map +1 -0
- package/lib/module/common/deeps.js +91 -0
- package/lib/module/common/deeps.js.map +1 -0
- package/lib/module/common/id.js +74 -0
- package/lib/module/common/id.js.map +1 -0
- package/lib/module/common/index.js +109 -0
- package/lib/module/common/index.js.map +1 -0
- package/lib/module/common/path.js +120 -0
- package/lib/module/common/path.js.map +1 -0
- package/lib/module/common/promise.js +60 -0
- package/lib/module/common/promise.js.map +1 -0
- package/lib/module/common/serialize.js +41 -0
- package/lib/module/common/serialize.js.map +1 -0
- package/lib/module/common/validate.js +197 -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/index.js +33 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/internal/GoogleMobileAdsNativeEventEmitter.js +83 -0
- package/lib/module/internal/GoogleMobileAdsNativeEventEmitter.js.map +1 -0
- package/lib/module/internal/Module.js +64 -0
- package/lib/module/internal/Module.js.map +1 -0
- package/lib/module/internal/NativeError.js +61 -0
- package/lib/module/internal/NativeError.js.map +1 -0
- package/lib/module/internal/SharedEventEmitter.js +20 -0
- package/lib/module/internal/SharedEventEmitter.js.map +1 -0
- package/lib/module/internal/constants.js +20 -0
- package/lib/module/internal/constants.js.map +1 -0
- package/lib/module/internal/index.js +21 -0
- package/lib/module/internal/index.js.map +1 -0
- package/lib/module/internal/registry/nativeModule.js +215 -0
- package/lib/module/internal/registry/nativeModule.js.map +1 -0
- package/lib/module/types/AdEventListener.js +2 -0
- package/lib/module/types/AdEventListener.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/AdapterStatus.js +10 -0
- package/lib/module/types/AdapterStatus.js.map +1 -0
- package/lib/module/types/AdsConsent.interface.js +2 -0
- package/lib/module/types/AdsConsent.interface.js.map +1 -0
- package/lib/module/types/BannerAdProps.js +2 -0
- package/lib/module/types/BannerAdProps.js.map +1 -0
- package/lib/module/types/GoogleMobileAdsNativeModule.js +2 -0
- package/lib/module/types/GoogleMobileAdsNativeModule.js.map +1 -0
- package/lib/module/types/MobileAd.interface.js +2 -0
- package/lib/module/types/MobileAd.interface.js.map +1 -0
- package/lib/module/types/MobileAdsModule.interface.js +2 -0
- package/lib/module/types/MobileAdsModule.interface.js.map +1 -0
- package/lib/module/types/Module.interface.js +2 -0
- package/lib/module/types/Module.interface.js.map +1 -0
- package/lib/module/types/RequestConfiguration.js +2 -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/validateAdRequestConfiguration.js +60 -0
- package/lib/module/validateAdRequestConfiguration.js.map +1 -0
- package/lib/module/validateAdRequestOptions.js +150 -0
- package/lib/module/validateAdRequestOptions.js.map +1 -0
- package/lib/module/validateAdShowOptions.js +39 -0
- package/lib/module/validateAdShowOptions.js.map +1 -0
- package/lib/module/version.js +3 -0
- package/lib/module/version.js.map +1 -0
- package/lib/typescript/AdEventType.d.ts +47 -0
- package/lib/typescript/AdsConsent.d.ts +2 -0
- package/lib/typescript/AdsConsentDebugGeography.d.ts +19 -0
- package/lib/typescript/AdsConsentStatus.d.ts +17 -0
- package/lib/typescript/BannerAdSize.d.ts +34 -0
- package/lib/typescript/MaxAdContentRating.d.ts +18 -0
- package/lib/typescript/MobileAds.d.ts +11 -0
- package/lib/typescript/RewardedAdEventType.d.ts +46 -0
- package/lib/typescript/TestIds.d.ts +6 -0
- package/lib/typescript/ads/AppOpenAd.d.ts +11 -0
- package/lib/typescript/ads/BannerAd.d.ts +3 -0
- package/lib/typescript/ads/InterstitialAd.d.ts +78 -0
- package/lib/typescript/ads/MobileAd.d.ts +32 -0
- package/lib/typescript/ads/RewardedAd.d.ts +84 -0
- package/lib/typescript/common/Base64.d.ts +14 -0
- package/lib/typescript/common/MutatableParams.d.ts +9 -0
- package/lib/typescript/common/ReferenceBase.d.ts +11 -0
- package/lib/typescript/common/deeps.d.ts +18 -0
- package/lib/typescript/common/id.d.ts +11 -0
- package/lib/typescript/common/index.d.ts +28 -0
- package/lib/typescript/common/path.d.ts +43 -0
- package/lib/typescript/common/promise.d.ts +13 -0
- package/lib/typescript/common/serialize.d.ts +5 -0
- package/lib/typescript/common/validate.d.ts +90 -0
- package/lib/typescript/index.d.ts +14 -0
- package/lib/typescript/internal/GoogleMobileAdsNativeEventEmitter.d.ts +12 -0
- package/lib/typescript/internal/Module.d.ts +13 -0
- package/lib/typescript/internal/NativeError.d.ts +26 -0
- package/lib/typescript/internal/SharedEventEmitter.d.ts +2 -0
- package/lib/typescript/internal/constants.d.ts +3 -0
- package/lib/typescript/internal/index.d.ts +4 -0
- package/lib/typescript/internal/registry/nativeModule.d.ts +15 -0
- package/lib/typescript/types/AdEventListener.d.ts +11 -0
- package/lib/typescript/types/AdShowOptions.d.ts +12 -0
- package/lib/typescript/types/AdapterStatus.d.ts +18 -0
- package/lib/typescript/types/AdsConsent.interface.d.ts +286 -0
- package/lib/typescript/types/BannerAdProps.d.ts +66 -0
- package/lib/typescript/types/GoogleMobileAdsNativeModule.d.ts +14 -0
- package/lib/typescript/types/MobileAd.interface.d.ts +64 -0
- package/lib/typescript/types/MobileAdsModule.interface.d.ts +38 -0
- package/lib/typescript/types/Module.interface.d.ts +14 -0
- package/lib/typescript/types/RequestConfiguration.d.ts +36 -0
- package/lib/typescript/types/RequestOptions.d.ts +106 -0
- package/lib/typescript/types/RewardedAdReward.d.ts +13 -0
- package/lib/typescript/validateAdRequestConfiguration.d.ts +2 -0
- package/lib/typescript/validateAdRequestOptions.d.ts +2 -0
- package/lib/typescript/validateAdShowOptions.d.ts +2 -0
- package/lib/typescript/version.d.ts +1 -0
- package/package.json +143 -0
- package/react-native.config.js +19 -0
- package/src/AdEventType.ts +68 -0
- package/src/AdsConsent.ts +191 -0
- package/src/AdsConsentDebugGeography.ts +38 -0
- package/src/AdsConsentStatus.ts +36 -0
- package/src/BannerAdSize.ts +59 -0
- package/src/MaxAdContentRating.ts +38 -0
- package/src/MobileAds.ts +84 -0
- package/src/RewardedAdEventType.ts +64 -0
- package/src/TestIds.ts +39 -0
- package/src/ads/AppOpenAd.ts +85 -0
- package/src/ads/BannerAd.tsx +126 -0
- package/src/ads/InterstitialAd.ts +156 -0
- package/src/ads/MobileAd.ts +101 -0
- package/src/ads/RewardedAd.ts +161 -0
- package/src/common/Base64.ts +114 -0
- package/src/common/MutatableParams.ts +50 -0
- package/src/common/ReferenceBase.ts +45 -0
- package/src/common/deeps.ts +88 -0
- package/src/common/id.ts +74 -0
- package/src/common/index.ts +103 -0
- package/src/common/path.ts +114 -0
- package/src/common/promise.ts +66 -0
- package/src/common/serialize.ts +43 -0
- package/src/common/validate.ts +205 -0
- package/src/declarations.d.ts +3 -0
- package/src/index.ts +35 -0
- package/src/internal/GoogleMobileAdsNativeEventEmitter.ts +81 -0
- package/src/internal/Module.ts +58 -0
- package/src/internal/NativeError.ts +56 -0
- package/src/internal/SharedEventEmitter.ts +22 -0
- package/src/internal/constants.ts +43 -0
- package/src/internal/index.ts +21 -0
- package/src/internal/registry/nativeModule.ts +226 -0
- package/src/types/AdEventListener.ts +16 -0
- package/src/types/AdShowOptions.ts +12 -0
- package/src/types/AdapterStatus.ts +20 -0
- package/src/types/AdsConsent.interface.ts +306 -0
- package/src/types/BannerAdProps.ts +73 -0
- package/src/types/GoogleMobileAdsNativeModule.ts +15 -0
- package/src/types/MobileAd.interface.ts +69 -0
- package/src/types/MobileAdsModule.interface.ts +43 -0
- package/src/types/Module.interface.ts +16 -0
- package/src/types/RequestConfiguration.ts +40 -0
- package/src/types/RequestOptions.ts +113 -0
- package/src/types/RewardedAdReward.ts +14 -0
- package/src/validateAdRequestConfiguration.ts +71 -0
- package/src/validateAdRequestOptions.ts +168 -0
- package/src/validateAdShowOptions.ts +41 -0
- package/src/version.ts +2 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
package io.invertase.googlemobileads;
|
|
2
|
+
|
|
3
|
+
import static io.invertase.googlemobileads.ReactNativeGoogleMobileAdsCommon.getCodeAndMessageFromAdError;
|
|
4
|
+
import static io.invertase.googlemobileads.ReactNativeGoogleMobileAdsCommon.sendAdEvent;
|
|
5
|
+
import static io.invertase.googlemobileads.ReactNativeGoogleMobileAdsEvent.GOOGLE_MOBILE_ADS_EVENT_CLOSED;
|
|
6
|
+
import static io.invertase.googlemobileads.ReactNativeGoogleMobileAdsEvent.GOOGLE_MOBILE_ADS_EVENT_ERROR;
|
|
7
|
+
import static io.invertase.googlemobileads.ReactNativeGoogleMobileAdsEvent.GOOGLE_MOBILE_ADS_EVENT_OPENED;
|
|
8
|
+
import static io.invertase.googlemobileads.ReactNativeGoogleMobileAdsEvent.GOOGLE_MOBILE_ADS_EVENT_REWARDED_EARNED_REWARD;
|
|
9
|
+
import static io.invertase.googlemobileads.ReactNativeGoogleMobileAdsEvent.GOOGLE_MOBILE_ADS_EVENT_REWARDED_LOADED;
|
|
10
|
+
|
|
11
|
+
import android.app.Activity;
|
|
12
|
+
import android.util.SparseArray;
|
|
13
|
+
import androidx.annotation.NonNull;
|
|
14
|
+
import androidx.annotation.Nullable;
|
|
15
|
+
import com.facebook.react.bridge.Arguments;
|
|
16
|
+
import com.facebook.react.bridge.Promise;
|
|
17
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
18
|
+
import com.facebook.react.bridge.ReactMethod;
|
|
19
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
20
|
+
import com.facebook.react.bridge.WritableMap;
|
|
21
|
+
import com.google.android.gms.ads.AdRequest;
|
|
22
|
+
import com.google.android.gms.ads.FullScreenContentCallback;
|
|
23
|
+
import com.google.android.gms.ads.LoadAdError;
|
|
24
|
+
import com.google.android.gms.ads.OnUserEarnedRewardListener;
|
|
25
|
+
import com.google.android.gms.ads.rewarded.RewardItem;
|
|
26
|
+
import com.google.android.gms.ads.rewarded.RewardedAd;
|
|
27
|
+
import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback;
|
|
28
|
+
import com.google.android.gms.ads.rewarded.ServerSideVerificationOptions;
|
|
29
|
+
import io.invertase.googlemobileads.common.ReactNativeModule;
|
|
30
|
+
|
|
31
|
+
public class ReactNativeGoogleMobileAdsRewardedModule extends ReactNativeModule {
|
|
32
|
+
private static final String SERVICE = "RNGoogleMobileAdsRewardedModule";
|
|
33
|
+
private static SparseArray<RewardedAd> rewardedAdArray = new SparseArray<>();
|
|
34
|
+
|
|
35
|
+
public ReactNativeGoogleMobileAdsRewardedModule(ReactApplicationContext reactContext) {
|
|
36
|
+
super(reactContext, SERVICE);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
private void sendRewardedEvent(
|
|
40
|
+
String type,
|
|
41
|
+
int requestId,
|
|
42
|
+
String adUnitId,
|
|
43
|
+
@Nullable WritableMap error,
|
|
44
|
+
@Nullable WritableMap data) {
|
|
45
|
+
sendAdEvent(
|
|
46
|
+
ReactNativeGoogleMobileAdsEvent.GOOGLE_MOBILE_ADS_EVENT_REWARDED,
|
|
47
|
+
requestId,
|
|
48
|
+
type,
|
|
49
|
+
adUnitId,
|
|
50
|
+
error,
|
|
51
|
+
data);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@ReactMethod
|
|
55
|
+
public void rewardedLoad(int requestId, String adUnitId, ReadableMap adRequestOptions) {
|
|
56
|
+
Activity activity = getCurrentActivity();
|
|
57
|
+
if (activity == null) {
|
|
58
|
+
WritableMap error = Arguments.createMap();
|
|
59
|
+
error.putString("code", "null-activity");
|
|
60
|
+
error.putString(
|
|
61
|
+
"message", "Rewarded ad attempted to load but the current Activity was null.");
|
|
62
|
+
sendRewardedEvent(GOOGLE_MOBILE_ADS_EVENT_ERROR, requestId, adUnitId, error, null);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
activity.runOnUiThread(
|
|
66
|
+
() -> {
|
|
67
|
+
AdRequest adRequest = new AdRequest.Builder().build();
|
|
68
|
+
|
|
69
|
+
RewardedAdLoadCallback rewardedAdLoadCallback =
|
|
70
|
+
new RewardedAdLoadCallback() {
|
|
71
|
+
@Override
|
|
72
|
+
public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
|
|
73
|
+
WritableMap error = Arguments.createMap();
|
|
74
|
+
String[] codeAndMessage = getCodeAndMessageFromAdError(loadAdError);
|
|
75
|
+
error.putString("code", codeAndMessage[0]);
|
|
76
|
+
error.putString("message", codeAndMessage[1]);
|
|
77
|
+
sendRewardedEvent(
|
|
78
|
+
GOOGLE_MOBILE_ADS_EVENT_ERROR, requestId, adUnitId, error, null);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
@Override
|
|
82
|
+
public void onAdLoaded(@NonNull RewardedAd rewardedAd) {
|
|
83
|
+
RewardItem rewardItem = rewardedAd.getRewardItem();
|
|
84
|
+
WritableMap data = Arguments.createMap();
|
|
85
|
+
data.putString("type", rewardItem.getType());
|
|
86
|
+
data.putInt("amount", rewardItem.getAmount());
|
|
87
|
+
|
|
88
|
+
if (adRequestOptions.hasKey("serverSideVerificationOptions")) {
|
|
89
|
+
ReadableMap serverSideVerificationOptions =
|
|
90
|
+
adRequestOptions.getMap("serverSideVerificationOptions");
|
|
91
|
+
|
|
92
|
+
if (serverSideVerificationOptions != null) {
|
|
93
|
+
ServerSideVerificationOptions.Builder options =
|
|
94
|
+
new ServerSideVerificationOptions.Builder();
|
|
95
|
+
|
|
96
|
+
if (serverSideVerificationOptions.hasKey("userId")) {
|
|
97
|
+
options.setUserId(serverSideVerificationOptions.getString("userId"));
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (serverSideVerificationOptions.hasKey("customData")) {
|
|
101
|
+
options.setCustomData(
|
|
102
|
+
serverSideVerificationOptions.getString("customData"));
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
rewardedAd.setServerSideVerificationOptions(options.build());
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
FullScreenContentCallback fullScreenContentCallback =
|
|
110
|
+
new FullScreenContentCallback() {
|
|
111
|
+
@Override
|
|
112
|
+
public void onAdShowedFullScreenContent() {
|
|
113
|
+
sendRewardedEvent(
|
|
114
|
+
GOOGLE_MOBILE_ADS_EVENT_OPENED, requestId, adUnitId, null, null);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
@Override
|
|
118
|
+
public void onAdDismissedFullScreenContent() {
|
|
119
|
+
sendRewardedEvent(
|
|
120
|
+
GOOGLE_MOBILE_ADS_EVENT_CLOSED, requestId, adUnitId, null, null);
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
rewardedAd.setFullScreenContentCallback(fullScreenContentCallback);
|
|
125
|
+
|
|
126
|
+
rewardedAdArray.put(requestId, rewardedAd);
|
|
127
|
+
sendRewardedEvent(
|
|
128
|
+
GOOGLE_MOBILE_ADS_EVENT_REWARDED_LOADED, requestId, adUnitId, null, data);
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
RewardedAd.load(activity, adUnitId, adRequest, rewardedAdLoadCallback);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
@ReactMethod
|
|
137
|
+
public void rewardedShow(
|
|
138
|
+
int requestId, String adUnitId, ReadableMap showOptions, Promise promise) {
|
|
139
|
+
if (getCurrentActivity() == null) {
|
|
140
|
+
rejectPromiseWithCodeAndMessage(
|
|
141
|
+
promise,
|
|
142
|
+
"null-activity",
|
|
143
|
+
"Rewarded ad attempted to show but the current Activity was null.");
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
getCurrentActivity()
|
|
147
|
+
.runOnUiThread(
|
|
148
|
+
() -> {
|
|
149
|
+
RewardedAd rewardedAd = rewardedAdArray.get(requestId);
|
|
150
|
+
|
|
151
|
+
boolean immersiveModeEnabled = false;
|
|
152
|
+
if (showOptions.hasKey("immersiveModeEnabled")) {
|
|
153
|
+
immersiveModeEnabled = showOptions.getBoolean("immersiveModeEnabled");
|
|
154
|
+
}
|
|
155
|
+
rewardedAd.setImmersiveMode(immersiveModeEnabled);
|
|
156
|
+
|
|
157
|
+
OnUserEarnedRewardListener onUserEarnedRewardListener =
|
|
158
|
+
new OnUserEarnedRewardListener() {
|
|
159
|
+
@Override
|
|
160
|
+
public void onUserEarnedReward(@NonNull RewardItem rewardItem) {
|
|
161
|
+
WritableMap data = Arguments.createMap();
|
|
162
|
+
data.putString("type", rewardItem.getType());
|
|
163
|
+
data.putInt("amount", rewardItem.getAmount());
|
|
164
|
+
sendRewardedEvent(
|
|
165
|
+
GOOGLE_MOBILE_ADS_EVENT_REWARDED_EARNED_REWARD,
|
|
166
|
+
requestId,
|
|
167
|
+
adUnitId,
|
|
168
|
+
null,
|
|
169
|
+
data);
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
rewardedAd.show(getCurrentActivity(), onUserEarnedRewardListener);
|
|
174
|
+
promise.resolve(null);
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
package io.invertase.googlemobileads.common;
|
|
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.util.Log;
|
|
21
|
+
import com.facebook.react.bridge.Arguments;
|
|
22
|
+
import com.facebook.react.bridge.ReadableArray;
|
|
23
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
24
|
+
import com.facebook.react.bridge.WritableMap;
|
|
25
|
+
import java.util.List;
|
|
26
|
+
import java.util.Map;
|
|
27
|
+
import javax.annotation.Nullable;
|
|
28
|
+
|
|
29
|
+
/** Utilities to convert to and from React Native bridge formats. */
|
|
30
|
+
public class RCTConvert {
|
|
31
|
+
private static String TAG = "RCTConvert";
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Takes a value and calls the appropriate setter for its type on the target map + key
|
|
35
|
+
*
|
|
36
|
+
* @param key String key to set on target map
|
|
37
|
+
* @param value Object value to set on target map
|
|
38
|
+
* @param map WritableMap target map to write the value to
|
|
39
|
+
*/
|
|
40
|
+
@SuppressWarnings("unchecked")
|
|
41
|
+
public static WritableMap mapPutValue(String key, @Nullable Object value, WritableMap map) {
|
|
42
|
+
if (value == null) {
|
|
43
|
+
map.putNull(key);
|
|
44
|
+
return map;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
String type = value.getClass().getName();
|
|
48
|
+
|
|
49
|
+
switch (type) {
|
|
50
|
+
case "java.lang.Boolean":
|
|
51
|
+
map.putBoolean(key, (Boolean) value);
|
|
52
|
+
break;
|
|
53
|
+
case "java.lang.Long":
|
|
54
|
+
Long longVal = (Long) value;
|
|
55
|
+
map.putDouble(key, (double) longVal);
|
|
56
|
+
break;
|
|
57
|
+
case "java.lang.Float":
|
|
58
|
+
float floatVal = (float) value;
|
|
59
|
+
map.putDouble(key, (double) floatVal);
|
|
60
|
+
break;
|
|
61
|
+
case "java.lang.Double":
|
|
62
|
+
map.putDouble(key, (Double) value);
|
|
63
|
+
break;
|
|
64
|
+
case "java.lang.Integer":
|
|
65
|
+
map.putInt(key, (int) value);
|
|
66
|
+
break;
|
|
67
|
+
case "java.lang.String":
|
|
68
|
+
map.putString(key, (String) value);
|
|
69
|
+
break;
|
|
70
|
+
case "org.json.JSONObject$1":
|
|
71
|
+
map.putString(key, value.toString());
|
|
72
|
+
break;
|
|
73
|
+
default:
|
|
74
|
+
if (List.class.isAssignableFrom(value.getClass())) {
|
|
75
|
+
map.putArray(key, Arguments.makeNativeArray((List<Object>) value));
|
|
76
|
+
} else if (Map.class.isAssignableFrom(value.getClass())) {
|
|
77
|
+
WritableMap childMap = Arguments.createMap();
|
|
78
|
+
Map<String, Object> valueMap = (Map<String, Object>) value;
|
|
79
|
+
|
|
80
|
+
for (Map.Entry<String, Object> entry : valueMap.entrySet()) {
|
|
81
|
+
mapPutValue(entry.getKey(), entry.getValue(), childMap);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
map.putMap(key, childMap);
|
|
85
|
+
} else {
|
|
86
|
+
Log.d(TAG, "utils:mapPutValue:unknownType:" + type);
|
|
87
|
+
map.putNull(key);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return map;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// TODO Remove me - also in SharedUtils
|
|
95
|
+
public static WritableMap readableMapToWritableMap(ReadableMap map) {
|
|
96
|
+
WritableMap writableMap = Arguments.createMap();
|
|
97
|
+
// https://github.com/facebook/react-native/blob/main/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableNativeMap.java#L58
|
|
98
|
+
writableMap.merge(map);
|
|
99
|
+
return writableMap;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
public static Map<String, Object> toHashMap(ReadableMap readableMap) {
|
|
103
|
+
// https://github.com/facebook/react-native/blob/main/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableNativeMap.java#L263
|
|
104
|
+
return readableMap.toHashMap();
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
public static List<Object> toArrayList(ReadableArray readableArray) {
|
|
108
|
+
// https://github.com/facebook/react-native/blob/main/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableNativeArray.java#L140
|
|
109
|
+
return readableArray.toArrayList();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
package io.invertase.googlemobileads.common;
|
|
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.content.Context;
|
|
21
|
+
import android.util.Log;
|
|
22
|
+
|
|
23
|
+
public class ReactNativeApp {
|
|
24
|
+
private static Context applicationContext;
|
|
25
|
+
|
|
26
|
+
public static Context getApplicationContext() {
|
|
27
|
+
return applicationContext;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public static void setApplicationContext(Context applicationContext) {
|
|
31
|
+
Log.d("ReactNativeApp", "received application context.");
|
|
32
|
+
ReactNativeApp.applicationContext = applicationContext;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
package io.invertase.googlemobileads.common;
|
|
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 com.facebook.react.bridge.WritableMap;
|
|
21
|
+
import io.invertase.googlemobileads.interfaces.NativeEvent;
|
|
22
|
+
|
|
23
|
+
public class ReactNativeEvent implements NativeEvent {
|
|
24
|
+
private String eventName;
|
|
25
|
+
private WritableMap eventBody;
|
|
26
|
+
|
|
27
|
+
public ReactNativeEvent(String eventName, WritableMap eventBody) {
|
|
28
|
+
this.eventName = eventName;
|
|
29
|
+
this.eventBody = eventBody;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@Override
|
|
33
|
+
public String getEventName() {
|
|
34
|
+
return eventName;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@Override
|
|
38
|
+
public WritableMap getEventBody() {
|
|
39
|
+
return eventBody;
|
|
40
|
+
}
|
|
41
|
+
}
|
package/android/src/main/java/io/invertase/googlemobileads/common/ReactNativeEventEmitter.java
ADDED
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
package io.invertase.googlemobileads.common;
|
|
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.Handler;
|
|
21
|
+
import android.os.Looper;
|
|
22
|
+
import android.util.Log;
|
|
23
|
+
import androidx.annotation.MainThread;
|
|
24
|
+
import com.facebook.react.bridge.Arguments;
|
|
25
|
+
import com.facebook.react.bridge.ReactContext;
|
|
26
|
+
import com.facebook.react.bridge.WritableMap;
|
|
27
|
+
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
|
28
|
+
import io.invertase.googlemobileads.interfaces.NativeEvent;
|
|
29
|
+
import java.util.ArrayList;
|
|
30
|
+
import java.util.HashMap;
|
|
31
|
+
import java.util.List;
|
|
32
|
+
|
|
33
|
+
public class ReactNativeEventEmitter {
|
|
34
|
+
private static ReactNativeEventEmitter sharedInstance = new ReactNativeEventEmitter();
|
|
35
|
+
private final List<NativeEvent> queuedEvents = new ArrayList<>();
|
|
36
|
+
private final Handler handler = new Handler(Looper.getMainLooper());
|
|
37
|
+
private final HashMap<String, Integer> jsListeners = new HashMap<>();
|
|
38
|
+
private ReactContext reactContext;
|
|
39
|
+
private Boolean jsReady = false;
|
|
40
|
+
private int jsListenerCount;
|
|
41
|
+
|
|
42
|
+
public static ReactNativeEventEmitter getSharedInstance() {
|
|
43
|
+
return sharedInstance;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
public void attachReactContext(final ReactContext reactContext) {
|
|
47
|
+
handler.post(
|
|
48
|
+
() -> {
|
|
49
|
+
ReactNativeEventEmitter.this.reactContext = reactContext;
|
|
50
|
+
sendQueuedEvents();
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
public void notifyJsReady(Boolean ready) {
|
|
55
|
+
handler.post(
|
|
56
|
+
() -> {
|
|
57
|
+
jsReady = ready;
|
|
58
|
+
sendQueuedEvents();
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
public void sendEvent(final NativeEvent event) {
|
|
63
|
+
handler.post(
|
|
64
|
+
() -> {
|
|
65
|
+
synchronized (jsListeners) {
|
|
66
|
+
if (!jsListeners.containsKey(event.getEventName()) || !emit(event)) {
|
|
67
|
+
queuedEvents.add(event);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
public void addListener(String eventName) {
|
|
74
|
+
synchronized (jsListeners) {
|
|
75
|
+
jsListenerCount++;
|
|
76
|
+
if (!jsListeners.containsKey(eventName)) {
|
|
77
|
+
jsListeners.put(eventName, 1);
|
|
78
|
+
} else {
|
|
79
|
+
int listenersForEvent = jsListeners.get(eventName);
|
|
80
|
+
jsListeners.put(eventName, listenersForEvent + 1);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
handler.post(this::sendQueuedEvents);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
public void removeListener(String eventName, Boolean all) {
|
|
88
|
+
synchronized (jsListeners) {
|
|
89
|
+
if (jsListeners.containsKey(eventName)) {
|
|
90
|
+
int listenersForEvent = jsListeners.get(eventName);
|
|
91
|
+
|
|
92
|
+
if (listenersForEvent <= 1 || all) {
|
|
93
|
+
jsListeners.remove(eventName);
|
|
94
|
+
} else {
|
|
95
|
+
jsListeners.put(eventName, listenersForEvent - 1);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
jsListenerCount -= all ? listenersForEvent : 1;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
public WritableMap getListenersMap() {
|
|
104
|
+
WritableMap writableMap = Arguments.createMap();
|
|
105
|
+
WritableMap events = Arguments.createMap();
|
|
106
|
+
|
|
107
|
+
writableMap.putInt("listeners", jsListenerCount);
|
|
108
|
+
writableMap.putInt("queued", queuedEvents.size());
|
|
109
|
+
|
|
110
|
+
synchronized (jsListeners) {
|
|
111
|
+
for (HashMap.Entry<String, Integer> entry : jsListeners.entrySet()) {
|
|
112
|
+
events.putInt(entry.getKey(), entry.getValue());
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
writableMap.putMap("events", events);
|
|
117
|
+
|
|
118
|
+
return writableMap;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
@MainThread
|
|
122
|
+
private void sendQueuedEvents() {
|
|
123
|
+
synchronized (jsListeners) {
|
|
124
|
+
for (NativeEvent event : new ArrayList<>(queuedEvents)) {
|
|
125
|
+
if (jsListeners.containsKey(event.getEventName())) {
|
|
126
|
+
queuedEvents.remove(event);
|
|
127
|
+
sendEvent(event);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
@MainThread
|
|
134
|
+
private boolean emit(final NativeEvent event) {
|
|
135
|
+
if (!jsReady || reactContext == null || !reactContext.hasActiveCatalystInstance()) {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
try {
|
|
140
|
+
reactContext
|
|
141
|
+
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
|
|
142
|
+
.emit("rnapp_" + event.getEventName(), event.getEventBody());
|
|
143
|
+
} catch (Exception e) {
|
|
144
|
+
Log.wtf("RN_EVENT_EMITTER", "Error sending Event " + event.getEventName(), e);
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
}
|
package/android/src/main/java/io/invertase/googlemobileads/common/ReactNativeInitProvider.java
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
package io.invertase.googlemobileads.common;
|
|
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.content.ContentProvider;
|
|
21
|
+
import android.content.ContentValues;
|
|
22
|
+
import android.content.Context;
|
|
23
|
+
import android.content.pm.ProviderInfo;
|
|
24
|
+
import android.database.Cursor;
|
|
25
|
+
import android.net.Uri;
|
|
26
|
+
import androidx.annotation.Nullable;
|
|
27
|
+
import javax.annotation.OverridingMethodsMustInvokeSuper;
|
|
28
|
+
|
|
29
|
+
public class ReactNativeInitProvider extends ContentProvider {
|
|
30
|
+
@Override
|
|
31
|
+
public void attachInfo(Context context, ProviderInfo info) {
|
|
32
|
+
super.attachInfo(context, info);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@Override
|
|
36
|
+
@OverridingMethodsMustInvokeSuper
|
|
37
|
+
public boolean onCreate() {
|
|
38
|
+
if (ReactNativeApp.getApplicationContext() == null) {
|
|
39
|
+
Context applicationContext = getContext();
|
|
40
|
+
if (applicationContext != null && applicationContext.getApplicationContext() != null) {
|
|
41
|
+
applicationContext = applicationContext.getApplicationContext();
|
|
42
|
+
}
|
|
43
|
+
ReactNativeApp.setApplicationContext(applicationContext);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@Nullable
|
|
50
|
+
@Override
|
|
51
|
+
public Cursor query(
|
|
52
|
+
Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@Nullable
|
|
57
|
+
@Override
|
|
58
|
+
public String getType(Uri uri) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
@Nullable
|
|
63
|
+
@Override
|
|
64
|
+
public Uri insert(Uri uri, ContentValues values) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@Override
|
|
69
|
+
public int delete(Uri uri, String selection, String[] selectionArgs) {
|
|
70
|
+
return 0;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
@Override
|
|
74
|
+
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
|
|
75
|
+
return 0;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
package io.invertase.googlemobileads.common;
|
|
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 com.facebook.react.bridge.Arguments;
|
|
21
|
+
import com.facebook.react.bridge.WritableMap;
|
|
22
|
+
import io.invertase.googlemobileads.BuildConfig;
|
|
23
|
+
import java.util.ArrayList;
|
|
24
|
+
import org.json.JSONArray;
|
|
25
|
+
import org.json.JSONException;
|
|
26
|
+
import org.json.JSONObject;
|
|
27
|
+
|
|
28
|
+
public class ReactNativeJSON {
|
|
29
|
+
private static ReactNativeJSON sharedInstance = new ReactNativeJSON();
|
|
30
|
+
|
|
31
|
+
private JSONObject jsonObject;
|
|
32
|
+
|
|
33
|
+
private ReactNativeJSON() {
|
|
34
|
+
try {
|
|
35
|
+
jsonObject = new JSONObject(BuildConfig.GOOGLE_MOBILE_ADS_JSON_RAW);
|
|
36
|
+
} catch (JSONException e) {
|
|
37
|
+
// JSON is validated as part of gradle build - should never error
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
public static ReactNativeJSON getSharedInstance() {
|
|
42
|
+
return sharedInstance;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public boolean contains(String key) {
|
|
46
|
+
if (jsonObject == null) return false;
|
|
47
|
+
return jsonObject.has(key);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
public boolean getBooleanValue(String key, boolean defaultValue) {
|
|
51
|
+
if (jsonObject == null) return defaultValue;
|
|
52
|
+
return jsonObject.optBoolean(key, defaultValue);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
public int getIntValue(String key, int defaultValue) {
|
|
56
|
+
if (jsonObject == null) return defaultValue;
|
|
57
|
+
return jsonObject.optInt(key, defaultValue);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
public long getLongValue(String key, long defaultValue) {
|
|
61
|
+
if (jsonObject == null) return defaultValue;
|
|
62
|
+
return jsonObject.optLong(key, defaultValue);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
public String getStringValue(String key, String defaultValue) {
|
|
66
|
+
if (jsonObject == null) return defaultValue;
|
|
67
|
+
return jsonObject.optString(key, defaultValue);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
public ArrayList<String> getArrayValue(String key) {
|
|
71
|
+
ArrayList<String> result = new ArrayList<String>();
|
|
72
|
+
if (jsonObject == null) return result;
|
|
73
|
+
|
|
74
|
+
try {
|
|
75
|
+
JSONArray array = jsonObject.optJSONArray(key);
|
|
76
|
+
if (array != null) {
|
|
77
|
+
for (int i = 0; i < array.length(); i++) {
|
|
78
|
+
result.add(array.getString(i));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
} catch (JSONException e) {
|
|
82
|
+
// do nothing
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
public String getRawJSON() {
|
|
89
|
+
return BuildConfig.GOOGLE_MOBILE_ADS_JSON_RAW;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
public WritableMap getAll() {
|
|
93
|
+
WritableMap writableMap = Arguments.createMap();
|
|
94
|
+
|
|
95
|
+
JSONArray keys = jsonObject.names();
|
|
96
|
+
for (int i = 0; i < keys.length(); ++i) {
|
|
97
|
+
try {
|
|
98
|
+
String key = keys.getString(i);
|
|
99
|
+
SharedUtils.mapPutValue(key, jsonObject.get(key), writableMap);
|
|
100
|
+
} catch (JSONException e) {
|
|
101
|
+
// ignore
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return writableMap;
|
|
106
|
+
}
|
|
107
|
+
}
|