Skip to content

Commit e3a0b3e

Browse files
yarivgdidiclaude
andcommitted
fix: use events enum and bubble errors per reviewer feedback
- Android: add AppOpenAdPluginEvents.kt enum, replace magic strings - Android: pass AdMobPluginError with code/message on failure events - Android: propagate LoadAdError/AdError from manager through callbacks - iOS: propagate Error through onFailed/onFailedToShow callbacks - iOS: include code and message in failure event notifications Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent b8600b2 commit e3a0b3e

5 files changed

Lines changed: 61 additions & 29 deletions

File tree

android/src/main/java/com/getcapacitor/community/admob/appopen/AppOpenAdManager.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
import android.app.Activity;
44
import android.content.Context;
55
import androidx.annotation.NonNull;
6+
import com.google.android.gms.ads.AdError;
67
import com.google.android.gms.ads.AdRequest;
78
import com.google.android.gms.ads.FullScreenContentCallback;
89
import com.google.android.gms.ads.LoadAdError;
910
import com.google.android.gms.ads.appopen.AppOpenAd;
11+
import java.util.function.Consumer;
1012

1113
public class AppOpenAdManager {
1214

@@ -23,7 +25,7 @@ public String getAdUnitId() {
2325
return adUnitId;
2426
}
2527

26-
public void loadAd(Context context, final Runnable onLoaded, final Runnable onFailed) {
28+
public void loadAd(Context context, final Runnable onLoaded, final Consumer<LoadAdError> onFailed) {
2729
if (appOpenAd != null) {
2830
if (onLoaded != null) {
2931
onLoaded.run();
@@ -33,7 +35,7 @@ public void loadAd(Context context, final Runnable onLoaded, final Runnable onFa
3335

3436
if (isLoadingAd) {
3537
if (onFailed != null) {
36-
onFailed.run();
38+
onFailed.accept(null);
3739
}
3840
return;
3941
}
@@ -62,17 +64,22 @@ public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
6264
isLoadingAd = false;
6365

6466
if (onFailed != null) {
65-
onFailed.run();
67+
onFailed.accept(loadAdError);
6668
}
6769
}
6870
}
6971
);
7072
}
7173

72-
public void showAdIfAvailable(Activity activity, final Runnable onOpened, final Runnable onClosed, final Runnable onFailedToShow) {
74+
public void showAdIfAvailable(
75+
Activity activity,
76+
final Runnable onOpened,
77+
final Runnable onClosed,
78+
final Consumer<AdError> onFailedToShow
79+
) {
7380
if (appOpenAd == null || isShowingAd) {
7481
if (onFailedToShow != null) {
75-
onFailedToShow.run();
82+
onFailedToShow.accept(null);
7683
}
7784
return;
7885
}
@@ -98,12 +105,12 @@ public void onAdDismissedFullScreenContent() {
98105
}
99106

100107
@Override
101-
public void onAdFailedToShowFullScreenContent(com.google.android.gms.ads.AdError adError) {
108+
public void onAdFailedToShowFullScreenContent(AdError adError) {
102109
appOpenAd = null;
103110
isShowingAd = false;
104111

105112
if (onFailedToShow != null) {
106-
onFailedToShow.run();
113+
onFailedToShow.accept(adError);
107114
}
108115
}
109116
}

android/src/main/java/com/getcapacitor/community/admob/appopen/AppOpenAdPlugin.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import android.os.Looper;
77
import com.getcapacitor.JSObject;
88
import com.getcapacitor.PluginCall;
9+
import com.getcapacitor.community.admob.models.AdMobPluginError;
910

1011
public class AppOpenAdPlugin {
1112

@@ -44,12 +45,14 @@ public void loadAppOpen(Context context, Activity activity, PluginCall call, Eve
4445
appOpenAdManager.loadAd(
4546
appContext,
4647
() -> {
47-
notifier.notify("appOpenAdLoaded", new JSObject());
48+
notifier.notify(AppOpenAdPluginEvents.Loaded, new JSObject());
4849
call.resolve();
4950
},
50-
() -> {
51-
notifier.notify("appOpenAdFailedToLoad", new JSObject());
52-
call.reject("Failed to load App Open Ad");
51+
(loadAdError) -> {
52+
String errorMessage = loadAdError != null ? loadAdError.getMessage() : "Failed to load App Open Ad";
53+
int errorCode = loadAdError != null ? loadAdError.getCode() : -1;
54+
notifier.notify(AppOpenAdPluginEvents.FailedToLoad, new AdMobPluginError(errorCode, errorMessage));
55+
call.reject(errorMessage);
5356
}
5457
);
5558
});
@@ -70,15 +73,17 @@ public void showAppOpen(Activity activity, PluginCall call, EventNotifier notifi
7073
appOpenAdManager.showAdIfAvailable(
7174
activity,
7275
() -> {
73-
notifier.notify("appOpenAdOpened", new JSObject());
76+
notifier.notify(AppOpenAdPluginEvents.Showed, new JSObject());
7477
},
7578
() -> {
76-
notifier.notify("appOpenAdClosed", new JSObject());
79+
notifier.notify(AppOpenAdPluginEvents.Dismissed, new JSObject());
7780
call.resolve();
7881
},
79-
() -> {
80-
notifier.notify("appOpenAdFailedToShow", new JSObject());
81-
call.reject("Failed to show App Open Ad");
82+
(adError) -> {
83+
String errorMessage = adError != null ? adError.getMessage() : "Failed to show App Open Ad";
84+
int errorCode = adError != null ? adError.getCode() : -1;
85+
notifier.notify(AppOpenAdPluginEvents.FailedToShow, new AdMobPluginError(errorCode, errorMessage));
86+
call.reject(errorMessage);
8287
}
8388
);
8489
});
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.getcapacitor.community.admob.appopen
2+
3+
import com.getcapacitor.community.admob.models.LoadPluginEventNames
4+
5+
object AppOpenAdPluginEvents : LoadPluginEventNames {
6+
const val Loaded = "appOpenAdLoaded"
7+
const val FailedToLoad = "appOpenAdFailedToLoad"
8+
const val Opened = "appOpenAdOpened"
9+
override val Showed = "appOpenAdOpened"
10+
override val FailedToShow = "appOpenAdFailedToShow"
11+
override val Dismissed = "appOpenAdClosed"
12+
}

ios/Sources/AdMobPlugin/AppOpen/AppOpenAdManager.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@ import UIKit
1313
self.adUnitId = adUnitId
1414
}
1515

16-
public func loadAd(rootViewController: UIViewController, onLoaded: @escaping () -> Void, onFailed: @escaping () -> Void) {
16+
public func loadAd(rootViewController: UIViewController, onLoaded: @escaping () -> Void, onFailed: @escaping (Error?) -> Void) {
1717
if appOpenAd != nil {
1818
onLoaded()
1919
return
2020
}
2121

2222
if isLoadingAd {
23-
onFailed()
23+
onFailed(nil)
2424
return
2525
}
2626

@@ -39,7 +39,7 @@ import UIKit
3939
} catch {
4040
await MainActor.run {
4141
self.isLoadingAd = false
42-
onFailed()
42+
onFailed(error)
4343
}
4444
}
4545
}
@@ -49,10 +49,10 @@ import UIKit
4949
rootViewController: UIViewController,
5050
onOpened: @escaping () -> Void,
5151
onClosed: @escaping () -> Void,
52-
onFailedToShow: @escaping () -> Void
52+
onFailedToShow: @escaping (Error?) -> Void
5353
) {
5454
guard let ad = appOpenAd, !isShowingAd else {
55-
onFailedToShow()
55+
onFailedToShow(nil)
5656
return
5757
}
5858

@@ -69,7 +69,7 @@ import UIKit
6969
}
7070

7171
private var onClosed: (() -> Void)?
72-
private var onFailedToShow: (() -> Void)?
72+
private var onFailedToShow: ((Error?) -> Void)?
7373
}
7474

7575
extension AppOpenAdManager: FullScreenContentDelegate {
@@ -96,6 +96,6 @@ extension AppOpenAdManager: FullScreenContentDelegate {
9696
self.onOpened = nil
9797
self.onClosed = nil
9898
self.onFailedToShow = nil
99-
onFailedToShow?()
99+
onFailedToShow?(error)
100100
}
101101
}

ios/Sources/AdMobPlugin/AppOpen/AppOpenAdPlugin.swift

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,13 @@ import UIKit
2424
self.appOpenAdManager?.loadAd(rootViewController: rootVC, onLoaded: {
2525
notify("appOpenAdLoaded", [:])
2626
call.resolve()
27-
}, onFailed: {
28-
notify("appOpenAdFailedToLoad", [:])
29-
call.reject("Failed to load App Open Ad")
27+
}, onFailed: { error in
28+
let message = error?.localizedDescription ?? "Failed to load App Open Ad"
29+
notify("appOpenAdFailedToLoad", [
30+
"code": 0,
31+
"message": message
32+
])
33+
call.reject(message)
3034
})
3135
} else {
3236
call.reject("No rootViewController")
@@ -51,9 +55,13 @@ import UIKit
5155
}, onClosed: {
5256
notify("appOpenAdClosed", [:])
5357
call.resolve()
54-
}, onFailedToShow: {
55-
notify("appOpenAdFailedToShow", [:])
56-
call.reject("Failed to show App Open Ad")
58+
}, onFailedToShow: { error in
59+
let message = error?.localizedDescription ?? "Failed to show App Open Ad"
60+
notify("appOpenAdFailedToShow", [
61+
"code": 0,
62+
"message": message
63+
])
64+
call.reject(message)
5765
})
5866
} else {
5967
call.reject("No rootViewController")

0 commit comments

Comments
 (0)