@ququplay/admob 5.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/CapacitorCommunityAdmob.podspec +19 -0
  2. package/LICENSE +21 -0
  3. package/README.md +1091 -0
  4. package/android/build.gradle +92 -0
  5. package/android/src/main/AndroidManifest.xml +5 -0
  6. package/android/src/main/java/com/getcapacitor/community/admob/AdMob.java +240 -0
  7. package/android/src/main/java/com/getcapacitor/community/admob/banner/BannerAdPluginEvents.kt +11 -0
  8. package/android/src/main/java/com/getcapacitor/community/admob/banner/BannerAdSizeEnum.kt +20 -0
  9. package/android/src/main/java/com/getcapacitor/community/admob/banner/BannerAdSizeInfo.kt +17 -0
  10. package/android/src/main/java/com/getcapacitor/community/admob/banner/BannerExecutor.java +294 -0
  11. package/android/src/main/java/com/getcapacitor/community/admob/consent/AdConsentExecutor.java +232 -0
  12. package/android/src/main/java/com/getcapacitor/community/admob/helpers/AdViewIdHelper.java +31 -0
  13. package/android/src/main/java/com/getcapacitor/community/admob/helpers/AuthorizationStatusEnum.kt +5 -0
  14. package/android/src/main/java/com/getcapacitor/community/admob/helpers/FullscreenPluginCallback.kt +27 -0
  15. package/android/src/main/java/com/getcapacitor/community/admob/helpers/RequestHelper.java +49 -0
  16. package/android/src/main/java/com/getcapacitor/community/admob/interstitial/AdInterstitialExecutor.java +80 -0
  17. package/android/src/main/java/com/getcapacitor/community/admob/interstitial/InterstitialAdCallbackAndListeners.kt +38 -0
  18. package/android/src/main/java/com/getcapacitor/community/admob/interstitial/InterstitialAdPluginPluginEvent.kt +11 -0
  19. package/android/src/main/java/com/getcapacitor/community/admob/models/AdMobPluginError.kt +15 -0
  20. package/android/src/main/java/com/getcapacitor/community/admob/models/AdOptions.java +225 -0
  21. package/android/src/main/java/com/getcapacitor/community/admob/models/Executor.java +34 -0
  22. package/android/src/main/java/com/getcapacitor/community/admob/models/LoadPluginEventNames.kt +7 -0
  23. package/android/src/main/java/com/getcapacitor/community/admob/rewarded/AdRewardExecutor.java +80 -0
  24. package/android/src/main/java/com/getcapacitor/community/admob/rewarded/RewardAdPluginEvents.kt +12 -0
  25. package/android/src/main/java/com/getcapacitor/community/admob/rewarded/RewardedAdCallbackAndListeners.kt +63 -0
  26. package/android/src/main/java/com/getcapacitor/community/admob/rewarded/models/SsvInfo.kt +20 -0
  27. package/android/src/main/res/layout/bridge_layout_main.xml +15 -0
  28. package/android/src/main/res/values/colors.xml +3 -0
  29. package/android/src/main/res/values/strings.xml +2 -0
  30. package/android/src/main/res/values/styles.xml +3 -0
  31. package/dist/docs.json +2467 -0
  32. package/dist/esm/banner/banner-ad-options.interface.d.ts +25 -0
  33. package/dist/esm/banner/banner-ad-options.interface.js +2 -0
  34. package/dist/esm/banner/banner-ad-options.interface.js.map +1 -0
  35. package/dist/esm/banner/banner-ad-plugin-events.enum.d.ts +17 -0
  36. package/dist/esm/banner/banner-ad-plugin-events.enum.js +20 -0
  37. package/dist/esm/banner/banner-ad-plugin-events.enum.js.map +1 -0
  38. package/dist/esm/banner/banner-ad-position.enum.d.ts +17 -0
  39. package/dist/esm/banner/banner-ad-position.enum.js +19 -0
  40. package/dist/esm/banner/banner-ad-position.enum.js.map +1 -0
  41. package/dist/esm/banner/banner-ad-size.enum.d.ts +42 -0
  42. package/dist/esm/banner/banner-ad-size.enum.js +44 -0
  43. package/dist/esm/banner/banner-ad-size.enum.js.map +1 -0
  44. package/dist/esm/banner/banner-definitions.interface.d.ts +91 -0
  45. package/dist/esm/banner/banner-definitions.interface.js +2 -0
  46. package/dist/esm/banner/banner-definitions.interface.js.map +1 -0
  47. package/dist/esm/banner/banner-size.interface.d.ts +7 -0
  48. package/dist/esm/banner/banner-size.interface.js +2 -0
  49. package/dist/esm/banner/banner-size.interface.js.map +1 -0
  50. package/dist/esm/banner/index.d.ts +6 -0
  51. package/dist/esm/banner/index.js +7 -0
  52. package/dist/esm/banner/index.js.map +1 -0
  53. package/dist/esm/consent/consent-debug-geography.enum.d.ts +19 -0
  54. package/dist/esm/consent/consent-debug-geography.enum.js +21 -0
  55. package/dist/esm/consent/consent-debug-geography.enum.js.map +1 -0
  56. package/dist/esm/consent/consent-definition.interface.d.ts +26 -0
  57. package/dist/esm/consent/consent-definition.interface.js +2 -0
  58. package/dist/esm/consent/consent-definition.interface.js.map +1 -0
  59. package/dist/esm/consent/consent-info.interface.d.ts +13 -0
  60. package/dist/esm/consent/consent-info.interface.js +2 -0
  61. package/dist/esm/consent/consent-info.interface.js.map +1 -0
  62. package/dist/esm/consent/consent-request-options.interface.d.ts +20 -0
  63. package/dist/esm/consent/consent-request-options.interface.js +2 -0
  64. package/dist/esm/consent/consent-request-options.interface.js.map +1 -0
  65. package/dist/esm/consent/consent-status.enum.d.ts +23 -0
  66. package/dist/esm/consent/consent-status.enum.js +25 -0
  67. package/dist/esm/consent/consent-status.enum.js.map +1 -0
  68. package/dist/esm/consent/index.d.ts +5 -0
  69. package/dist/esm/consent/index.js +6 -0
  70. package/dist/esm/consent/index.js.map +1 -0
  71. package/dist/esm/definitions.d.ts +129 -0
  72. package/dist/esm/definitions.js +20 -0
  73. package/dist/esm/definitions.js.map +1 -0
  74. package/dist/esm/index.d.ts +9 -0
  75. package/dist/esm/index.js +12 -0
  76. package/dist/esm/index.js.map +1 -0
  77. package/dist/esm/interstitial/index.d.ts +2 -0
  78. package/dist/esm/interstitial/index.js +3 -0
  79. package/dist/esm/interstitial/index.js.map +1 -0
  80. package/dist/esm/interstitial/interstitial-ad-plugin-events.enum.d.ts +22 -0
  81. package/dist/esm/interstitial/interstitial-ad-plugin-events.enum.js +25 -0
  82. package/dist/esm/interstitial/interstitial-ad-plugin-events.enum.js.map +1 -0
  83. package/dist/esm/interstitial/interstitial-definitions.interface.d.ts +27 -0
  84. package/dist/esm/interstitial/interstitial-definitions.interface.js +2 -0
  85. package/dist/esm/interstitial/interstitial-definitions.interface.js.map +1 -0
  86. package/dist/esm/private/validate-all-events-implemented.type.d.ts +12 -0
  87. package/dist/esm/private/validate-all-events-implemented.type.js +2 -0
  88. package/dist/esm/private/validate-all-events-implemented.type.js.map +1 -0
  89. package/dist/esm/reward/index.d.ts +4 -0
  90. package/dist/esm/reward/index.js +5 -0
  91. package/dist/esm/reward/index.js.map +1 -0
  92. package/dist/esm/reward/reward-ad-options.interface.d.ts +25 -0
  93. package/dist/esm/reward/reward-ad-options.interface.js +2 -0
  94. package/dist/esm/reward/reward-ad-options.interface.js.map +1 -0
  95. package/dist/esm/reward/reward-ad-plugin-events.enum.d.ts +32 -0
  96. package/dist/esm/reward/reward-ad-plugin-events.enum.js +35 -0
  97. package/dist/esm/reward/reward-ad-plugin-events.enum.js.map +1 -0
  98. package/dist/esm/reward/reward-definitions.interface.d.ts +30 -0
  99. package/dist/esm/reward/reward-definitions.interface.js +2 -0
  100. package/dist/esm/reward/reward-definitions.interface.js.map +1 -0
  101. package/dist/esm/reward/reward-item.interface.d.ts +14 -0
  102. package/dist/esm/reward/reward-item.interface.js +2 -0
  103. package/dist/esm/reward/reward-item.interface.js.map +1 -0
  104. package/dist/esm/shared/ad-load-info.interface.d.ts +3 -0
  105. package/dist/esm/shared/ad-load-info.interface.js +2 -0
  106. package/dist/esm/shared/ad-load-info.interface.js.map +1 -0
  107. package/dist/esm/shared/ad-options.interface.d.ts +35 -0
  108. package/dist/esm/shared/ad-options.interface.js +2 -0
  109. package/dist/esm/shared/ad-options.interface.js.map +1 -0
  110. package/dist/esm/shared/admob-error.interface.d.ts +14 -0
  111. package/dist/esm/shared/admob-error.interface.js +2 -0
  112. package/dist/esm/shared/admob-error.interface.js.map +1 -0
  113. package/dist/esm/shared/index.d.ts +3 -0
  114. package/dist/esm/shared/index.js +4 -0
  115. package/dist/esm/shared/index.js.map +1 -0
  116. package/dist/esm/shared/tracking-authorization-status.interface.d.ts +6 -0
  117. package/dist/esm/shared/tracking-authorization-status.interface.js +2 -0
  118. package/dist/esm/shared/tracking-authorization-status.interface.js.map +1 -0
  119. package/dist/esm/web.d.ts +25 -0
  120. package/dist/esm/web.js +83 -0
  121. package/dist/esm/web.js.map +1 -0
  122. package/dist/plugin.cjs.js +307 -0
  123. package/dist/plugin.cjs.js.map +1 -0
  124. package/dist/plugin.js +310 -0
  125. package/dist/plugin.js.map +1 -0
  126. package/ios/Plugin/Banner/BannerAdPluginEvents.swift +8 -0
  127. package/ios/Plugin/Banner/BannerAdSizeEnum.swift +10 -0
  128. package/ios/Plugin/Banner/BannerExecutor.swift +198 -0
  129. package/ios/Plugin/Consent/ConsentExecutor.swift +158 -0
  130. package/ios/Plugin/Helper/AuthorizationStatusEnum.swift +6 -0
  131. package/ios/Plugin/Info.plist +24 -0
  132. package/ios/Plugin/Interstitial/AdInterstitialExecutor.swift +65 -0
  133. package/ios/Plugin/Interstitial/InterstitialAdPluginEvents.swift +7 -0
  134. package/ios/Plugin/Models/FullScreenAdEventName.swift +12 -0
  135. package/ios/Plugin/Plugin.h +10 -0
  136. package/ios/Plugin/Plugin.m +23 -0
  137. package/ios/Plugin/Plugin.swift +275 -0
  138. package/ios/Plugin/Rewarded/AdRewardExecutor.swift +86 -0
  139. package/ios/Plugin/Rewarded/RewardAdPluginEvents.swift +8 -0
  140. package/package.json +108 -0
