Cordova Plugin Admob Android and IOS
[!WARNING]
- emi-indo-cordova-plugin-admob@1.5.2 or higher
- Minimum supported Xcode version up to 15.3 or higher
- minimum deployment-target: 12.2
Minimum macOS | Xcode, and others
- minimum macOS 14.4 or higher
- Xcode min 15.3 > or higher
- Command Line Tools 15.3 or higher
- minimum SwiftVersion: 5.10 or higher
- Everything is included in plugin.xml
- SKAdNetworkIdentifier Deprecated
- Dependency: pod MerchantKit (not needed)
[!WARNING]
- emi-indo-cordova-plugin-admob@1.5.1
- Minimum supported Xcode version to 14.3
- Maximum supported Xcode version up to 15.2
Minimum macOS | Xcode, and others
- Monterey
- Xcode min 14.3 > max 15.2
- Command Line Tools 14.1 or higher https://developers.google.com/admob/ios/quick-start
Only platform Android
cordova plugin add emi-indo-cordova-plugin-admob --save --variable APP_ID_ANDROID=ca-app-pub-xxx~xxx
Only platform IOS
cordova plugin add emi-indo-cordova-plugin-admob --save --variable APP_ID_IOS=ca-app-pub-xxx~xxx
Platform Both
cordova plugin add emi-indo-cordova-plugin-admob --save --variable APP_ID_ANDROID=ca-app-pub-xxx~xxx --variable APP_ID_IOS=ca-app-pub-xxx~xxx
cordova plugin rm emi-indo-cordova-plugin-admob
[!NOTE]
- To prevent some warnings or errors in xcode later, it is best after adding platforms and plugins cd/project root/command line run cordova prepare.
- after that just cd platform/ios command line run pod install --repo-update
cordova.plugins.emiAdmobPlugin.initialize({ isUsingAdManagerRequest: true, // true = AdManagerAdRequest.Builder | false = AdRequest.Builder (Default true) isResponseInfo: true, // Default false (Debug true) isConsentDebug: true, // Default false (Debug true) } document.addEventListener('on.sdkInitialization', (data) => { // JSON.stringify(data) const sdkVersion = data.version; // const adAdapter = data.adapters; // const conStatus = data.consentStatus; // const gdprApplie = data.gdprApplies; // const purposeConsent = data.purposeConsents; // const vendorConsents = data.vendorConsents; // const conTCString = data.consentTCString; // const additionalConsent = data.additionalConsent; console.log("On Sdk Initialization version: " + sdkVersion); }); // Support Platform: Android | IOS cordova.plugins.emiAdmobPlugin.globalSettings({config_globalSettings}); // Optional cordova.plugins.emiAdmobPlugin.targeting({config_Targeting}); // Optional // UMP SDK 3.1.0 cordova.plugins.emiAdmobPlugin.getConsentRequest(); // (Platform: Both) // Deprecated cordova.plugins.emiAdmobPlugin.consentReset(); // (Platform: Both) // Optional cordova.plugins.emiAdmobPlugin.showPrivacyOptionsForm(); // (Platform: Both) // Optional // CMP SDK 2.2.0 // Optional cordova.plugins.emiAdmobPlugin.requestIDFA(); // UMP SDK to handle Apple's App Tracking Transparency (ATT) (Platform: IOS) cordova.plugins.emiAdmobPlugin.getIabTfc((IABTFC) => { console.log(JSONstringify(IABTFC)) }); // CMP SDK 2.2 (Platform: Both)
document.addEventListener("deviceready", function(){ document.addEventListener('on.sdkInitialization', (data) => { // JSON.stringify(data) const sdkVersion = data.version; // const adAdapter = data.adapters; const conStatus = data.consentStatus; // const gdprApplie = data.gdprApplies; // const purposeConsent = data.purposeConsents; // const vendorConsents = data.vendorConsents; // const conTCString = data.consentTCString; // const additionalConsent = data.additionalConsent; console.log("On Sdk Initialization version: " + data.consentStatus); console.log("On Consent Status: " + conStatus); }); // cordova.plugins.emiAdmobPlugin.getConsentRequest( (ststus) => { console.log("Consent Status: " + ststus) }); // Deprecated // cordova.plugins.emiAdmobPlugin.showPrivacyOptionsForm(); }, false);
on.get.consent.status
document.addEventListener('on.get.consent.status', () => { console.log("on get consent status"); });
on.getIabTfc on.TCString.expired on.TCString.remove
document.addEventListener('on.TCString.expired', () => { console.log("on TCString expires 360 days"); cordova.plugins.emiAdmobPlugin.consentReset(); });
Example Get Consent Status: index.html (Not yet updated)
Example requestIDFA: index.html (Not yet updated)
Example IABTFC: index.html (Not yet updated)
// Support Platform: Android | IOS cordova.plugins.emiAdmobPlugin.loadAppOpenAd({config}); cordova.plugins.emiAdmobPlugin.showAppOpenAd(); // default
cordova.plugins.emiAdmobPlugin.loadAppOpenAd({ adUnitId: App_Open_ID, autoShow: true }); ```
on.appOpenAd.loaded on.appOpenAd.failed.loaded on.appOpenAd.dismissed on.appOpenAd.failed.show on.appOpenAd.show on.appOpenAd.revenue (DEBUG) on.appOpenAd.responseInfo
document.addEventListener('on.appOpenAd.loaded', () => { console.log("On App Open Ad loaded"); });
cordova.plugins.emiAdmobPlugin.styleBannerAd({ padding: 50, margins: 50 }); // (Optional only android) cordova.plugins.emiAdmobPlugin.loadBannerAd({config}); cordova.plugins.emiAdmobPlugin.showBannerAd(); // default cordova.plugins.emiAdmobPlugin.hideBannerAd(); // default cordova.plugins.emiAdmobPlugin.removeBannerAd(); // default
``` const bannerConfig = { adUnitId: "ca-app-pub-3940256099942544/9214589741", //Banner_ID, position: "bottom-center", size: "responsive_adaptive", // autoResize: true (only responsive_adaptive) collapsible: "bottom", // position: top | bottom (disable, empty string) autoResize: true, // on.screen.rotated === orientation.portrait || on.screen.rotated === orientation.landscape autoShow: true, // boolean } cordova.plugins.emiAdmobPlugin.loadBannerAd(bannerConfig); ```
top-right top-center left center right bottom-center bottom-right
responsive_adaptive anchored_adaptive full_width_adaptive in_line_adaptive banner large_banner medium_rectangle full_banner leaderboard fluid
on.banner.load on.banner.failed.load on.banner.click on.banner.close on.banner.impression on.banner.open // new on.banner.revenue on.banner.remove on.banner.hide // new on.is.collapsible on.bannerAd.responseInfo
document.addEventListener('on.banner.load', () => { console.log("on banner load"); }); document.addEventListener('on.is.collapsible', function(event) { // bannerConfig collapsible: "bottom", // position: top | bottom (disable, empty string) console.log("Collapsible Status: " + event.collapsible); });
// Support Platform: Android | IOS cordova.plugins.emiAdmobPlugin.loadInterstitialAd({config}); cordova.plugins.emiAdmobPlugin.showInterstitialAd(); // default
cordova.plugins.emiAdmobPlugin.loadInterstitialAd({ adUnitId: "ca-app-pub-3940256099942544/1033173712", autoShow: true }); ```
on.interstitial.loaded on.interstitial.failed.load on.interstitial.click on.interstitial.dismissed on.interstitial.failed.show on.interstitial.impression on.interstitial.show // new on.interstitial.revenue on.interstitialAd.responseInfo
document.addEventListener('on.interstitial.loaded', () => { console.log("on interstitial Ad loaded"); }); // all events that contain the keyword dismissed there is a block to load the ad after it is closed by the user. // 'on.interstitial.dismissed' | 'on.rewardedInt.dismissed' | 'on.rewarded.dismissed' document.addEventListener('on.interstitial.dismissed', () => { console.log("on interstitial Ad dismissed"); console.log("you can load ads automatically after the ads are closed by users"); // loadInterstitialAd(); });
// Support Platform: Android | IOS cordova.plugins.emiAdmobPlugin.loadRewardedInterstitialAd({config}); cordova.plugins.emiAdmobPlugin.showRewardedInterstitialAd(); // default
cordova.plugins.emiAdmobPlugin.loadRewardedInterstitialAd({ adUnitId: Rewarded_Interstitial_ID, autoShow: true });
on.rewardedInt.loaded on.rewardedInt.failed.load on.rewardedInt.click on.rewardedInt.dismissed on.rewardedInt.failed.show on.rewardedInt.impression on.rewardedInt.showed on.rewardedInt.userEarnedReward // new on.rewardedInt.revenue on.rewardedInt.ad.skip on.rewardedIntAd.responseInfo
document.addEventListener('on.rewardedInt.loaded', () => { console.log("on rewarded Interstitial load"); }); // all events that contain the keyword dismissed there is a block to load the ad after it is closed by the user. // 'on.interstitial.dismissed' | 'on.rewardedInt.dismissed' | 'on.rewarded.dismissed' document.addEventListener('on.rewardedInt.dismissed', () => { console.log("on interstitial Ad dismissed"); console.log("you can load ads automatically after the ads are closed by users"); // loadRewardedInterstitialAd(); });
FULL Rewarded Interstitial basic: Not yet updated index.html
// Support Platform: Android | IOS cordova.plugins.emiAdmobPlugin.loadRewardedAd({config}); cordova.plugins.emiAdmobPlugin.showRewardedAd(); // default
cordova.plugins.emiAdmobPlugin.loadRewardedAd({ adUnitId: Rewarded_ID, autoShow: true });
on.rewarded.loaded on.rewarded.failed.load on.rewarded.click on.rewarded.dismissed on.rewarded.failed.show on.rewarded.impression on.rewarded.show on.reward.userEarnedReward // new on.rewarded.revenue on.rewarded.ad.skip on.rewardedAd.responseInfo
document.addEventListener('on.rewarded.loaded', () => { console.log("on rewarded Ad loaded"); }); // all events that contain the keyword dismissed there is a block to load the ad after it is closed by the user. // 'on.interstitial.dismissed' | 'on.rewardedInt.dismissed' | 'on.rewarded.dismissed' document.addEventListener('on.rewarded.dismissed', () => { console.log("on interstitial Ad dismissed"); console.log("you can load ads automatically after the ads are closed by users"); // loadRewardedAd(); });
[!WARNING]
- isUsingAdManagerRequest: true
- Must run before ad load
// Check documentation: https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting ``` const configAdRequest = { // enabled, disabled customTargetingEnabled: false, categoryExclusionsEnabled: false, ppIdEnabled: false, contentURLEnabled: false, brandSafetyEnabled: false, // set Value customTargetingValue: ["24", "25", "26"], // age categoryExclusionsValue: "automobile", // automobile or boat ppIdValue: "AB123456789", contentURLValue: "https://www.example.com", brandSafetyArr: ["https://www.mycontenturl1.com", "https://www.mycontenturl2.com"], } cordova.plugins.emiAdmobPlugin.targetingAdRequest(configAdRequest); ```
// Check documentation: https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting cordova.plugins.emiAdmobPlugin.setPersonalizationState({ setPersonalizationState: "disabled" // type string: disabled | enabled });
// Check documentation: https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting ``` cordova.plugins.emiAdmobPlugin.setPPS({ ppsEnabled: false, // enabled, disabled iabContent: "IAB_AUDIENCE_1_1", // Type string value: IAB_AUDIENCE_1_1 or IAB_CONTENT_2_2 ppsArrValue: [6,284], // type arr }); ```
// Check documentation: https://developers.google.com/ad-manager/mobile-ads-sdk/android/targeting ``` function callSetPPS(){ cordova.plugins.emiAdmobPlugin.setPPS({ ppsEnabled: true, // enabled, disabled iabContent: "IAB_AUDIENCE_1_1", // Type string value: IAB_AUDIENCE_1_1 or IAB_CONTENT_2_2 ppsArrValue: [6,284], // type arr }); } if (callSetPPS()){ cordova.plugins.emiAdmobPlugin.loadRewardedAd({ adUnitId: Rewarded_ID, autoShow: true }); } ```
[!NOTE]
- Is forcing the consent form to be displayed against admob policy? (I DON'T KNOW)
Method:
/*
Sometimes the consent form in IOS is difficult to display, because ATT has been set by the user, The problem is TCString null, causing very few admob ads to load, This method will force the consent form to be displayed, whatever the user's decision TCString will not be null.
*/
// Use your own logic, this is just an example
let userGdpr = null; // global Variable
let userTCString = null; // global Variable
document.addEventListener('on.sdkInitialization', (data) => {
userGdpr = data.gdprApplies;
userTCString = data.consentTCString;
});
if (userGdpr === 1 && userTCString === null){
cordova.plugins.emiAdmobPlugin.forceDisplayPrivacyForm();
}
on.screen.rotated on.orientation.portrait on.orientation.landscape