diff --git a/android/build.gradle b/android/build.gradle
index 623cd2aa..bc7f78c5 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -59,4 +59,5 @@ dependencies {
compile "com.google.firebase:firebase-crash:$firebaseVersion"
compile "com.google.firebase:firebase-config:$firebaseVersion"
compile "com.google.firebase:firebase-perf:$firebaseVersion"
+ compile "com.google.firebase:firebase-ads:$firebaseVersion"
}
diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml
index 45a2feb8..6ed6b311 100644
--- a/android/src/main/AndroidManifest.xml
+++ b/android/src/main/AndroidManifest.xml
@@ -1,3 +1,5 @@
+
+
diff --git a/android/src/main/java/io/invertase/firebase/RNFirebasePackage.java b/android/src/main/java/io/invertase/firebase/RNFirebasePackage.java
index fb5ac6e1..8f91ecfc 100644
--- a/android/src/main/java/io/invertase/firebase/RNFirebasePackage.java
+++ b/android/src/main/java/io/invertase/firebase/RNFirebasePackage.java
@@ -9,10 +9,12 @@ import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.UIManagerModule;
import com.facebook.react.uimanager.ViewManager;
+import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
+import io.invertase.firebase.admob.RNFirebaseAdMobBanner;
import io.invertase.firebase.auth.RNFirebaseAuth;
import io.invertase.firebase.config.RNFirebaseRemoteConfig;
import io.invertase.firebase.storage.RNFirebaseStorage;
@@ -21,6 +23,7 @@ import io.invertase.firebase.analytics.RNFirebaseAnalytics;
import io.invertase.firebase.crash.RNFirebaseCrash;
import io.invertase.firebase.messaging.RNFirebaseMessaging;
import io.invertase.firebase.perf.RNFirebasePerformance;
+import io.invertase.firebase.admob.RNFirebaseAdMob;
@SuppressWarnings("unused")
public class RNFirebasePackage implements ReactPackage {
@@ -45,6 +48,7 @@ public class RNFirebasePackage implements ReactPackage {
modules.add(new RNFirebaseCrash(reactContext));
modules.add(new RNFirebaseRemoteConfig(reactContext));
modules.add(new RNFirebasePerformance(reactContext));
+ modules.add(new RNFirebaseAdMob(reactContext));
return modules;
}
@@ -66,6 +70,8 @@ public class RNFirebasePackage implements ReactPackage {
*/
@Override
public List createViewManagers(ReactApplicationContext reactContext) {
- return Collections.emptyList();
+ return Arrays.asList(
+ new RNFirebaseAdMobBanner()
+ );
}
}
diff --git a/android/src/main/java/io/invertase/firebase/admob/RNFirebaseAdMob.java b/android/src/main/java/io/invertase/firebase/admob/RNFirebaseAdMob.java
new file mode 100644
index 00000000..9c7f1651
--- /dev/null
+++ b/android/src/main/java/io/invertase/firebase/admob/RNFirebaseAdMob.java
@@ -0,0 +1,110 @@
+package io.invertase.firebase.admob;
+
+
+import android.app.Activity;
+import android.util.Log;
+
+import com.facebook.react.bridge.ReactApplicationContext;
+import com.facebook.react.bridge.ReactContextBaseJavaModule;
+import com.facebook.react.bridge.ReactMethod;
+import com.facebook.react.bridge.ReadableArray;
+import com.facebook.react.bridge.ReadableMap;
+import com.google.android.gms.ads.AdRequest;
+import io.invertase.firebase.Utils;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+public class RNFirebaseAdMob extends ReactContextBaseJavaModule {
+
+ private static final String TAG = "RNFirebaseAdmob";
+
+ ReactApplicationContext getContext() {
+ return getReactApplicationContext();
+ }
+
+ Activity getActivity() {
+ return getCurrentActivity();
+ }
+
+ private HashMap interstitials = new HashMap<>();
+ private HashMap rewardedVideos = new HashMap<>();
+
+ public RNFirebaseAdMob(ReactApplicationContext reactContext) {
+ super(reactContext);
+ Log.d(TAG, "New instance");
+ }
+
+ @Override
+ public String getName() {
+ return TAG;
+ }
+
+ @ReactMethod
+ public void interstitialLoadAd(String adUnit, ReadableMap request) {
+ RNFirebaseAdmobInterstitial interstitial = getOrCreateInterstitial(adUnit);
+ interstitial.loadAd(buildRequest(request).build());
+ }
+
+ @ReactMethod
+ public void interstitialShowAd(String adUnit) {
+ RNFirebaseAdmobInterstitial interstitial = getOrCreateInterstitial(adUnit);
+ interstitial.show();
+ }
+
+ @ReactMethod
+ public void rewardedVideoLoadAd(String adUnit, ReadableMap request) {
+ RNFirebaseRewardedVideo rewardedVideo = getOrCreateRewardedVideo(adUnit);
+ rewardedVideo.loadAd(buildRequest(request).build());
+ }
+
+ @ReactMethod
+ public void rewardedVideoShowAd(String adUnit) {
+ RNFirebaseRewardedVideo rewardedVideo = getOrCreateRewardedVideo(adUnit);
+ rewardedVideo.show();
+ }
+
+ private RNFirebaseAdmobInterstitial getOrCreateInterstitial(String adUnit) {
+ if (interstitials.containsKey(adUnit)) {
+ return interstitials.get(adUnit);
+ }
+ RNFirebaseAdmobInterstitial interstitial = new RNFirebaseAdmobInterstitial(adUnit, this);
+ interstitials.put(adUnit, interstitial);
+ return interstitial;
+ }
+
+ private RNFirebaseRewardedVideo getOrCreateRewardedVideo(String adUnit) {
+ if (rewardedVideos.containsKey(adUnit)) {
+ return rewardedVideos.get(adUnit);
+ }
+ RNFirebaseRewardedVideo rewardedVideo = new RNFirebaseRewardedVideo(adUnit, this);
+ rewardedVideos.put(adUnit, rewardedVideo);
+ return rewardedVideo;
+ }
+
+ @Override
+ public Map getConstants() {
+ final Map constants = new HashMap<>();
+ constants.put("DEVICE_ID_EMULATOR", AdRequest.DEVICE_ID_EMULATOR);
+ return constants;
+ }
+
+ AdRequest.Builder buildRequest(ReadableMap request) {
+ AdRequest.Builder requestBuilder = new AdRequest.Builder();
+
+ if (request.hasKey("testDevice")) {
+ requestBuilder.addTestDevice(AdRequest.DEVICE_ID_EMULATOR);
+ }
+
+ ReadableArray keywords = request.getArray("keywords");
+ List