@rafaykhan021/mas-capacitor 1.0.0

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.
@@ -0,0 +1,415 @@
1
+ package com.yodo1.mas.capacitor;
2
+
3
+ import android.util.Log;
4
+
5
+ import androidx.annotation.NonNull;
6
+
7
+ import com.getcapacitor.JSObject;
8
+ import com.getcapacitor.Plugin;
9
+ import com.getcapacitor.PluginCall;
10
+ import com.getcapacitor.PluginMethod;
11
+ import com.getcapacitor.annotation.CapacitorPlugin;
12
+ import com.yodo1.mas.Yodo1Mas;
13
+ import com.yodo1.mas.Yodo1MasSdkConfiguration;
14
+ import com.yodo1.mas.appopenad.Yodo1MasAppOpenAd;
15
+ import com.yodo1.mas.appopenad.Yodo1MasAppOpenAdListener;
16
+ import com.yodo1.mas.error.Yodo1MasError;
17
+ import com.yodo1.mas.interstitial.Yodo1MasInterstitialAd;
18
+ import com.yodo1.mas.interstitial.Yodo1MasInterstitialAdListener;
19
+ import com.yodo1.mas.reward.Yodo1MasRewardAd;
20
+ import com.yodo1.mas.reward.Yodo1MasRewardAdListener;
21
+
22
+ import java.util.HashMap;
23
+ import java.util.Map;
24
+
25
+ @CapacitorPlugin(name = "Yodo1Mas")
26
+ public final class Yodo1MasPlugin extends Plugin {
27
+
28
+ private static final String LOG_TAG = "yodo1";
29
+
30
+ private volatile boolean isInitialized = false;
31
+
32
+ private final Map<String, String> lastPlacementIdByAdType = new HashMap<>();
33
+
34
+ private void emit(String eventName, JSObject payload) {
35
+ notifyListeners(eventName, payload);
36
+ }
37
+
38
+ private void emitGenericAdEvent(String adType, String eventName, JSObject payload) {
39
+ JSObject genericPayload = payload == null ? new JSObject() : payload;
40
+ genericPayload.put("adType", adType);
41
+ genericPayload.put("event", eventName);
42
+ notifyListeners("adEvent", genericPayload);
43
+ }
44
+
45
+ private JSObject basePayload(String adType) {
46
+ JSObject obj = new JSObject();
47
+ String placementId = lastPlacementIdByAdType.get(adType);
48
+ if (placementId != null)
49
+ obj.put("placementId", placementId);
50
+ return obj;
51
+ }
52
+
53
+ private JSObject errorPayload(String adType, Yodo1MasError error) {
54
+ JSObject obj = basePayload(adType);
55
+ if (error != null) {
56
+ obj.put("message", error.getMessage());
57
+ try {
58
+ obj.put("errorCode", String.valueOf(error.getCode()));
59
+ } catch (Throwable ignored) {
60
+ }
61
+ }
62
+ return obj;
63
+ }
64
+
65
+ private boolean ensureInitialized(PluginCall call) {
66
+ if (!isInitialized) {
67
+ call.reject("MAS not initialized. Call initialize() and wait for success before using ads.");
68
+ return false;
69
+ }
70
+ return true;
71
+ }
72
+
73
+ private void ensureListenersInitialized() {
74
+ Yodo1MasAppOpenAd.getInstance().setAdListener(new Yodo1MasAppOpenAdListener() {
75
+ @Override
76
+ public void onAppOpenAdLoaded(Yodo1MasAppOpenAd ad) {
77
+ JSObject payload = basePayload("appopen");
78
+ Log.d(LOG_TAG, "appOpenLoaded " + payload.toString());
79
+ emit("appOpenLoaded", payload);
80
+ emitGenericAdEvent("appopen", "loaded", payload);
81
+ }
82
+
83
+ @Override
84
+ public void onAppOpenAdFailedToLoad(Yodo1MasAppOpenAd ad, @NonNull Yodo1MasError error) {
85
+ JSObject payload = errorPayload("appopen", error);
86
+ Log.d(LOG_TAG, "appOpenLoadFailed " + payload.toString());
87
+ emit("appOpenLoadFailed", payload);
88
+ emitGenericAdEvent("appopen", "loadFailed", payload);
89
+ }
90
+
91
+ @Override
92
+ public void onAppOpenAdOpened(Yodo1MasAppOpenAd ad) {
93
+ JSObject payload = basePayload("appopen");
94
+ Log.d(LOG_TAG, "appOpenOpened " + payload.toString());
95
+ emit("appOpenOpened", payload);
96
+ emitGenericAdEvent("appopen", "opened", payload);
97
+ }
98
+
99
+ @Override
100
+ public void onAppOpenAdFailedToOpen(Yodo1MasAppOpenAd ad, @NonNull Yodo1MasError error) {
101
+ JSObject payload = errorPayload("appopen", error);
102
+ Log.d(LOG_TAG, "appOpenOpenFailed " + payload.toString());
103
+ emit("appOpenOpenFailed", payload);
104
+ emitGenericAdEvent("appopen", "openFailed", payload);
105
+ }
106
+
107
+ @Override
108
+ public void onAppOpenAdClosed(Yodo1MasAppOpenAd ad) {
109
+ JSObject payload = basePayload("appopen");
110
+ Log.d(LOG_TAG, "appOpenClosed " + payload.toString());
111
+ emit("appOpenClosed", payload);
112
+ emitGenericAdEvent("appopen", "closed", payload);
113
+ }
114
+ });
115
+
116
+ Yodo1MasInterstitialAd.getInstance().setAdListener(new Yodo1MasInterstitialAdListener() {
117
+ @Override
118
+ public void onInterstitialAdLoaded(Yodo1MasInterstitialAd ad) {
119
+ JSObject payload = basePayload("interstitial");
120
+ Log.d(LOG_TAG, "interstitialLoaded " + payload.toString());
121
+ emit("interstitialLoaded", payload);
122
+ emitGenericAdEvent("interstitial", "loaded", payload);
123
+ }
124
+
125
+ @Override
126
+ public void onInterstitialAdFailedToLoad(Yodo1MasInterstitialAd ad, @NonNull Yodo1MasError error) {
127
+ JSObject payload = errorPayload("interstitial", error);
128
+ Log.d(LOG_TAG, "interstitialLoadFailed " + payload.toString());
129
+ emit("interstitialLoadFailed", payload);
130
+ emitGenericAdEvent("interstitial", "loadFailed", payload);
131
+ }
132
+
133
+ @Override
134
+ public void onInterstitialAdOpened(Yodo1MasInterstitialAd ad) {
135
+ JSObject payload = basePayload("interstitial");
136
+ Log.d(LOG_TAG, "interstitialOpened " + payload.toString());
137
+ emit("interstitialOpened", payload);
138
+ emitGenericAdEvent("interstitial", "opened", payload);
139
+ }
140
+
141
+ @Override
142
+ public void onInterstitialAdFailedToOpen(Yodo1MasInterstitialAd ad, @NonNull Yodo1MasError error) {
143
+ JSObject payload = errorPayload("interstitial", error);
144
+ Log.d(LOG_TAG, "interstitialOpenFailed " + payload.toString());
145
+ emit("interstitialOpenFailed", payload);
146
+ emitGenericAdEvent("interstitial", "openFailed", payload);
147
+ }
148
+
149
+ @Override
150
+ public void onInterstitialAdClosed(Yodo1MasInterstitialAd ad) {
151
+ JSObject payload = basePayload("interstitial");
152
+ Log.d(LOG_TAG, "interstitialClosed " + payload.toString());
153
+ emit("interstitialClosed", payload);
154
+ emitGenericAdEvent("interstitial", "closed", payload);
155
+ }
156
+ });
157
+
158
+ Yodo1MasRewardAd.getInstance().setAdListener(new Yodo1MasRewardAdListener() {
159
+ @Override
160
+ public void onRewardAdLoaded(Yodo1MasRewardAd ad) {
161
+ JSObject payload = basePayload("rewarded");
162
+ Log.d(LOG_TAG, "rewardedLoaded " + payload.toString());
163
+ emit("rewardedLoaded", payload);
164
+ emitGenericAdEvent("rewarded", "loaded", payload);
165
+ }
166
+
167
+ @Override
168
+ public void onRewardAdFailedToLoad(Yodo1MasRewardAd ad, @NonNull Yodo1MasError error) {
169
+ JSObject payload = errorPayload("rewarded", error);
170
+ Log.d(LOG_TAG, "rewardedLoadFailed " + payload.toString());
171
+ emit("rewardedLoadFailed", payload);
172
+ emitGenericAdEvent("rewarded", "loadFailed", payload);
173
+ }
174
+
175
+ @Override
176
+ public void onRewardAdOpened(Yodo1MasRewardAd ad) {
177
+ JSObject payload = basePayload("rewarded");
178
+ Log.d(LOG_TAG, "rewardedOpened " + payload.toString());
179
+ emit("rewardedOpened", payload);
180
+ emitGenericAdEvent("rewarded", "opened", payload);
181
+ }
182
+
183
+ @Override
184
+ public void onRewardAdFailedToOpen(Yodo1MasRewardAd ad, @NonNull Yodo1MasError error) {
185
+ JSObject payload = errorPayload("rewarded", error);
186
+ Log.d(LOG_TAG, "rewardedOpenFailed " + payload.toString());
187
+ emit("rewardedOpenFailed", payload);
188
+ emitGenericAdEvent("rewarded", "openFailed", payload);
189
+ }
190
+
191
+ @Override
192
+ public void onRewardAdClosed(Yodo1MasRewardAd ad) {
193
+ JSObject payload = basePayload("rewarded");
194
+ Log.d(LOG_TAG, "rewardedClosed " + payload.toString());
195
+ emit("rewardedClosed", payload);
196
+ emitGenericAdEvent("rewarded", "closed", payload);
197
+ }
198
+
199
+ @Override
200
+ public void onRewardAdEarned(Yodo1MasRewardAd ad) {
201
+ JSObject payload = basePayload("rewarded");
202
+ Log.d(LOG_TAG, "rewardedEarned " + payload.toString());
203
+ emit("rewardedEarned", payload);
204
+ emitGenericAdEvent("rewarded", "rewardEarned", payload);
205
+ }
206
+ });
207
+ }
208
+
209
+ @PluginMethod
210
+ public void initialize(PluginCall call) {
211
+ String appKey = call.getString("appKey");
212
+ boolean coppa = call.getBoolean("coppa", false);
213
+ boolean gdpr = call.getBoolean("gdpr", true);
214
+ boolean ccpa = call.getBoolean("ccpa", false);
215
+ boolean autoDelayIfLoadFail = call.getBoolean("autoDelayIfLoadFail", true);
216
+
217
+ if (appKey == null || appKey.trim().isEmpty()) {
218
+ call.reject("Missing required field: appKey");
219
+ return;
220
+ }
221
+
222
+ Log.d(LOG_TAG, "initialize called appKey=" + appKey);
223
+
224
+ Yodo1Mas.getInstance().setCOPPA(coppa);
225
+ Yodo1Mas.getInstance().setGDPR(gdpr);
226
+ Yodo1Mas.getInstance().setCCPA(ccpa);
227
+
228
+ Yodo1MasAppOpenAd.getInstance().autoDelayIfLoadFail = autoDelayIfLoadFail;
229
+ Yodo1MasInterstitialAd.getInstance().autoDelayIfLoadFail = autoDelayIfLoadFail;
230
+ Yodo1MasRewardAd.getInstance().autoDelayIfLoadFail = autoDelayIfLoadFail;
231
+
232
+ ensureListenersInitialized();
233
+
234
+ Yodo1Mas.getInstance().initMas(getActivity(), appKey, new Yodo1Mas.InitListener() {
235
+ @Override
236
+ public void onMasInitSuccessful() {
237
+ isInitialized = true;
238
+ Log.d(LOG_TAG, "MAS init successful (no config)");
239
+
240
+ JSObject payload = new JSObject();
241
+ payload.put("initialized", true);
242
+
243
+ emit("initialized", payload);
244
+ emitGenericAdEvent("sdk", "initialized", payload);
245
+
246
+ call.resolve(payload);
247
+ }
248
+
249
+ @Override
250
+ public void onMasInitSuccessful(@NonNull Yodo1MasSdkConfiguration configuration) {
251
+ isInitialized = true;
252
+ Log.d(LOG_TAG, "MAS init successful (with config)");
253
+
254
+ JSObject payload = new JSObject();
255
+ payload.put("initialized", true);
256
+
257
+ emit("initialized", payload);
258
+ emitGenericAdEvent("sdk", "initialized", payload);
259
+
260
+ call.resolve(payload);
261
+ }
262
+
263
+ @Override
264
+ public void onMasInitFailed(@NonNull Yodo1MasError error) {
265
+ isInitialized = false;
266
+
267
+ JSObject payload = new JSObject();
268
+ payload.put("initialized", false);
269
+ payload.put("message", error.getMessage());
270
+ try {
271
+ payload.put("errorCode", String.valueOf(error.getCode()));
272
+ } catch (Throwable ignored) {
273
+ }
274
+
275
+ Log.d(LOG_TAG, "MAS init failed " + payload.toString());
276
+
277
+ emit("initFailed", payload);
278
+ emitGenericAdEvent("sdk", "initFailed", payload);
279
+
280
+ call.reject("MAS init failed: " + error.getMessage());
281
+ }
282
+ });
283
+ }
284
+
285
+ @PluginMethod
286
+ public void loadAd(PluginCall call) {
287
+ if (!ensureInitialized(call))
288
+ return;
289
+
290
+ String adType = call.getString("adType");
291
+ if (adType == null || adType.trim().isEmpty()) {
292
+ call.reject("Missing required field: adType");
293
+ return;
294
+ }
295
+
296
+ Log.d(LOG_TAG, "loadAd called adType=" + adType + " isInitialized=" + isInitialized);
297
+
298
+ final String finalAdType = adType;
299
+
300
+ getActivity().runOnUiThread(() -> {
301
+ try {
302
+ switch (finalAdType) {
303
+ case "appopen":
304
+ Yodo1MasAppOpenAd.getInstance().loadAd(getActivity());
305
+ break;
306
+ case "interstitial":
307
+ Yodo1MasInterstitialAd.getInstance().loadAd(getActivity());
308
+ break;
309
+ case "rewarded":
310
+ Yodo1MasRewardAd.getInstance().loadAd(getActivity());
311
+ break;
312
+ default:
313
+ call.reject("Unsupported adType: " + finalAdType);
314
+ return;
315
+ }
316
+
317
+ JSObject result = new JSObject();
318
+ result.put("ok", true);
319
+ result.put("action", "loadAd");
320
+ result.put("adType", finalAdType);
321
+ call.resolve(result);
322
+ } catch (Exception e) {
323
+ call.reject("loadAd failed: " + e.getMessage());
324
+ }
325
+ });
326
+ }
327
+
328
+ @PluginMethod
329
+ public void showAd(PluginCall call) {
330
+ if (!ensureInitialized(call))
331
+ return;
332
+
333
+ String adType = call.getString("adType");
334
+ String placementId = call.getString("placementId", "default");
335
+
336
+ if (adType == null || adType.trim().isEmpty()) {
337
+ call.reject("Missing required field: adType");
338
+ return;
339
+ }
340
+
341
+ if (placementId == null || placementId.trim().isEmpty()) {
342
+ placementId = "default";
343
+ }
344
+
345
+ lastPlacementIdByAdType.put(adType, placementId);
346
+
347
+ final String finalAdType = adType;
348
+ final String finalPlacementId = placementId;
349
+
350
+ Log.d(LOG_TAG, "showAd called adType=" + finalAdType + " placementId=" + finalPlacementId + " isInitialized="
351
+ + isInitialized);
352
+
353
+ getActivity().runOnUiThread(() -> {
354
+ try {
355
+ switch (finalAdType) {
356
+ case "appopen":
357
+ Yodo1MasAppOpenAd.getInstance().showAd(getActivity(), finalPlacementId);
358
+ break;
359
+ case "interstitial":
360
+ Yodo1MasInterstitialAd.getInstance().showAd(getActivity(), finalPlacementId);
361
+ break;
362
+ case "rewarded":
363
+ Yodo1MasRewardAd.getInstance().showAd(getActivity(), finalPlacementId);
364
+ break;
365
+ default:
366
+ call.reject("Unsupported adType: " + finalAdType);
367
+ return;
368
+ }
369
+
370
+ JSObject result = new JSObject();
371
+ result.put("ok", true);
372
+ result.put("action", "showAd");
373
+ result.put("adType", finalAdType);
374
+ result.put("placementId", finalPlacementId);
375
+ call.resolve(result);
376
+ } catch (Exception e) {
377
+ call.reject("showAd failed: " + e.getMessage());
378
+ }
379
+ });
380
+ }
381
+
382
+ @PluginMethod
383
+ public void isAdLoaded(PluginCall call) {
384
+ if (!ensureInitialized(call))
385
+ return;
386
+
387
+ String adType = call.getString("adType");
388
+ if (adType == null || adType.trim().isEmpty()) {
389
+ call.reject("Missing required field: adType");
390
+ return;
391
+ }
392
+
393
+ boolean isLoaded;
394
+
395
+ switch (adType) {
396
+ case "appopen":
397
+ isLoaded = Yodo1MasAppOpenAd.getInstance().isLoaded();
398
+ break;
399
+ case "interstitial":
400
+ isLoaded = Yodo1MasInterstitialAd.getInstance().isLoaded();
401
+ break;
402
+ case "rewarded":
403
+ isLoaded = Yodo1MasRewardAd.getInstance().isLoaded();
404
+ break;
405
+ default:
406
+ call.reject("Unsupported adType: " + adType);
407
+ return;
408
+ }
409
+
410
+ JSObject result = new JSObject();
411
+ result.put("isLoaded", isLoaded);
412
+ result.put("adType", adType);
413
+ call.resolve(result);
414
+ }
415
+ }
File without changes