This repository has been archived by the owner on Apr 27, 2022. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 31
/
RNAdMobAppOpenAdModule.java
106 lines (87 loc) · 3.63 KB
/
RNAdMobAppOpenAdModule.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package com.rnadmob.admob.ads;
import android.app.Activity;
import android.os.Handler;
import androidx.annotation.NonNull;
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.ProcessLifecycleOwner;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableMap;
import com.google.android.gms.ads.AdLoadCallback;
import com.google.android.gms.ads.FullScreenContentCallback;
import com.google.android.gms.ads.LoadAdError;
import com.google.android.gms.ads.admanager.AdManagerAdRequest;
import com.google.android.gms.ads.appopen.AppOpenAd;
import java.util.Date;
public class RNAdMobAppOpenAdModule extends RNAdMobFullScreenAdModule<AppOpenAd> implements DefaultLifecycleObserver {
public static final String AD_TYPE = "AppOpen";
private static final int AD_EXPIRE_HOUR = 4;
public static int requestId = 0;
public static boolean appStarted = false;
private boolean showOnAppForeground = true;
private long loadTime = 0;
public RNAdMobAppOpenAdModule(ReactApplicationContext reactContext) {
super(reactContext);
Handler mainHandler = new Handler(reactContext.getMainLooper());
mainHandler.post(() -> ProcessLifecycleOwner.get().getLifecycle().addObserver(this));
appStarted = false;
}
@Override
protected String getAdType() {
return AD_TYPE;
}
@Override
@ReactMethod
public void requestAd(int requestId, String unitId, ReadableMap options, final Promise promise) {
super.requestAd(requestId, unitId, options, promise);
RNAdMobAppOpenAdModule.requestId = requestId;
showOnAppForeground = options.getBoolean("showOnAppForeground");
}
@Override
@ReactMethod
protected void presentAd(int requestId, final Promise promise) {
super.presentAd(requestId, promise);
}
@Override
@ReactMethod
protected void destroyAd(int requestId) {
super.destroyAd(requestId);
}
@Override
protected void load(String unitId, AdManagerAdRequest adRequest, AdLoadCallback<AppOpenAd> adLoadCallback, FullScreenContentCallback fullScreenContentCallback) {
AppOpenAd.load(getReactApplicationContext(), unitId, adRequest, AppOpenAd.APP_OPEN_AD_ORIENTATION_PORTRAIT,
new AppOpenAd.AppOpenAdLoadCallback() {
@Override
public void onAdLoaded(@NonNull AppOpenAd ad) {
ad.setFullScreenContentCallback(fullScreenContentCallback);
loadTime = (new Date()).getTime();
adLoadCallback.onAdLoaded(ad);
}
@Override
public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) {
adLoadCallback.onAdFailedToLoad(loadAdError);
}
});
}
@Override
protected void show(AppOpenAd ad, Activity activity, int requestId) {
if (isAdExpired()) {
presentPromiseHolder.reject(requestId, "E_AD_NOT_READY", "Ad is not ready.");
return;
}
ad.show(activity);
}
private boolean isAdExpired() {
long dateDifference = (new Date()).getTime() - this.loadTime;
long numMilliSecondsPerHour = 3600000;
return (dateDifference > (numMilliSecondsPerHour * (long) AD_EXPIRE_HOUR));
}
@Override
public void onStart(@NonNull LifecycleOwner owner) {
if (showOnAppForeground) {
presentAd(requestId, null);
}
}
}