From 4f24982a7bcd9f1328b73c1b4637c9d456f2035b Mon Sep 17 00:00:00 2001 From: Younes Hassani Abdollahi Date: Sun, 29 Nov 2020 12:39:37 +0330 Subject: [PATCH 1/5] add multi interstesial adunitid support --- .../rnadmob/RNAdMobInterstitialAdModule.java | 164 ++++++++++-------- 1 file changed, 90 insertions(+), 74 deletions(-) diff --git a/android/src/main/java/com/sbugert/rnadmob/RNAdMobInterstitialAdModule.java b/android/src/main/java/com/sbugert/rnadmob/RNAdMobInterstitialAdModule.java index bad5a0aec..6f2bce419 100644 --- a/android/src/main/java/com/sbugert/rnadmob/RNAdMobInterstitialAdModule.java +++ b/android/src/main/java/com/sbugert/rnadmob/RNAdMobInterstitialAdModule.java @@ -3,6 +3,7 @@ import android.os.Handler; import android.os.Looper; import android.support.annotation.Nullable; +import android.util.Pair; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.Callback; @@ -33,10 +34,11 @@ public class RNAdMobInterstitialAdModule extends ReactContextBaseJavaModule { public static final String EVENT_AD_CLOSED = "interstitialAdClosed"; public static final String EVENT_AD_LEFT_APPLICATION = "interstitialAdLeftApplication"; - InterstitialAd mInterstitialAd; + ReactApplicationContext mContext; + Map mInterstitialAds; String[] testDevices; - private Promise mRequestAdPromise; + private final Map mRequestAdPromises; @Override public String getName() { @@ -45,75 +47,89 @@ public String getName() { public RNAdMobInterstitialAdModule(ReactApplicationContext reactContext) { super(reactContext); - mInterstitialAd = new InterstitialAd(reactContext); - - new Handler(Looper.getMainLooper()).post(new Runnable() { - @Override - public void run() { - mInterstitialAd.setAdListener(new AdListener() { - @Override - public void onAdClosed() { - sendEvent(EVENT_AD_CLOSED, null); - } - @Override - public void onAdFailedToLoad(int errorCode) { - String errorString = "ERROR_UNKNOWN"; - String errorMessage = "Unknown error"; - switch (errorCode) { - case AdRequest.ERROR_CODE_INTERNAL_ERROR: - errorString = "ERROR_CODE_INTERNAL_ERROR"; - errorMessage = "Internal error, an invalid response was received from the ad server."; - break; - case AdRequest.ERROR_CODE_INVALID_REQUEST: - errorString = "ERROR_CODE_INVALID_REQUEST"; - errorMessage = "Invalid ad request, possibly an incorrect ad unit ID was given."; - break; - case AdRequest.ERROR_CODE_NETWORK_ERROR: - errorString = "ERROR_CODE_NETWORK_ERROR"; - errorMessage = "The ad request was unsuccessful due to network connectivity."; - break; - case AdRequest.ERROR_CODE_NO_FILL: - errorString = "ERROR_CODE_NO_FILL"; - errorMessage = "The ad request was successful, but no ad was returned due to lack of ad inventory."; - break; - } - WritableMap event = Arguments.createMap(); - WritableMap error = Arguments.createMap(); - event.putString("message", errorMessage); - sendEvent(EVENT_AD_FAILED_TO_LOAD, event); - if (mRequestAdPromise != null) { - mRequestAdPromise.reject(errorString, errorMessage); - mRequestAdPromise = null; - } - } - @Override - public void onAdLeftApplication() { - sendEvent(EVENT_AD_LEFT_APPLICATION, null); - } - @Override - public void onAdLoaded() { - sendEvent(EVENT_AD_LOADED, null); - if (mRequestAdPromise != null) { - mRequestAdPromise.resolve(null); - mRequestAdPromise = null; - } - } - @Override - public void onAdOpened() { - sendEvent(EVENT_AD_OPENED, null); - } - }); - } - }); + mContext = reactContext; + mInterstitialAds = new HashMap<>(); + mRequestAdPromises = new HashMap<>(); } + private void sendEvent(String eventName, @Nullable WritableMap params) { getReactApplicationContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params); } @ReactMethod - public void setAdUnitID(String adUnitID) { - if (mInterstitialAd.getAdUnitId() == null) { - mInterstitialAd.setAdUnitId(adUnitID); + public void setAdUnitID(final String adUnitID) { + if (!mInterstitialAds.containsKey(adUnitID)) { + mInterstitialAds.put(adUnitID, new InterstitialAd(mContext)); + mInterstitialAds.get(adUnitID).setAdUnitId(adUnitID); + new Handler(Looper.getMainLooper()).post(new Runnable() { + @Override + public void run() { + mInterstitialAds.get(adUnitID).setAdListener(new AdListener() { + @Override + public void onAdClosed() { + WritableMap params = Arguments.createMap(); + params.putString("adUnitId", adUnitID); + sendEvent(EVENT_AD_CLOSED, params); + } + @Override + public void onAdFailedToLoad(int errorCode) { + String errorString = "ERROR_UNKNOWN"; + String errorMessage = "Unknown error"; + switch (errorCode) { + case AdRequest.ERROR_CODE_INTERNAL_ERROR: + errorString = "ERROR_CODE_INTERNAL_ERROR"; + errorMessage = "Internal error, an invalid response was received from the ad server."; + break; + case AdRequest.ERROR_CODE_INVALID_REQUEST: + errorString = "ERROR_CODE_INVALID_REQUEST"; + errorMessage = "Invalid ad request, possibly an incorrect ad unit ID was given."; + break; + case AdRequest.ERROR_CODE_NETWORK_ERROR: + errorString = "ERROR_CODE_NETWORK_ERROR"; + errorMessage = "The ad request was unsuccessful due to network connectivity."; + break; + case AdRequest.ERROR_CODE_NO_FILL: + errorString = "ERROR_CODE_NO_FILL"; + errorMessage = "The ad request was successful, but no ad was returned due to lack of ad inventory."; + break; + } + WritableMap event = Arguments.createMap(); + WritableMap error = Arguments.createMap(); + event.putString("message", errorMessage); + event.putString("adUnitId", adUnitID); + sendEvent(EVENT_AD_FAILED_TO_LOAD, event); + if (mRequestAdPromises.get(adUnitID) != null) { + mRequestAdPromises.get(adUnitID).reject(errorString, errorMessage); + // todo:: check how to set promise to null + mRequestAdPromises.put(adUnitID, null); + } + } + @Override + public void onAdLeftApplication() { + WritableMap params = Arguments.createMap(); + params.putString("adUnitId", adUnitID); + sendEvent(EVENT_AD_LEFT_APPLICATION, params); + } + @Override + public void onAdLoaded() { + WritableMap params = Arguments.createMap(); + params.putString("adUnitId", adUnitID); + sendEvent(EVENT_AD_LOADED, params); + if (mRequestAdPromises.get(adUnitID) != null) { + mRequestAdPromises.get(adUnitID).resolve(null); + // todo:: check how to set promise to null + mRequestAdPromises.put(adUnitID, null); + } + } + @Override + public void onAdOpened() { + WritableMap params = Arguments.createMap(); + params.putString("adUnitId", adUnitID); + sendEvent(EVENT_AD_OPENED, params); + } + }); + } + }); } } @@ -125,14 +141,14 @@ public void setTestDevices(ReadableArray testDevices) { } @ReactMethod - public void requestAd(final Promise promise) { + public void requestAd(final String adUnitId, final Promise promise) { new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run () { - if (mInterstitialAd.isLoaded() || mInterstitialAd.isLoading()) { + if (mInterstitialAds.get(adUnitId).isLoaded() || mInterstitialAds.get(adUnitId).isLoading()) { promise.reject("E_AD_ALREADY_LOADED", "Ad is already loaded."); } else { - mRequestAdPromise = promise; + mRequestAdPromises.put(adUnitId, promise); AdRequest.Builder adRequestBuilder = new AdRequest.Builder(); if (testDevices != null) { for (int i = 0; i < testDevices.length; i++) { @@ -144,19 +160,19 @@ public void run () { } } AdRequest adRequest = adRequestBuilder.build(); - mInterstitialAd.loadAd(adRequest); + mInterstitialAds.get(adUnitId).loadAd(adRequest); } } }); } @ReactMethod - public void showAd(final Promise promise) { + public void showAd(final String adUnitId, final Promise promise) { new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run () { - if (mInterstitialAd.isLoaded()) { - mInterstitialAd.show(); + if (mInterstitialAds.get(adUnitId).isLoaded()) { + mInterstitialAds.get(adUnitId).show(); promise.resolve(null); } else { promise.reject("E_AD_NOT_READY", "Ad is not ready."); @@ -166,11 +182,11 @@ public void run () { } @ReactMethod - public void isReady(final Callback callback) { + public void isReady(final String adUnitId, final Callback callback) { new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run () { - callback.invoke(mInterstitialAd.isLoaded()); + callback.invoke(mInterstitialAds.get(adUnitId).isLoaded()); } }); } From 14fdb415bb7de121e704a91b3047973eebeabc75 Mon Sep 17 00:00:00 2001 From: Younes hassani abdollahi Date: Fri, 11 Dec 2020 04:14:07 +0330 Subject: [PATCH 2/5] add packages for developement --- .../executionHistory/executionHistory.lock | Bin 0 -> 17 bytes .../.gradle/6.5/fileChanges/last-build.bin | Bin 0 -> 1 bytes android/.gradle/6.5/fileHashes/fileHashes.bin | Bin 0 -> 18547 bytes .../.gradle/6.5/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes android/.gradle/6.5/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties | 2 + .../buildOutputCleanup/outputFiles.bin | Bin 0 -> 52529 bytes android/.gradle/checksums/checksums.lock | Bin 0 -> 17 bytes android/.gradle/checksums/md5-checksums.bin | Bin 0 -> 21147 bytes android/.gradle/checksums/sha1-checksums.bin | Bin 0 -> 39071 bytes android/.gradle/vcs-1/gc.properties | 0 android/build.gradle | 36 ++++++++++++++++-- android/src/main/AndroidManifest.xml | 2 + 14 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 android/.gradle/6.5/executionHistory/executionHistory.lock create mode 100644 android/.gradle/6.5/fileChanges/last-build.bin create mode 100644 android/.gradle/6.5/fileHashes/fileHashes.bin create mode 100644 android/.gradle/6.5/fileHashes/fileHashes.lock create mode 100644 android/.gradle/6.5/gc.properties create mode 100644 android/.gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 android/.gradle/buildOutputCleanup/cache.properties create mode 100644 android/.gradle/buildOutputCleanup/outputFiles.bin create mode 100644 android/.gradle/checksums/checksums.lock create mode 100644 android/.gradle/checksums/md5-checksums.bin create mode 100644 android/.gradle/checksums/sha1-checksums.bin create mode 100644 android/.gradle/vcs-1/gc.properties diff --git a/android/.gradle/6.5/executionHistory/executionHistory.lock b/android/.gradle/6.5/executionHistory/executionHistory.lock new file mode 100644 index 0000000000000000000000000000000000000000..81785218ebb8cd4a62f7d9d73624879717661f40 GIT binary patch literal 17 TcmZR+^y+%#zrSJW3{U_7Nh1ZQ literal 0 HcmV?d00001 diff --git a/android/.gradle/6.5/fileChanges/last-build.bin b/android/.gradle/6.5/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/android/.gradle/6.5/fileHashes/fileHashes.bin b/android/.gradle/6.5/fileHashes/fileHashes.bin new file mode 100644 index 0000000000000000000000000000000000000000..15e293aa9e7e2b50beec3a7a5639e1c6eb34ff8b GIT binary patch literal 18547 zcmeI(F=_%q6adiKAPAC>g&>Gsnm}L)g4hK?63|)**rc%#Y-~h4g=feiV&f6Kg1vYN zQD<4jD~P;-ng5w-{(tSve1}j=kLMAtqk2tc1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ zz`Y3k#6~JbGqvm?PoC!?G#+D;Y)ivIww$ht<6h@-e{hL$|GhY~5+Fc;009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pkw;<4rMdXkDU-Ox6 h%DcnprC)D-{i|FY-#0ucv(sA1Au|DRlq< literal 0 HcmV?d00001 diff --git a/android/.gradle/6.5/fileHashes/fileHashes.lock b/android/.gradle/6.5/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..d378023f47e3d14a6748f50aae9a5d5abaa25da1 GIT binary patch literal 17 UcmZRM*ncPgcc{B50|c-G05-J*IRF3v literal 0 HcmV?d00001 diff --git a/android/.gradle/6.5/gc.properties b/android/.gradle/6.5/gc.properties new file mode 100644 index 000000000..e69de29bb diff --git a/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000000000000000000000000000000000000..abf17a032e7fd4de393b4b06f5861d36d9c6724b GIT binary patch literal 17 VcmZSnd&K(bS5CVt3}C>t3;;mX1)Tr@ literal 0 HcmV?d00001 diff --git a/android/.gradle/buildOutputCleanup/cache.properties b/android/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 000000000..f53a01494 --- /dev/null +++ b/android/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Sat Nov 28 16:35:28 IRST 2020 +gradle.version=6.5 diff --git a/android/.gradle/buildOutputCleanup/outputFiles.bin b/android/.gradle/buildOutputCleanup/outputFiles.bin new file mode 100644 index 0000000000000000000000000000000000000000..a3f9135f6fd4f2e984321e0d8fe6e7695a56de95 GIT binary patch literal 52529 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%0A@X0@g6^BtXZ(0hbXZZ7qv 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 WKGpT)`(>2^6KD)iLxYh_82<$V?lDpT literal 0 HcmV?d00001 diff --git a/android/.gradle/checksums/sha1-checksums.bin b/android/.gradle/checksums/sha1-checksums.bin new file mode 100644 index 0000000000000000000000000000000000000000..7f21077617277ec41122f4fcc648ff48ea5f1f7c GIT binary patch literal 39071 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 qc3sYZln%u^2LuINW>_zPjfz4%Ap+OiQb + + From 01dba2aad5bce0143a6f6703a5daa6bad5195101 Mon Sep 17 00:00:00 2001 From: Younes hassani abdollahi Date: Mon, 11 Jan 2021 11:21:50 +0330 Subject: [PATCH 3/5] fix null pointer refrence at the begining --- .../java/com/sbugert/rnadmob/RNAdMobInterstitialAdModule.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/android/src/main/java/com/sbugert/rnadmob/RNAdMobInterstitialAdModule.java b/android/src/main/java/com/sbugert/rnadmob/RNAdMobInterstitialAdModule.java index 6f2bce419..714ec1223 100644 --- a/android/src/main/java/com/sbugert/rnadmob/RNAdMobInterstitialAdModule.java +++ b/android/src/main/java/com/sbugert/rnadmob/RNAdMobInterstitialAdModule.java @@ -186,7 +186,9 @@ public void isReady(final String adUnitId, final Callback callback) { new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run () { + if (mInterstitialAds.get(adUnitId) != null){ callback.invoke(mInterstitialAds.get(adUnitId).isLoaded()); + } } }); } From f9f16295d6fd80b1e8bb6707eaca6dac49233b93 Mon Sep 17 00:00:00 2001 From: Younes hassani abdollahi Date: Mon, 11 Jan 2021 11:36:09 +0330 Subject: [PATCH 4/5] fix null interstetial --- .../java/com/sbugert/rnadmob/RNAdMobInterstitialAdModule.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/android/src/main/java/com/sbugert/rnadmob/RNAdMobInterstitialAdModule.java b/android/src/main/java/com/sbugert/rnadmob/RNAdMobInterstitialAdModule.java index 714ec1223..fafe68f92 100644 --- a/android/src/main/java/com/sbugert/rnadmob/RNAdMobInterstitialAdModule.java +++ b/android/src/main/java/com/sbugert/rnadmob/RNAdMobInterstitialAdModule.java @@ -188,6 +188,8 @@ public void isReady(final String adUnitId, final Callback callback) { public void run () { if (mInterstitialAds.get(adUnitId) != null){ callback.invoke(mInterstitialAds.get(adUnitId).isLoaded()); + } else { + callback.invoke(false); } } }); From 36b03ff2c742cc91ae400cca4d05da526597f770 Mon Sep 17 00:00:00 2001 From: Younes hassani abdollahi Date: Mon, 11 Jan 2021 12:16:10 +0330 Subject: [PATCH 5/5] fix null in request --- .../rnadmob/RNAdMobInterstitialAdModule.java | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/android/src/main/java/com/sbugert/rnadmob/RNAdMobInterstitialAdModule.java b/android/src/main/java/com/sbugert/rnadmob/RNAdMobInterstitialAdModule.java index fafe68f92..7f6e8bf95 100644 --- a/android/src/main/java/com/sbugert/rnadmob/RNAdMobInterstitialAdModule.java +++ b/android/src/main/java/com/sbugert/rnadmob/RNAdMobInterstitialAdModule.java @@ -145,23 +145,25 @@ public void requestAd(final String adUnitId, final Promise promise) { new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run () { + if (mInterstitialAds.containsKey(adUnitId)) { if (mInterstitialAds.get(adUnitId).isLoaded() || mInterstitialAds.get(adUnitId).isLoading()) { - promise.reject("E_AD_ALREADY_LOADED", "Ad is already loaded."); + promise.reject("E_AD_ALREADY_LOADED", "Ad is already loaded."); } else { - mRequestAdPromises.put(adUnitId, promise); - AdRequest.Builder adRequestBuilder = new AdRequest.Builder(); - if (testDevices != null) { - for (int i = 0; i < testDevices.length; i++) { - String testDevice = testDevices[i]; - if (testDevice == "SIMULATOR") { - testDevice = AdRequest.DEVICE_ID_EMULATOR; - } - adRequestBuilder.addTestDevice(testDevice); - } + mRequestAdPromises.put(adUnitId, promise); + AdRequest.Builder adRequestBuilder = new AdRequest.Builder(); + if (testDevices != null) { + for (int i = 0; i < testDevices.length; i++) { + String testDevice = testDevices[i]; + if (testDevice == "SIMULATOR") { + testDevice = AdRequest.DEVICE_ID_EMULATOR; + } + adRequestBuilder.addTestDevice(testDevice); } - AdRequest adRequest = adRequestBuilder.build(); - mInterstitialAds.get(adUnitId).loadAd(adRequest); + } + AdRequest adRequest = adRequestBuilder.build(); + mInterstitialAds.get(adUnitId).loadAd(adRequest); } + } } }); } @@ -186,7 +188,7 @@ public void isReady(final String adUnitId, final Callback callback) { new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run () { - if (mInterstitialAds.get(adUnitId) != null){ + if (mInterstitialAds.containsKey(adUnitId)){ callback.invoke(mInterstitialAds.get(adUnitId).isLoaded()); } else { callback.invoke(false);