Skip to content
This repository has been archived by the owner on Apr 4, 2023. It is now read-only.

Commit

Permalink
Merge pull request #476 from svzi/master
Browse files Browse the repository at this point in the history
Moved AdMob init to firebase.init, added AdListener to showBanner()
  • Loading branch information
EddyVerbruggen authored Sep 8, 2017
2 parents 6b9c428 + 18f9983 commit 7b59855
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 45 deletions.
99 changes: 54 additions & 45 deletions firebase.android.js
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,12 @@ firebase.init = function (arg) {
});
}

// Firebase AdMob
if (typeof(com.google.android.gms.ads) !== "undefined") {
// init admob
com.google.android.gms.ads.MobileAds.initialize(appModule.android.context);
}

resolve(firebase.instance);
}

Expand Down Expand Up @@ -475,11 +481,6 @@ firebase.admob.showBanner = function (arg) {
try {
var settings = firebase.merge(arg, firebase.admob.defaults);

// this should also be possible in init
com.google.android.gms.ads.MobileAds.initialize(
appModule.android.context,
settings.androidBannerId); // TODO not sure its bound to packagename.. this is from the admob-demo

// always close a previously opened banner
if (firebase.admob.adView !== null && firebase.admob.adView !== undefined) {
var parent = firebase.admob.adView.getParent();
Expand All @@ -493,16 +494,26 @@ firebase.admob.showBanner = function (arg) {
var bannerType = firebase.admob._getBannerType(settings.size);
firebase.admob.adView.setAdSize(bannerType);
console.log("----- bannerType: " + bannerType);
// TODO consider implementing events
//firebase.admob.adView.setAdListener(new com.google.android.gms.ads.BannerListener());
var BannerAdListener = com.google.android.gms.ads.AdListener.extend({
onAdLoaded: function () {
//firebase.admob.interstitialView.show();
console.log('ad loaded');
resolve();
},
onAdFailedToLoad: function (errorCode) {
//console.log('ad error: ' + errorCode);
reject(errorCode);
}
});
firebase.admob.adView.setAdListener(new BannerAdListener());

var ad = firebase.admob._buildAdRequest(settings);
firebase.admob.adView.loadAd(ad);

var density = utils.layout.getDisplayDensity(),
top = settings.margins.top * density,
bottom = settings.margins.bottom * density;

var relativeLayoutParams = new android.widget.RelativeLayout.LayoutParams(
android.widget.RelativeLayout.LayoutParams.MATCH_PARENT,
android.widget.RelativeLayout.LayoutParams.WRAP_CONTENT);
Expand All @@ -528,49 +539,47 @@ firebase.admob.showBanner = function (arg) {
// a Page.loaded event 'frame.topmost()' doesn't resolve to 'undefined'
setTimeout(function () {
frame.topmost().currentPage.android.getParent().addView(adViewLayout, relativeLayoutParamsOuter);
}, 0);

resolve();
}, 0);
} catch (ex) {
console.log("Error in firebase.admob.showBanner: " + ex);
reject(ex);
reject(ex);
}
});
};

firebase.admob.showInterstitial = function (arg) {
return new Promise(function (resolve, reject) {
try {
var settings = firebase.merge(arg, firebase.admob.defaults);
firebase.admob.interstitialView = new com.google.android.gms.ads.InterstitialAd(appModule.android.foregroundActivity);
firebase.admob.interstitialView.setAdUnitId(settings.androidInterstitialId);

// Interstitial ads must be loaded before they can be shown, so adding a listener
var InterstitialAdListener = com.google.android.gms.ads.AdListener.extend({
onAdLoaded: function () {
firebase.admob.interstitialView.show();
resolve();
},
onAdFailedToLoad: function (errorCode) {
reject(errorCode);
},
onAdClosed: function () {
firebase.admob.interstitialView.setAdListener(null);
firebase.admob.interstitialView = null;
}
});
firebase.admob.interstitialView.setAdListener(new InterstitialAdListener());

var ad = firebase.admob._buildAdRequest(settings);
firebase.admob.interstitialView.loadAd(ad);
} catch (ex) {
console.log("Error in firebase.admob.showInterstitial: " + ex);
reject(ex);
}
});
};

firebase.admob.hideBanner = function (arg) {
return new Promise(function (resolve, reject) {
try {
var settings = firebase.merge(arg, firebase.admob.defaults);
firebase.admob.interstitialView = new com.google.android.gms.ads.InterstitialAd(appModule.android.foregroundActivity);
firebase.admob.interstitialView.setAdUnitId(settings.androidInterstitialId);
// Interstitial ads must be loaded before they can be shown, so adding a listener
var InterstitialAdListener = com.google.android.gms.ads.AdListener.extend({
onAdLoaded: function () {
firebase.admob.interstitialView.show();
resolve();
},
onAdFailedToLoad: function (errorCode) {
reject(errorCode);
},
onAdClosed: function () {
firebase.admob.interstitialView.setAdListener(null);
firebase.admob.interstitialView = null;
}
});
firebase.admob.interstitialView.setAdListener(new InterstitialAdListener());
var ad = firebase.admob._buildAdRequest(settings);
firebase.admob.interstitialView.loadAd(ad);
} catch (ex) {
console.log("Error in firebase.admob.showInterstitial: " + ex);
reject(ex);
}
});
};
firebase.admob.hideBanner = function (arg) {
return new Promise(function (resolve, reject) {
try {
if (firebase.admob.adView !== null) {
Expand Down
10 changes: 10 additions & 0 deletions firebase.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -568,6 +568,16 @@ export module admob {
LEADERBOARD
}

/**
* The possible error codes (see https://developers.google.com/android/reference/com/google/android/gms/ads/AdRequest#ERROR_CODE_INTERNAL_ERROR).
*/
export enum ERROR_CODES {
ERROR_CODE_INTERNAL_ERROR,
ERROR_CODE_INVALID_REQUEST,
ERROR_CODE_NETWORK_ERROR,
ERROR_CODE_NO_FILL
}

export interface ShowBannerOptions {
/**
* The layout of the banner.
Expand Down

0 comments on commit 7b59855

Please sign in to comment.