@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,232 @@
1
+ package com.getcapacitor.community.admob.consent;
2
+
3
+ import android.app.Activity;
4
+ import android.content.Context;
5
+ import android.content.SharedPreferences;
6
+ import android.preference.PreferenceManager;
7
+ import android.util.Log;
8
+
9
+ import androidx.core.util.Supplier;
10
+ import com.getcapacitor.JSArray;
11
+ import com.getcapacitor.JSObject;
12
+ import com.getcapacitor.PluginCall;
13
+ import com.getcapacitor.PluginMethod;
14
+ import com.getcapacitor.community.admob.models.Executor;
15
+ import com.google.android.gms.common.util.BiConsumer;
16
+ import com.google.android.ump.ConsentDebugSettings;
17
+ import com.google.android.ump.ConsentForm;
18
+ import com.google.android.ump.ConsentInformation;
19
+ import com.google.android.ump.ConsentRequestParameters;
20
+ import com.google.android.ump.FormError;
21
+ import com.google.android.ump.UserMessagingPlatform;
22
+
23
+ import java.util.ArrayList;
24
+ import java.util.List;
25
+
26
+ public class AdConsentExecutor extends Executor {
27
+
28
+ private ConsentInformation consentInformation;
29
+
30
+ public AdConsentExecutor(
31
+ Supplier<Context> contextSupplier,
32
+ Supplier<Activity> activitySupplier,
33
+ BiConsumer<String, JSObject> notifyListenersFunction,
34
+ String pluginLogTag
35
+ ) {
36
+ super(contextSupplier, activitySupplier, notifyListenersFunction, pluginLogTag, "AdConsentExecutor");
37
+ }
38
+
39
+ public boolean canShowPersonalizedAds(){
40
+ Context context = contextSupplier.get();
41
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());
42
+ String purposeConsent = prefs.getString("IABTCF_PurposeConsents", "");
43
+ String vendorConsent = prefs.getString("IABTCF_VendorConsents","");
44
+ String vendorLI = prefs.getString("IABTCF_VendorLegitimateInterests","");
45
+ String purposeLI = prefs.getString("IABTCF_PurposeLegitimateInterests","");
46
+
47
+ int googleId = 755;
48
+ boolean hasGoogleVendorConsent = hasAttribute(vendorConsent, googleId);
49
+ boolean hasGoogleVendorLI = hasAttribute(vendorLI, googleId);
50
+
51
+ List<Integer> indexes = new ArrayList<>();
52
+ indexes.add(1);
53
+ indexes.add(3);
54
+ indexes.add(4);
55
+
56
+ List<Integer> indexesLI = new ArrayList<>();
57
+ indexesLI.add(2);
58
+ indexesLI.add(7);
59
+ indexesLI.add(9);
60
+ indexesLI.add(10);
61
+
62
+ return hasConsentFor(indexes, purposeConsent, hasGoogleVendorConsent)
63
+ && hasConsentOrLegitimateInterestFor(indexesLI, purposeConsent, purposeLI, hasGoogleVendorConsent, hasGoogleVendorLI);
64
+
65
+ }
66
+ public boolean canShowAds(){
67
+ Context context = contextSupplier.get();
68
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());
69
+ String purposeConsent = prefs.getString("IABTCF_PurposeConsents", "");
70
+ String vendorConsent = prefs.getString("IABTCF_VendorConsents","");
71
+ String vendorLI = prefs.getString("IABTCF_VendorLegitimateInterests","");
72
+ String purposeLI = prefs.getString("IABTCF_PurposeLegitimateInterests","");
73
+
74
+ int googleId = 755;
75
+ boolean hasGoogleVendorConsent = hasAttribute(vendorConsent, googleId);
76
+ boolean hasGoogleVendorLI = hasAttribute(vendorLI, googleId);
77
+
78
+ List<Integer> indexes = new ArrayList<>();
79
+ indexes.add(1);
80
+
81
+ List<Integer> indexesLI = new ArrayList<>();
82
+ indexesLI.add(2);
83
+ indexesLI.add(7);
84
+ indexesLI.add(9);
85
+ indexesLI.add(10);
86
+
87
+ return hasConsentFor(indexes, purposeConsent, hasGoogleVendorConsent)
88
+ && hasConsentOrLegitimateInterestFor(indexesLI, purposeConsent, purposeLI, hasGoogleVendorConsent, hasGoogleVendorLI);
89
+
90
+ }
91
+
92
+ @PluginMethod
93
+ public void requestConsentInfo(final PluginCall call, BiConsumer<String, JSObject> notifyListenersFunction) {
94
+ try {
95
+ ensureConsentInfo();
96
+
97
+ ConsentRequestParameters.Builder paramsBuilder = new ConsentRequestParameters.Builder();
98
+ ConsentDebugSettings.Builder debugSettingsBuilder = new ConsentDebugSettings.Builder(contextSupplier.get());
99
+
100
+ if (call.getData().has("testDeviceIdentifiers")) {
101
+ JSArray devices = call.getArray("testDeviceIdentifiers");
102
+
103
+ for (int i = 0; i < devices.length(); i++) {
104
+ debugSettingsBuilder.addTestDeviceHashedId(devices.getString(i));
105
+ }
106
+ }
107
+
108
+ if (call.getData().has("debugGeography")) {
109
+ debugSettingsBuilder.setDebugGeography(call.getInt("debugGeography"));
110
+ }
111
+
112
+ paramsBuilder.setConsentDebugSettings(debugSettingsBuilder.build());
113
+
114
+ if (call.getData().has("tagForUnderAgeOfConsent")) {
115
+ paramsBuilder.setTagForUnderAgeOfConsent(call.getBoolean("tagForUnderAgeOfConsent"));
116
+ }
117
+
118
+ ConsentRequestParameters consentRequestParameters = paramsBuilder.build();
119
+
120
+ if (activitySupplier.get() == null) {
121
+ call.reject("Trying to request consent info but the Activity is null");
122
+ return;
123
+ }
124
+
125
+ consentInformation.requestConsentInfoUpdate(
126
+ activitySupplier.get(),
127
+ consentRequestParameters,
128
+ () -> {
129
+ JSObject consentInfo = new JSObject();
130
+ consentInfo.put("status", getConsentStatusString(consentInformation.getConsentStatus()));
131
+ consentInfo.put("isConsentFormAvailable", consentInformation.isConsentFormAvailable());
132
+ consentInfo.put("canShowAds", canShowAds());
133
+ consentInfo.put("canShowPersonalizedAds", canShowPersonalizedAds());
134
+ call.resolve(consentInfo);
135
+ },
136
+ formError -> call.reject(formError.getMessage())
137
+ );
138
+ } catch (Exception ex) {
139
+ call.reject(ex.getLocalizedMessage(), ex);
140
+ }
141
+ }
142
+
143
+ @PluginMethod
144
+ public void showConsentForm(final PluginCall call, BiConsumer<String, JSObject> notifyListenersFunction) {
145
+ try {
146
+ if (activitySupplier.get() == null) {
147
+ call.reject("Trying to show the consent form but the Activity is null");
148
+ return;
149
+ }
150
+ ensureConsentInfo();
151
+ activitySupplier
152
+ .get()
153
+ .runOnUiThread(
154
+ () ->
155
+ UserMessagingPlatform.loadConsentForm(
156
+ contextSupplier.get(),
157
+ consentForm ->
158
+ consentForm.show(
159
+ activitySupplier.get(),
160
+ formError -> {
161
+ if (formError != null) {
162
+ call.reject("Error when show consent form", formError.getMessage());
163
+ } else {
164
+ JSObject consentFormInfo = new JSObject();
165
+ consentFormInfo.put("status", getConsentStatusString(consentInformation.getConsentStatus()));
166
+ consentFormInfo.put("canShowAds", canShowAds());
167
+ consentFormInfo.put("canShowPersonalizedAds", canShowPersonalizedAds());
168
+ call.resolve(consentFormInfo);
169
+ }
170
+ }
171
+ ),
172
+ formError -> call.reject("Error when show consent form", formError.getMessage())
173
+ )
174
+ );
175
+ } catch (Exception ex) {
176
+ call.reject(ex.getLocalizedMessage(), ex);
177
+ }
178
+ }
179
+
180
+ @PluginMethod
181
+ public void resetConsentInfo(final PluginCall call, BiConsumer<String, JSObject> notifyListenersFunction) {
182
+ ensureConsentInfo();
183
+ consentInformation.reset();
184
+ call.resolve();
185
+ }
186
+
187
+ private String getConsentStatusString(int consentConstant) {
188
+ switch (consentConstant) {
189
+ case ConsentInformation.ConsentStatus.REQUIRED:
190
+ return "REQUIRED";
191
+ case ConsentInformation.ConsentStatus.NOT_REQUIRED:
192
+ return "NOT_REQUIRED";
193
+ case ConsentInformation.ConsentStatus.OBTAINED:
194
+ return "OBTAINED";
195
+ case ConsentInformation.ConsentStatus.UNKNOWN:
196
+ default:
197
+ return "UNKNOWN";
198
+ }
199
+ }
200
+
201
+ private void ensureConsentInfo() {
202
+ if (consentInformation == null) {
203
+ consentInformation = UserMessagingPlatform.getConsentInformation(contextSupplier.get());
204
+ }
205
+ }
206
+
207
+ private boolean hasAttribute(String input, int index) {
208
+ if (input == null) return false;
209
+ return input.length() >= index && input.charAt(index-1) == '1';
210
+ }
211
+
212
+ private boolean hasConsentFor(List<Integer> indexes, String purposeConsent, boolean hasVendorConsent) {
213
+ for (Integer p: indexes) {
214
+ if (!hasAttribute(purposeConsent, p)) {
215
+ return false;
216
+ }
217
+ }
218
+ return hasVendorConsent;
219
+ }
220
+
221
+ private boolean hasConsentOrLegitimateInterestFor(List<Integer> indexes, String purposeConsent, String purposeLI, boolean hasVendorConsent, boolean hasVendorLI){
222
+ for (Integer p: indexes) {
223
+ boolean purposeAndVendorLI = hasAttribute(purposeLI, p) && hasVendorLI;
224
+ boolean purposeConsentAndVendorConsent = hasAttribute(purposeConsent, p) && hasVendorConsent;
225
+ boolean isOk = purposeAndVendorLI || purposeConsentAndVendorConsent;
226
+ if (!isOk){
227
+ return false;
228
+ }
229
+ }
230
+ return true;
231
+ }
232
+ }
@@ -0,0 +1,31 @@
1
+ package com.getcapacitor.community.admob.helpers;
2
+
3
+ import android.content.Context;
4
+ import android.util.Log;
5
+ import com.getcapacitor.community.admob.models.AdOptions;
6
+ import com.google.android.gms.ads.AdRequest;
7
+ import com.google.android.gms.ads.AdView;
8
+
9
+ public final class AdViewIdHelper {
10
+
11
+ private AdViewIdHelper() {}
12
+
13
+ public static String getFinalAdId(AdOptions adOptions, AdRequest adRequest, String logTag, Context context) {
14
+ if (!adOptions.isTesting) {
15
+ return adOptions.adId;
16
+ }
17
+
18
+ if (adRequest.isTestDevice(context)) {
19
+ Log.w(logTag, "This device is registered as Testing Device. The real Ad Id will be used");
20
+ return adOptions.adId;
21
+ }
22
+
23
+ return adOptions.getTestingId();
24
+ }
25
+
26
+ public static void assignIdToAdView(AdView adView, AdOptions adOptions, AdRequest adRequest, String logTag, Context context) {
27
+ String finalId = getFinalAdId(adOptions, adRequest, logTag, context);
28
+ adView.setAdUnitId(finalId);
29
+ Log.d(logTag, "Ad ID: " + finalId);
30
+ }
31
+ }
@@ -0,0 +1,5 @@
1
+ package com.getcapacitor.community.admob.helpers
2
+
3
+ enum class AuthorizationStatusEnum(val status: String) {
4
+ AUTHORIZED("authorized");
5
+ }
@@ -0,0 +1,27 @@
1
+ package com.getcapacitor.community.admob.helpers
2
+
3
+ import com.getcapacitor.JSObject
4
+ import com.getcapacitor.community.admob.models.AdMobPluginError
5
+ import com.getcapacitor.community.admob.models.LoadPluginEventNames
6
+ import com.google.android.gms.ads.AdError
7
+ import com.google.android.gms.ads.FullScreenContentCallback
8
+ import com.google.android.gms.common.util.BiConsumer
9
+
10
+ class FullscreenPluginCallback(private val loadPluginObject: LoadPluginEventNames,
11
+ private val notifyListenersFunction: BiConsumer<String, JSObject>): FullScreenContentCallback() {
12
+
13
+ override fun onAdShowedFullScreenContent() {
14
+ notifyListenersFunction.accept(loadPluginObject.Showed, JSObject())
15
+ }
16
+
17
+ override fun onAdFailedToShowFullScreenContent(adError: AdError) {
18
+ val adMobError = AdMobPluginError(adError)
19
+ notifyListenersFunction.accept(
20
+ loadPluginObject.FailedToShow, adMobError
21
+ )
22
+ }
23
+
24
+ override fun onAdDismissedFullScreenContent() {
25
+ notifyListenersFunction.accept(loadPluginObject.Dismissed, JSObject())
26
+ }
27
+ }
@@ -0,0 +1,49 @@
1
+ package com.getcapacitor.community.admob.helpers;
2
+
3
+ import android.os.Bundle;
4
+ import com.getcapacitor.community.admob.models.AdOptions;
5
+ import com.google.ads.mediation.admob.AdMobAdapter;
6
+ import com.google.android.gms.ads.AdRequest;
7
+
8
+ public final class RequestHelper {
9
+
10
+ private RequestHelper() {}
11
+
12
+ /**
13
+ * Use this function to create all requests, here we can centralize request extras
14
+ * @param adOptions
15
+ * @return
16
+ */
17
+ public static AdRequest createRequest(AdOptions adOptions) {
18
+ AdRequest.Builder adRequestBuilder = new AdRequest.Builder();
19
+
20
+ // TODO: Allow more key/value extras?
21
+ if (adOptions.npa) {
22
+ Bundle extras = new Bundle();
23
+ extras.putString("npa", "1");
24
+ adRequestBuilder.addNetworkExtrasBundle(AdMobAdapter.class, extras);
25
+ }
26
+
27
+ return adRequestBuilder.build();
28
+ }
29
+
30
+ /**
31
+ * Gets a string error reason from an error code.
32
+ */
33
+ public static String getRequestErrorReason(int errorCode) {
34
+ switch (errorCode) {
35
+ case AdRequest.ERROR_CODE_INTERNAL_ERROR:
36
+ return "Internal error";
37
+ case AdRequest.ERROR_CODE_INVALID_REQUEST:
38
+ return "Invalid request";
39
+ case AdRequest.ERROR_CODE_NETWORK_ERROR:
40
+ return "Network Error";
41
+ case AdRequest.ERROR_CODE_NO_FILL:
42
+ return "No fill";
43
+ case AdRequest.ERROR_CODE_APP_ID_MISSING:
44
+ return "App Id Missing";
45
+ default:
46
+ return "Unknown error";
47
+ }
48
+ }
49
+ }
@@ -0,0 +1,80 @@
1
+ package com.getcapacitor.community.admob.interstitial;
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.community.admob.helpers.AdViewIdHelper;
9
+ import com.getcapacitor.community.admob.helpers.RequestHelper;
10
+ import com.getcapacitor.community.admob.models.AdMobPluginError;
11
+ import com.getcapacitor.community.admob.models.AdOptions;
12
+ import com.getcapacitor.community.admob.models.Executor;
13
+ import com.google.android.gms.ads.AdRequest;
14
+ import com.google.android.gms.ads.interstitial.InterstitialAd;
15
+ import com.google.android.gms.common.util.BiConsumer;
16
+
17
+ public class AdInterstitialExecutor extends Executor {
18
+
19
+ public static InterstitialAd interstitialAd;
20
+
21
+ InterstitialAdCallbackAndListeners adCallbackAndListeners;
22
+
23
+ public AdInterstitialExecutor(
24
+ Supplier<Context> contextSupplier,
25
+ Supplier<Activity> activitySupplier,
26
+ BiConsumer<String, JSObject> notifyListenersFunction,
27
+ String pluginLogTag,
28
+ InterstitialAdCallbackAndListeners adCallbackAndListeners
29
+ ) {
30
+ super(contextSupplier, activitySupplier, notifyListenersFunction, pluginLogTag, "AdRewardExecutor");
31
+ this.adCallbackAndListeners = adCallbackAndListeners;
32
+ }
33
+
34
+ public void prepareInterstitial(final PluginCall call, BiConsumer<String, JSObject> notifyListenersFunction) {
35
+ final AdOptions.AdOptionsFactory factory = AdOptions.getFactory();
36
+ final AdOptions adOptions = factory.createInterstitialOptions(call);
37
+
38
+ try {
39
+ activitySupplier
40
+ .get()
41
+ .runOnUiThread(
42
+ () -> {
43
+ final AdRequest adRequest = RequestHelper.createRequest(adOptions);
44
+ final String id = AdViewIdHelper.getFinalAdId(adOptions, adRequest, logTag, contextSupplier.get());
45
+ InterstitialAd.load(
46
+ activitySupplier.get(),
47
+ id,
48
+ adRequest,
49
+ adCallbackAndListeners.getInterstitialAdLoadCallback(call, notifyListenersFunction)
50
+ );
51
+ }
52
+ );
53
+ } catch (Exception ex) {
54
+ call.reject(ex.getLocalizedMessage(), ex);
55
+ }
56
+ }
57
+
58
+ public void showInterstitial(final PluginCall call, BiConsumer<String, JSObject> notifyListenersFunction) {
59
+ if (interstitialAd == null) {
60
+ String errorMessage = "No Interstitial can be show. It was not prepared or maybe it failed to be prepared.";
61
+ call.reject(errorMessage);
62
+ AdMobPluginError errorObject = new AdMobPluginError(-1, errorMessage);
63
+ notifyListenersFunction.accept(InterstitialAdPluginPluginEvent.FailedToLoad, errorObject);
64
+ return;
65
+ }
66
+
67
+ activitySupplier
68
+ .get()
69
+ .runOnUiThread(
70
+ () -> {
71
+ try {
72
+ interstitialAd.show(activitySupplier.get());
73
+ call.resolve();
74
+ } catch (Exception ex) {
75
+ call.reject(ex.getLocalizedMessage(), ex);
76
+ }
77
+ }
78
+ );
79
+ }
80
+ }
@@ -0,0 +1,38 @@
1
+ package com.getcapacitor.community.admob.interstitial
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.google.android.gms.ads.LoadAdError
8
+ import com.google.android.gms.ads.interstitial.InterstitialAd
9
+ import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback
10
+ import com.google.android.gms.common.util.BiConsumer
11
+
12
+ object InterstitialAdCallbackAndListeners {
13
+
14
+ fun getInterstitialAdLoadCallback(call: PluginCall,
15
+ notifyListenersFunction: BiConsumer<String, JSObject>,
16
+ ): InterstitialAdLoadCallback {
17
+ return object : InterstitialAdLoadCallback() {
18
+ override fun onAdLoaded(ad: InterstitialAd) {
19
+ ad.fullScreenContentCallback = FullscreenPluginCallback(InterstitialAdPluginPluginEvent, notifyListenersFunction)
20
+
21
+ AdInterstitialExecutor.interstitialAd = ad
22
+
23
+ val adInfo = JSObject()
24
+ adInfo.put("adUnitId", ad.adUnitId)
25
+ call.resolve(adInfo)
26
+
27
+ notifyListenersFunction.accept(InterstitialAdPluginPluginEvent.Loaded, adInfo)
28
+ }
29
+
30
+ override fun onAdFailedToLoad(adError: LoadAdError) {
31
+ val adMobError = AdMobPluginError(adError)
32
+
33
+ notifyListenersFunction.accept(InterstitialAdPluginPluginEvent.FailedToLoad, adMobError)
34
+ call.reject(adError.message)
35
+ }
36
+ }
37
+ }
38
+ }
@@ -0,0 +1,11 @@
1
+ package com.getcapacitor.community.admob.interstitial
2
+
3
+ import com.getcapacitor.community.admob.models.LoadPluginEventNames
4
+
5
+ object InterstitialAdPluginPluginEvent: LoadPluginEventNames {
6
+ const val Loaded = "interstitialAdLoaded"
7
+ const val FailedToLoad = "interstitialAdFailedToLoad"
8
+ override val Showed = "interstitialAdShowed"
9
+ override val FailedToShow = "interstitialAdFailedToShow"
10
+ override val Dismissed = "interstitialAdDismissed"
11
+ }
@@ -0,0 +1,15 @@
1
+ package com.getcapacitor.community.admob.models
2
+
3
+ import com.getcapacitor.JSObject
4
+ import com.google.android.gms.ads.AdError
5
+
6
+ data class AdMobPluginError(val code: Int, val message: String) : JSObject() {
7
+ override fun put(key: String, value: Int): JSObject {
8
+ throw Exception("Do not put elements directly here use the constructor")
9
+ }
10
+ init {
11
+ super.put("code", this.code)
12
+ super.put("message", this.message)
13
+ }
14
+ constructor(adError: AdError): this(adError.code, adError.message)
15
+ }