@@ -0,0 +1,225 @@
1
+ package com.getcapacitor.community.admob.models;
2
+
3
+ import androidx.annotation.VisibleForTesting;
4
+ import com.getcapacitor.PluginCall;
5
+ import com.getcapacitor.community.admob.banner.BannerAdSizeEnum;
6
+ import com.getcapacitor.community.admob.rewarded.models.SsvInfo;
7
+
8
+ /**
9
+ * Holds the options for an Ad Request
10
+ * TODO: automatically create type definitions https://github.com/vojtechhabarta/typescript-generator ?
11
+ */
12
+ public abstract class AdOptions {
13
+
14
+ /**
15
+ * The ad unit ID that you want to request
16
+ *
17
+ * @see <a href="https://support.google.com/admob/answer/7356431?hl=en">Find ad Unit ID of an app</a>
18
+ */
19
+ public final String adId;
20
+ /**
21
+ * Banner Ad Size, defaults to ADAPTIVE_BANNER.
22
+ * IT can be: ADAPTIVE_BANNER, BANNER, MEDIUM_RECTANGLE,
23
+ * FULL_BANNER, LEADERBOARD, SKYSCRAPER, or CUSTOM
24
+ */
25
+ public final BannerAdSizeEnum adSize;
26
+
27
+ public static final String BANNER_TESTER_ID = "ca-app-pub-3940256099942544/6300978111";
28
+ public static final String INTERSTITIAL_TESTER_ID = "ca-app-pub-3940256099942544/1033173712";
29
+ public static final String REWARD_VIDEO_TESTER_ID = "ca-app-pub-3940256099942544/5224354917";
30
+
31
+ /**
32
+ * The position of the ad, it can be TOP_CENTER,
33
+ * CENTER or BOTTOM
34
+ * <p>
35
+ * TODO: Make an enum
36
+ */
37
+ public final String position;
38
+
39
+ /**
40
+ * If set to true, an test app will be requested using the official sample ads unit ids
41
+ *
42
+ * @see <a href="https://developers.google.com/admob/android/test-ads#sample_ad_units">Sample ad units</a>
43
+ */
44
+ public final boolean isTesting;
45
+
46
+ /**
47
+ * Margin Banner. Default is 0 px;
48
+ * If position is BOTTOM_CENTER, margin is be margin-bottom.
49
+ * If position is TOP_CENTER, margin is be margin-top.
50
+ */
51
+ public final int margin;
52
+
53
+ /**
54
+ * The default behavior of the Google Mobile Ads SDK is to serve personalized ads.
55
+ * Set this to true to request Non-Personalized Ads
56
+ *
57
+ * @see <a href="https://developers.google.com/admob/android/eu-consent">EU-Consent</a>
58
+ * <p>
59
+ * Default is false
60
+ */
61
+ public final boolean npa;
62
+
63
+ /**
64
+ * Used for Server side verification of Reward Ads
65
+ */
66
+ public final SsvInfo ssvInfo;
67
+
68
+ private AdOptions(PluginCall call) {
69
+ /*
70
+ * TODO: Since the Id in the Typescript AdOptions interface is not optional
71
+ * the default value here should never be used. In case it is used it means this is an error.
72
+ * Would not be better to print an error (call.reject()) and do not create any Ad?
73
+ * Why? Because an distracted dev could think that everything is working when it is not.
74
+ */
75
+
76
+ this.adId = call.getString("adId", getTestingId());
77
+ this.isTesting = call.getBoolean("isTesting", false);
78
+ this.position = call.getString("position", "BOTTOM_CENTER");
79
+ this.margin = call.getInt("margin", 0);
80
+ this.npa = call.getBoolean("npa", false);
81
+ this.ssvInfo = new SsvInfo(call);
82
+
83
+ String sizeString = call.getString("adSize", BannerAdSizeEnum.ADAPTIVE_BANNER.name());
84
+ this.adSize = AdOptions.adSizeStringToAdSizeEnum(sizeString);
85
+ }
86
+
87
+ private AdOptions(String id, boolean isTesting, String position, int margin, boolean npa, BannerAdSizeEnum adSize, SsvInfo ssvInfo) {
88
+ this.adId = id;
89
+ this.isTesting = isTesting;
90
+ this.position = position;
91
+ this.margin = margin;
92
+ this.npa = npa;
93
+ this.adSize = adSize;
94
+ this.ssvInfo = ssvInfo;
95
+ }
96
+
97
+ /**
98
+ * @return the id used for this type of test ads.
99
+ */
100
+ public abstract String getTestingId();
101
+
102
+ private static BannerAdSizeEnum adSizeStringToAdSizeEnum(String sizeString) {
103
+ try {
104
+ return BannerAdSizeEnum.valueOf(sizeString);
105
+ } catch (IllegalArgumentException error) {
106
+ return BannerAdSizeEnum.ADAPTIVE_BANNER;
107
+ }
108
+ }
109
+
110
+ public static class AdOptionsFactory {
111
+
112
+ private AdOptionsFactory() {}
113
+
114
+ public AdOptions createBannerOptions(PluginCall call) {
115
+ return new AdOptions(call) {
116
+ @Override
117
+ public String getTestingId() {
118
+ return AdOptions.BANNER_TESTER_ID;
119
+ }
120
+ };
121
+ }
122
+
123
+ public AdOptions createInterstitialOptions(PluginCall call) {
124
+ return new AdOptions(call) {
125
+ @Override
126
+ public String getTestingId() {
127
+ return AdOptions.INTERSTITIAL_TESTER_ID;
128
+ }
129
+ };
130
+ }
131
+
132
+ public AdOptions createRewardVideoOptions(PluginCall call) {
133
+ return new AdOptions(call) {
134
+ @Override
135
+ public String getTestingId() {
136
+ return AdOptions.REWARD_VIDEO_TESTER_ID;
137
+ }
138
+ };
139
+ }
140
+
141
+ public AdOptions createGenericOptions(PluginCall call, final String testingID) {
142
+ return new AdOptions(call) {
143
+ @Override
144
+ public String getTestingId() {
145
+ return testingID;
146
+ }
147
+ };
148
+ }
149
+ }
150
+
151
+ private static AdOptionsFactory factory;
152
+
153
+ public static AdOptionsFactory getFactory() {
154
+ if (AdOptions.factory != null) {
155
+ return AdOptions.factory;
156
+ }
157
+ AdOptions.factory = new AdOptionsFactory();
158
+ return AdOptions.factory;
159
+ }
160
+
161
+ /**
162
+ * Just for testing
163
+ */
164
+ @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
165
+ public static class TesterAdOptionsBuilder {
166
+
167
+ private String id = "TesterAdOptionsBuilder__defaultID";
168
+ private String testingID = "TesterAdOptionsBuilder__testingID";
169
+ private boolean isTesting = true;
170
+ private String position = "TesterAdOptionsBuilder__position";
171
+ private int margin = 1;
172
+ private boolean npa = false;
173
+ private BannerAdSizeEnum adSize = BannerAdSizeEnum.ADAPTIVE_BANNER;
174
+ private SsvInfo ssvInfo = new SsvInfo();
175
+
176
+ public TesterAdOptionsBuilder setSsvInfo(SsvInfo info) {
177
+ ssvInfo = info;
178
+ return this;
179
+ }
180
+
181
+ public TesterAdOptionsBuilder setIsTesting(boolean value) {
182
+ isTesting = value;
183
+ return this;
184
+ }
185
+
186
+ public TesterAdOptionsBuilder setNpa(boolean value) {
187
+ npa = value;
188
+ return this;
189
+ }
190
+
191
+ public TesterAdOptionsBuilder setPosition(String value) {
192
+ position = value;
193
+ return this;
194
+ }
195
+
196
+ public TesterAdOptionsBuilder setTestingID(String value) {
197
+ testingID = value;
198
+ return this;
199
+ }
200
+
201
+ public TesterAdOptionsBuilder setID(String value) {
202
+ id = value;
203
+ return this;
204
+ }
205
+
206
+ public TesterAdOptionsBuilder setMargin(int value) {
207
+ margin = value;
208
+ return this;
209
+ }
210
+
211
+ public TesterAdOptionsBuilder setAdSize(BannerAdSizeEnum value) {
212
+ adSize = value;
213
+ return this;
214
+ }
215
+
216
+ public AdOptions build() {
217
+ return new AdOptions(id, isTesting, position, margin, npa, adSize, ssvInfo) {
218
+ @Override
219
+ public String getTestingId() {
220
+ return testingID;
221
+ }
222
+ };
223
+ }
224
+ }
225
+ }
@@ -0,0 +1,34 @@
1
+ package com.getcapacitor.community.admob.models;
2
+
3
+ import android.app.Activity;
4
+ import android.content.Context;
5
+ import androidx.core.util.Supplier;
6
+ import com.getcapacitor.JSObject;
7
+ import com.getcapacitor.Plugin;
8
+ import com.google.android.gms.common.util.BiConsumer;
9
+
10
+ public abstract class Executor {
11
+
12
+ protected final Supplier<Context> contextSupplier;
13
+ protected final Supplier<Activity> activitySupplier;
14
+ protected BiConsumer<String, JSObject> notifyListenersFunction;
15
+ protected final String logTag;
16
+
17
+ // Eventually we can change the notification directly here!
18
+ protected void notifyListeners(String eventName, JSObject data) {
19
+ notifyListenersFunction.accept(eventName, data);
20
+ }
21
+
22
+ public Executor(
23
+ Supplier<Context> contextSupplier,
24
+ Supplier<Activity> activitySupplier,
25
+ BiConsumer<String, JSObject> notifyListenersFunction,
26
+ String pluginLogTag,
27
+ String executorTag
28
+ ) {
29
+ this.contextSupplier = contextSupplier;
30
+ this.activitySupplier = activitySupplier;
31
+ this.notifyListenersFunction = notifyListenersFunction;
32
+ this.logTag = pluginLogTag + "|" + executorTag;
33
+ }
34
+ }
@@ -0,0 +1,7 @@
1
+ package com.getcapacitor.community.admob.models
2
+
3
+ interface LoadPluginEventNames {
4
+ val Showed: String
5
+ val FailedToShow: String
6
+ val Dismissed: String
7
+ }
@@ -0,0 +1,80 @@
1
+ package com.getcapacitor.community.admob.rewarded;
2
+
3
+ import android.app.Activity;
4
+ import android.content.Context;
5
+ import androidx.core.util.Supplier;
6
+ import com.getcapacitor.JSObject;
7
+ import com.getcapacitor.PluginCall;
8
+ import com.getcapacitor.PluginMethod;
9
+ import com.getcapacitor.community.admob.helpers.AdViewIdHelper;
10
+ import com.getcapacitor.community.admob.helpers.RequestHelper;
11
+ import com.getcapacitor.community.admob.models.AdMobPluginError;
12
+ import com.getcapacitor.community.admob.models.AdOptions;
13
+ import com.getcapacitor.community.admob.models.Executor;
14
+ import com.google.android.gms.ads.AdRequest;
15
+ import com.google.android.gms.ads.rewarded.RewardedAd;
16
+ import com.google.android.gms.common.util.BiConsumer;
17
+
18
+ public class AdRewardExecutor extends Executor {
19
+
20
+ public static RewardedAd mRewardedAd;
21
+
22
+ public AdRewardExecutor(
23
+ Supplier<Context> contextSupplier,
24
+ Supplier<Activity> activitySupplier,
25
+ BiConsumer<String, JSObject> notifyListenersFunction,
26
+ String pluginLogTag
27
+ ) {
28
+ super(contextSupplier, activitySupplier, notifyListenersFunction, pluginLogTag, "AdRewardExecutor");
29
+ }
30
+
31
+ @PluginMethod
32
+ public void prepareRewardVideoAd(final PluginCall call, BiConsumer<String, JSObject> notifyListenersFunction) {
33
+ final AdOptions adOptions = AdOptions.getFactory().createRewardVideoOptions(call);
34
+
35
+ activitySupplier
36
+ .get()
37
+ .runOnUiThread(
38
+ () -> {
39
+ try {
40
+ final AdRequest adRequest = RequestHelper.createRequest(adOptions);
41
+ final String id = AdViewIdHelper.getFinalAdId(adOptions, adRequest, logTag, contextSupplier.get());
42
+ RewardedAd.load(
43
+ contextSupplier.get(),
44
+ id,
45
+ adRequest,
46
+ RewardedAdCallbackAndListeners.INSTANCE.getRewardedAdLoadCallback(call, notifyListenersFunction, adOptions)
47
+ );
48
+ } catch (Exception ex) {
49
+ call.reject(ex.getLocalizedMessage(), ex);
50
+ }
51
+ }
52
+ );
53
+ }
54
+
55
+ @PluginMethod
56
+ public void showRewardVideoAd(final PluginCall call, BiConsumer<String, JSObject> notifyListenersFunction) {
57
+ if (mRewardedAd == null) {
58
+ String errorMessage = "No Reward Video Ad can be show. It was not prepared or maybe it failed to be prepared.";
59
+ call.reject(errorMessage);
60
+ AdMobPluginError errorObject = new AdMobPluginError(-1, errorMessage);
61
+ notifyListenersFunction.accept(RewardAdPluginEvents.FailedToLoad, errorObject);
62
+ return;
63
+ }
64
+
65
+ try {
66
+ activitySupplier
67
+ .get()
68
+ .runOnUiThread(
69
+ () -> {
70
+ mRewardedAd.show(
71
+ activitySupplier.get(),
72
+ RewardedAdCallbackAndListeners.INSTANCE.getOnUserEarnedRewardListener(call, notifyListenersFunction)
73
+ );
74
+ }
75
+ );
76
+ } catch (Exception ex) {
77
+ call.reject(ex.getLocalizedMessage(), ex);
78
+ }
79
+ }
80
+ }
@@ -0,0 +1,12 @@
1
+ package com.getcapacitor.community.admob.rewarded
2
+
3
+ import com.getcapacitor.community.admob.models.LoadPluginEventNames
4
+
5
+ object RewardAdPluginEvents: LoadPluginEventNames {
6
+ const val Loaded = "onRewardedVideoAdLoaded"
7
+ const val FailedToLoad = "onRewardedVideoAdFailedToLoad"
8
+ const val Rewarded = "onRewardedVideoAdReward"
9
+ override val Showed = "onRewardedVideoAdShowed"
10
+ override val FailedToShow = "onRewardedVideoAdFailedToShow"
11
+ override val Dismissed = "onRewardedVideoAdDismissed"
12
+ }
@@ -0,0 +1,63 @@
1
+ package com.getcapacitor.community.admob.rewarded
2
+
3
+ import com.getcapacitor.JSObject
4
+ import com.getcapacitor.PluginCall
5
+ import com.getcapacitor.community.admob.helpers.FullscreenPluginCallback
6
+ import com.getcapacitor.community.admob.models.AdMobPluginError
7
+ import com.getcapacitor.community.admob.models.AdOptions
8
+ import com.google.android.gms.ads.LoadAdError
9
+ import com.google.android.gms.ads.OnUserEarnedRewardListener
10
+ import com.google.android.gms.ads.rewarded.RewardItem
11
+ import com.google.android.gms.ads.rewarded.RewardedAd
12
+ import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback
13
+ import com.google.android.gms.ads.rewarded.ServerSideVerificationOptions
14
+ import com.google.android.gms.common.util.BiConsumer
15
+
16
+ object RewardedAdCallbackAndListeners {
17
+
18
+ fun getOnUserEarnedRewardListener(call: PluginCall, notifyListenersFunction: BiConsumer<String, JSObject>): OnUserEarnedRewardListener {
19
+ return OnUserEarnedRewardListener { item: RewardItem ->
20
+ val response = JSObject()
21
+ response.put("type", item.type)
22
+ .put("amount", item.amount)
23
+ notifyListenersFunction.accept(RewardAdPluginEvents.Rewarded, response)
24
+ call.resolve(response)
25
+ }
26
+ }
27
+
28
+ fun getRewardedAdLoadCallback(call: PluginCall, notifyListenersFunction: BiConsumer<String, JSObject>, adOptions: AdOptions): RewardedAdLoadCallback {
29
+ return object : RewardedAdLoadCallback() {
30
+ override fun onAdLoaded(ad: RewardedAd) {
31
+ AdRewardExecutor.mRewardedAd = ad
32
+ AdRewardExecutor.mRewardedAd.fullScreenContentCallback = FullscreenPluginCallback(
33
+ RewardAdPluginEvents, notifyListenersFunction)
34
+
35
+ if(adOptions.ssvInfo.hasInfo){
36
+ val ssvOptions = ServerSideVerificationOptions.Builder()
37
+ adOptions.ssvInfo.customData?.let {
38
+ ssvOptions.setCustomData(it)
39
+ }
40
+
41
+ adOptions.ssvInfo.userId?.let {
42
+ ssvOptions.setUserId(it)
43
+ }
44
+ AdRewardExecutor.mRewardedAd.setServerSideVerificationOptions(ssvOptions.build())
45
+ }
46
+
47
+ val adInfo = JSObject()
48
+ adInfo.put("adUnitId", ad.adUnitId)
49
+ call.resolve(adInfo)
50
+
51
+ notifyListenersFunction.accept(RewardAdPluginEvents.Loaded, adInfo)
52
+ }
53
+
54
+ override fun onAdFailedToLoad(adError: LoadAdError) {
55
+ val adMobError = AdMobPluginError(adError)
56
+
57
+ notifyListenersFunction.accept(RewardAdPluginEvents.FailedToLoad, adMobError)
58
+ call.reject(adError.message)
59
+ }
60
+ }
61
+ }
62
+
63
+ }
@@ -0,0 +1,20 @@
1
+ package com.getcapacitor.community.admob.rewarded.models
2
+
3
+ import com.getcapacitor.PluginCall
4
+
5
+ class SsvInfo(
6
+ val customData: String? = null,
7
+ val userId: String? = null) {
8
+
9
+ constructor(pluginCall: PluginCall?) : this(
10
+ pluginCall?.getObject("ssv")?.getString("customData"),
11
+ pluginCall?.getObject("ssv")?.getString("userId")
12
+ )
13
+
14
+ constructor() : this(null, null)
15
+
16
+ val hasInfo
17
+ get(): Boolean {
18
+ return customData != null || userId != null
19
+ }
20
+ }
@@ -0,0 +1,15 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
3
+ xmlns:app="http://schemas.android.com/apk/res-auto"
4
+ xmlns:tools="http://schemas.android.com/tools"
5
+ android:layout_width="match_parent"
6
+ android:layout_height="match_parent"
7
+ tools:context="com.getcapacitor.BridgeActivity"
8
+ >
9
+
10
+ <WebView
11
+ android:id="@+id/webview"
12
+ android:layout_width="fill_parent"
13
+ android:layout_height="fill_parent" />
14
+
15
+ </androidx.coordinatorlayout.widget.CoordinatorLayout>
@@ -0,0 +1,3 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <resources>
3
+ </resources>
@@ -0,0 +1,2 @@
1
+ <resources>
2
+ </resources>
@@ -0,0 +1,3 @@
1
+ <resources>
2
+
3
+ </resources>