Skip to content

Commit 239cbf7

Browse files
committed
use promises instead of callbacks for request and show (Android)
1 parent a28d0ca commit 239cbf7

File tree

2 files changed

+25
-23
lines changed

2 files changed

+25
-23
lines changed

android/src/main/java/com/sbugert/rnadmob/RNAdMobInterstitialAdModule.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import com.facebook.react.bridge.Arguments;
88
import com.facebook.react.bridge.Callback;
9+
import com.facebook.react.bridge.Promise;
910
import com.facebook.react.bridge.ReactApplicationContext;
1011
import com.facebook.react.bridge.ReactContextBaseJavaModule;
1112
import com.facebook.react.bridge.ReactMethod;
@@ -26,8 +27,8 @@ public class RNAdMobInterstitialAdModule extends ReactContextBaseJavaModule {
2627
InterstitialAd mInterstitialAd;
2728
String adUnitID;
2829
String[] testDevices;
29-
Callback requestAdCallback;
30-
Callback showAdCallback;
30+
31+
private Promise mRequestAdPromise;
3132

3233
@Override
3334
public String getName() {
@@ -45,7 +46,6 @@ public void run() {
4546
@Override
4647
public void onAdClosed() {
4748
sendEvent("interstitialDidClose", null);
48-
showAdCallback.invoke();
4949
}
5050
@Override
5151
public void onAdFailedToLoad(int errorCode) {
@@ -65,9 +65,10 @@ public void onAdFailedToLoad(int errorCode) {
6565
errorString = "ERROR_CODE_NO_FILL";
6666
break;
6767
}
68-
event.putString("error", errorString);
68+
69+
event.putString("message", errorString);
6970
sendEvent("interstitialDidFailToLoad", event);
70-
requestAdCallback.invoke(errorString);
71+
mRequestAdPromise.reject(errorString, errorString);
7172
}
7273
@Override
7374
public void onAdLeftApplication() {
@@ -76,7 +77,7 @@ public void onAdLeftApplication() {
7677
@Override
7778
public void onAdLoaded() {
7879
sendEvent("interstitialDidLoad", null);
79-
requestAdCallback.invoke();
80+
mRequestAdPromise.resolve(null);
8081
}
8182
@Override
8283
public void onAdOpened() {
@@ -103,14 +104,14 @@ public void setTestDevices(ReadableArray testDevices) {
103104
}
104105

105106
@ReactMethod
106-
public void requestAd(final Callback callback) {
107+
public void requestAd(final Promise promise) {
107108
new Handler(Looper.getMainLooper()).post(new Runnable() {
108109
@Override
109110
public void run () {
110111
if (mInterstitialAd.isLoaded() || mInterstitialAd.isLoading()) {
111-
callback.invoke("Ad is already loaded."); // TODO: make proper error
112+
promise.reject("E_AD_ALREADY_LOADED", "Ad is already loaded.");
112113
} else {
113-
requestAdCallback = callback;
114+
mRequestAdPromise = promise;
114115
AdRequest.Builder adRequestBuilder = new AdRequest.Builder();
115116
if (testDevices != null) {
116117
for (int i = 0; i < testDevices.length; i++) {
@@ -125,15 +126,15 @@ public void run () {
125126
}
126127

127128
@ReactMethod
128-
public void showAd(final Callback callback) {
129+
public void showAd(final Promise promise) {
129130
new Handler(Looper.getMainLooper()).post(new Runnable() {
130131
@Override
131132
public void run () {
132133
if (mInterstitialAd.isLoaded()) {
133-
showAdCallback = callback;
134134
mInterstitialAd.show();
135+
promise.resolve(null);
135136
} else {
136-
callback.invoke("Ad is not ready."); // TODO: make proper error
137+
promise.reject("E_AD_NOT_READY", "Ad is not ready.");
137138
}
138139
}
139140
});

android/src/main/java/com/sbugert/rnadmob/RNAdMobRewardedVideoAdModule.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import com.facebook.react.bridge.Arguments;
88
import com.facebook.react.bridge.Callback;
9+
import com.facebook.react.bridge.Promise;
910
import com.facebook.react.bridge.ReactApplicationContext;
1011
import com.facebook.react.bridge.ReactContextBaseJavaModule;
1112
import com.facebook.react.bridge.ReactMethod;
@@ -25,8 +26,8 @@ public class RNAdMobRewardedVideoAdModule extends ReactContextBaseJavaModule imp
2526
RewardedVideoAd mRewardedVideoAd;
2627
String adUnitID;
2728
String[] testDevices;
28-
Callback requestAdCallback;
29-
Callback showAdCallback;
29+
30+
private Promise mRequestAdPromise;
3031

3132
@Override
3233
public String getName() {
@@ -50,7 +51,7 @@ public void onRewarded(RewardItem rewardItem) {
5051
@Override
5152
public void onRewardedVideoAdLoaded() {
5253
sendEvent("rewardedVideoDidLoad", null);
53-
requestAdCallback.invoke();
54+
mRequestAdPromise.resolve(null);
5455
}
5556

5657
@Override
@@ -93,9 +94,9 @@ public void onRewardedVideoAdFailedToLoad(int errorCode) {
9394
break;
9495
}
9596

96-
event.putString("error", errorString);
97+
event.putString("message", errorString);
9798
sendEvent("rewardedVideoDidFailToLoad", event);
98-
requestAdCallback.invoke(errorString);
99+
mRequestAdPromise.reject(errorString, errorString);
99100
}
100101

101102
private void sendEvent(String eventName, @Nullable WritableMap params) {
@@ -115,7 +116,7 @@ public void setTestDevices(ReadableArray testDevices) {
115116
}
116117

117118
@ReactMethod
118-
public void requestAd(final Callback callback) {
119+
public void requestAd(final Promise promise) {
119120
new Handler(Looper.getMainLooper()).post(new Runnable() {
120121
@Override
121122
public void run () {
@@ -124,9 +125,9 @@ public void run () {
124125
RNAdMobRewardedVideoAdModule.this.mRewardedVideoAd.setRewardedVideoAdListener(RNAdMobRewardedVideoAdModule.this);
125126

126127
if (mRewardedVideoAd.isLoaded()) {
127-
callback.invoke("Ad is already loaded."); // TODO: make proper error
128+
promise.reject("E_AD_ALREADY_LOADED", "Ad is already loaded.");
128129
} else {
129-
requestAdCallback = callback;
130+
mRequestAdPromise = promise;
130131

131132
AdRequest.Builder adRequestBuilder = new AdRequest.Builder();
132133

@@ -144,15 +145,15 @@ public void run () {
144145
}
145146

146147
@ReactMethod
147-
public void showAd(final Callback callback) {
148+
public void showAd(final Promise promise) {
148149
new Handler(Looper.getMainLooper()).post(new Runnable() {
149150
@Override
150151
public void run () {
151152
if (mRewardedVideoAd.isLoaded()) {
152-
showAdCallback = callback;
153153
mRewardedVideoAd.show();
154+
promise.resolve(null);
154155
} else {
155-
callback.invoke("Ad is not ready."); // TODO: make proper error
156+
promise.reject("E_AD_NOT_READY", "Ad is not ready.");
156157
}
157158
}
158159
});

0 commit comments

Comments
 (0)