adwhale-sdk-react-native 2.7.101 → 2.7.200
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.
- package/README.md +4 -4
- package/android/build.gradle +9 -6
- package/android/proguard-rules.pro +18 -1
- package/android/src/main/java/com/adwhalesdkreactnative/AdwhaleSdkReactNativePackage.java +24 -4
- package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationAdView.java +32 -0
- package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationAppOpenAd.java +240 -0
- package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationCustomNativeAdView.java +32 -0
- package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationInterstitialAd.java +33 -2
- package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationLoggerModule.java +14 -0
- package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationRewardAd.java +33 -0
- package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationTemplateNativeAdView.java +31 -2
- package/lib/module/AdWhaleAppOpenAd.js +58 -0
- package/lib/module/AdWhaleAppOpenAd.js.map +1 -0
- package/lib/module/AdWhaleBannerView.js.map +1 -1
- package/lib/module/AdWhaleInterstitialAd.js +12 -1
- package/lib/module/AdWhaleInterstitialAd.js.map +1 -1
- package/lib/module/AdWhaleMediationSdk.js +6 -0
- package/lib/module/AdWhaleMediationSdk.js.map +1 -1
- package/lib/module/AdWhaleNativeCustomView.js.map +1 -1
- package/lib/module/AdWhaleNativeTemplateView.js.map +1 -1
- package/lib/module/AdWhaleRewardAd.js +12 -1
- package/lib/module/AdWhaleRewardAd.js.map +1 -1
- package/lib/module/index.js +4 -2
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/AdWhaleAppOpenAd.d.ts +27 -0
- package/lib/typescript/src/AdWhaleAppOpenAd.d.ts.map +1 -0
- package/lib/typescript/src/AdWhaleBannerView.d.ts +7 -0
- package/lib/typescript/src/AdWhaleBannerView.d.ts.map +1 -1
- package/lib/typescript/src/AdWhaleInterstitialAd.d.ts +9 -1
- package/lib/typescript/src/AdWhaleInterstitialAd.d.ts.map +1 -1
- package/lib/typescript/src/AdWhaleMediationSdk.d.ts +1 -0
- package/lib/typescript/src/AdWhaleMediationSdk.d.ts.map +1 -1
- package/lib/typescript/src/AdWhaleNativeCustomView.d.ts +7 -0
- package/lib/typescript/src/AdWhaleNativeCustomView.d.ts.map +1 -1
- package/lib/typescript/src/AdWhaleNativeTemplateView.d.ts +8 -1
- package/lib/typescript/src/AdWhaleNativeTemplateView.d.ts.map +1 -1
- package/lib/typescript/src/AdWhaleRewardAd.d.ts +9 -1
- package/lib/typescript/src/AdWhaleRewardAd.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +2 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +5 -2
- package/plugin/index.js +135 -4
- package/src/AdWhaleAppOpenAd.ts +118 -0
- package/src/AdWhaleBannerView.tsx +8 -0
- package/src/AdWhaleInterstitialAd.ts +27 -1
- package/src/AdWhaleMediationSdk.ts +10 -0
- package/src/AdWhaleNativeCustomView.tsx +8 -0
- package/src/AdWhaleNativeTemplateView.tsx +9 -1
- package/src/AdWhaleRewardAd.ts +27 -1
- package/src/index.ts +12 -2
package/README.md
CHANGED
|
@@ -43,16 +43,16 @@ npm install adwhale-sdk-react-native
|
|
|
43
43
|
운영 안정성을 중시하는 경우
|
|
44
44
|
```json
|
|
45
45
|
{
|
|
46
|
-
"adwhale-sdk-react-native": "~2.7.
|
|
46
|
+
"adwhale-sdk-react-native": "~2.7.200"
|
|
47
47
|
}
|
|
48
48
|
```
|
|
49
|
-
- Android SDK 2.7.
|
|
49
|
+
- Android SDK 2.7.2 기반 유지
|
|
50
50
|
- RN 핫픽스만 자동 반영
|
|
51
51
|
|
|
52
52
|
### 동일한 Android SDK 기반의 최신 RN 수정만 사용
|
|
53
53
|
```json
|
|
54
54
|
{
|
|
55
|
-
"adwhale-sdk-react-native": "^2.7.
|
|
55
|
+
"adwhale-sdk-react-native": "^2.7.200"
|
|
56
56
|
}
|
|
57
57
|
```
|
|
58
58
|
- Android SDK 2.7.x 범위 내 최신 RN 수정 자동 반영
|
|
@@ -62,7 +62,7 @@ npm install adwhale-sdk-react-native
|
|
|
62
62
|
### 특정 버전을 완전히 고정하여 사용하는 경우
|
|
63
63
|
```json
|
|
64
64
|
{
|
|
65
|
-
"adwhale-sdk-react-native": "2.7.
|
|
65
|
+
"adwhale-sdk-react-native": "2.7.200"
|
|
66
66
|
}
|
|
67
67
|
```
|
|
68
68
|
|
package/android/build.gradle
CHANGED
|
@@ -114,22 +114,25 @@ repositories {
|
|
|
114
114
|
|
|
115
115
|
dependencies {
|
|
116
116
|
implementation "com.facebook.react:react-android:0.81.1"
|
|
117
|
+
implementation 'androidx.lifecycle:lifecycle-process:2.6.2'
|
|
118
|
+
implementation 'androidx.lifecycle:lifecycle-runtime:2.6.2'
|
|
117
119
|
|
|
118
120
|
// 기본 디펜던시: ADwhale Mediation SDK Repository
|
|
119
|
-
implementation "net.adwhale.sdk.mediation:adwhale-mediation-sdk:2.7.
|
|
121
|
+
implementation "net.adwhale.sdk.mediation:adwhale-mediation-sdk:2.7.2"
|
|
120
122
|
|
|
121
123
|
// 옵션 디펜던시(제외가능): Cauly Adapter SDK Repository
|
|
122
|
-
implementation "net.adwhale.sdk.cauly.adapter:cauly-sdk:3.5.
|
|
124
|
+
implementation "net.adwhale.sdk.cauly.adapter:cauly-sdk:3.5.41.0"
|
|
123
125
|
|
|
124
126
|
// 옵션 디펜던시(제외가능): Admize Adapter SDK Repository
|
|
125
|
-
implementation "net.adwhale.sdk.admize.adapter:admize-sdk:1.0.
|
|
127
|
+
implementation "net.adwhale.sdk.admize.adapter:admize-sdk:1.0.8.0"
|
|
126
128
|
|
|
127
129
|
// 옵션 디펜던시(제외가능): AdFit Adapter SDK Repository
|
|
128
|
-
implementation "net.adwhale.sdk.adfit.adapter:adfit-sdk:3.17.2.
|
|
130
|
+
implementation "net.adwhale.sdk.adfit.adapter:adfit-sdk:3.17.2.5"
|
|
129
131
|
|
|
130
132
|
// 옵션 디펜던시(제외가능): Admob Adapter SDK Repository
|
|
131
|
-
implementation "net.adwhale.sdk.admob.adapter:admob-sdk:24.3.0.
|
|
133
|
+
implementation "net.adwhale.sdk.admob.adapter:admob-sdk:24.3.0.2"
|
|
132
134
|
|
|
133
135
|
// 옵션 디펜던시(제외가능): Levelplay Adapter SDK Repository
|
|
134
|
-
implementation "net.adwhale.sdk.levelplay.adapter:levelplay-sdk:8.7.0.
|
|
136
|
+
implementation "net.adwhale.sdk.levelplay.adapter:levelplay-sdk:8.7.0.6"
|
|
137
|
+
|
|
135
138
|
}
|
|
@@ -136,6 +136,20 @@
|
|
|
136
136
|
|
|
137
137
|
-keep interface net.adwhale.sdk.mediation.ads.AdWhaleMediationAdBannerViewListener {*;}
|
|
138
138
|
|
|
139
|
+
-keepclasseswithmembers class net.adwhale.sdk.mediation.ads.AdWhaleMediationAppOpenAd {
|
|
140
|
+
public <init>(...);
|
|
141
|
+
public *** loadAd();
|
|
142
|
+
public *** showAd(***);
|
|
143
|
+
public *** setRegion(***);
|
|
144
|
+
public *** setGcoder(***, ***);
|
|
145
|
+
public *** setPlacementUid(***);
|
|
146
|
+
public *** setPlacementName(***);
|
|
147
|
+
public *** destroy();
|
|
148
|
+
public *** setAdWhaleMediationAppOpenAdListener(***);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
-keep interface net.adwhale.sdk.mediation.ads.AdWhaleMediationAppOpenAdListener {*;}
|
|
152
|
+
|
|
139
153
|
#================== AdWhale Mediation SDK Proguard for Release 적용 코드 끝 ==================
|
|
140
154
|
|
|
141
155
|
#================== AdWhale Cauly Adapter SDK Proguard for Release 적용 코드 시작 ==================
|
|
@@ -191,6 +205,7 @@
|
|
|
191
205
|
-keep class net.adwhale.sdk.admob.adapter.AdManagerAdRewardLoader {*;}
|
|
192
206
|
|
|
193
207
|
-keep class net.adwhale.sdk.admob.adapter.AdManagerAdRewardedInterstitialLoader {*;}
|
|
208
|
+
-keep class net.adwhale.sdk.admob.adapter.AdManagerAdAppOpeningLoader {*;}
|
|
194
209
|
|
|
195
210
|
#================== AdWhale AdManager Adapter SDK Proguard for Release 적용 코드 끝 ==================
|
|
196
211
|
|
|
@@ -210,6 +225,8 @@
|
|
|
210
225
|
|
|
211
226
|
-keep class net.adwhale.sdk.admob.adapter.AdmobAdRewardedInterstitialLoader {*;}
|
|
212
227
|
|
|
228
|
+
-keep class net.adwhale.sdk.admob.adapter.AdmobAdAppOpeningLoader {*;}
|
|
229
|
+
|
|
213
230
|
-keep class net.adwhale.sdk.admob.adapter.custom.cauly.AdMobCaulyEvent {*;}
|
|
214
231
|
|
|
215
232
|
-keep class net.adwhale.sdk.admob.adapter.custom.cauly.CaulyMediationBannerAd {*;}
|
|
@@ -244,4 +261,4 @@
|
|
|
244
261
|
public static net.adwhale.sdk.levelplay.adapter.LevelPlayPrivacyAdapter getInstance();
|
|
245
262
|
}
|
|
246
263
|
|
|
247
|
-
#================== AdWhale LevelPlay Adapter SDK Proguard for Release 적용 코드 끝 ==================
|
|
264
|
+
#================== AdWhale LevelPlay Adapter SDK Proguard for Release 적용 코드 끝 ==================
|
|
@@ -41,6 +41,12 @@ public class AdwhaleSdkReactNativePackage extends BaseReactPackage {
|
|
|
41
41
|
if (RNAdWhaleMediationRewardAd.REACT_CLASS_NAME.equals(name)) {
|
|
42
42
|
return new RNAdWhaleMediationRewardAd(reactContext);
|
|
43
43
|
}
|
|
44
|
+
|
|
45
|
+
// 엡오프닝 Old Architecture를 따르지만 등록은 TurboModule로 등록
|
|
46
|
+
if(RNAdWhaleMediationAppOpenAd.REACT_CLASS_NAME.equals(name)) {
|
|
47
|
+
return new RNAdWhaleMediationAppOpenAd(reactContext);
|
|
48
|
+
}
|
|
49
|
+
|
|
44
50
|
return null;
|
|
45
51
|
}
|
|
46
52
|
|
|
@@ -52,7 +58,8 @@ public class AdwhaleSdkReactNativePackage extends BaseReactPackage {
|
|
|
52
58
|
return Arrays.<NativeModule>asList(
|
|
53
59
|
new RNAdWhaleMediationLoggerModule(reactContext),
|
|
54
60
|
new RNAdWhaleMediationInterstitialAd(reactContext),
|
|
55
|
-
new RNAdWhaleMediationRewardAd(reactContext)
|
|
61
|
+
new RNAdWhaleMediationRewardAd(reactContext),
|
|
62
|
+
new RNAdWhaleMediationAppOpenAd(reactContext)
|
|
56
63
|
// RNAdWhaleMediationAdSettingModule는 TurboModule로 등록되므로 여기서 굳이 추가 안 해도 됨
|
|
57
64
|
);
|
|
58
65
|
}
|
|
@@ -85,7 +92,7 @@ public class AdwhaleSdkReactNativePackage extends BaseReactPackage {
|
|
|
85
92
|
)
|
|
86
93
|
);
|
|
87
94
|
|
|
88
|
-
//
|
|
95
|
+
// 로거/전면/보상형/앱오프닝은 legacy 모듈로 사용 (isTurboModule = false)
|
|
89
96
|
moduleInfos.put(
|
|
90
97
|
RNAdWhaleMediationLoggerModule.REACT_CLASS_NAME,
|
|
91
98
|
new ReactModuleInfo(
|
|
@@ -98,7 +105,7 @@ public class AdwhaleSdkReactNativePackage extends BaseReactPackage {
|
|
|
98
105
|
)
|
|
99
106
|
);
|
|
100
107
|
|
|
101
|
-
//
|
|
108
|
+
// 로거/전면/보상형/앱오프닝은 legacy 모듈로 사용 (isTurboModule = false)
|
|
102
109
|
moduleInfos.put(
|
|
103
110
|
RNAdWhaleMediationInterstitialAd.REACT_CLASS_NAME,
|
|
104
111
|
new ReactModuleInfo(
|
|
@@ -111,7 +118,7 @@ public class AdwhaleSdkReactNativePackage extends BaseReactPackage {
|
|
|
111
118
|
)
|
|
112
119
|
);
|
|
113
120
|
|
|
114
|
-
//
|
|
121
|
+
// 로거/전면/보상형/앱오프닝은 legacy 모듈로 사용 (isTurboModule = false)
|
|
115
122
|
moduleInfos.put(
|
|
116
123
|
RNAdWhaleMediationRewardAd.REACT_CLASS_NAME,
|
|
117
124
|
new ReactModuleInfo(
|
|
@@ -124,6 +131,19 @@ public class AdwhaleSdkReactNativePackage extends BaseReactPackage {
|
|
|
124
131
|
)
|
|
125
132
|
);
|
|
126
133
|
|
|
134
|
+
// 로거/전면/보상형/앱오프닝은 legacy 모듈로 사용 (isTurboModule = false)
|
|
135
|
+
moduleInfos.put(
|
|
136
|
+
RNAdWhaleMediationAppOpenAd.REACT_CLASS_NAME,
|
|
137
|
+
new ReactModuleInfo(
|
|
138
|
+
RNAdWhaleMediationAppOpenAd.REACT_CLASS_NAME,
|
|
139
|
+
RNAdWhaleMediationAppOpenAd.REACT_CLASS_NAME,
|
|
140
|
+
false,
|
|
141
|
+
false,
|
|
142
|
+
false,
|
|
143
|
+
false
|
|
144
|
+
)
|
|
145
|
+
);
|
|
146
|
+
|
|
127
147
|
return moduleInfos;
|
|
128
148
|
};
|
|
129
149
|
}
|
|
@@ -11,6 +11,7 @@ import androidx.annotation.Nullable;
|
|
|
11
11
|
|
|
12
12
|
import com.facebook.react.bridge.Arguments;
|
|
13
13
|
import com.facebook.react.bridge.ReactContext;
|
|
14
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
14
15
|
import com.facebook.react.bridge.WritableMap;
|
|
15
16
|
import com.facebook.react.common.MapBuilder;
|
|
16
17
|
import com.facebook.react.uimanager.ThemedReactContext;
|
|
@@ -133,6 +134,37 @@ public class RNAdWhaleMediationAdView extends ViewGroupManager<RNWrapperView> {
|
|
|
133
134
|
}
|
|
134
135
|
}
|
|
135
136
|
|
|
137
|
+
@ReactProp(name = "placementName")
|
|
138
|
+
public void setPlacementName(RNWrapperView view, String placementName) {
|
|
139
|
+
Log.e(REACT_CLASS_NAME, "placementName: " + placementName);
|
|
140
|
+
AdWhaleMediationAdView adView = getAdWhaleMediationAdView(view);
|
|
141
|
+
if (adView != null) {
|
|
142
|
+
adView.setPlacementName(placementName);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
@ReactProp(name = "region")
|
|
147
|
+
public void setRegion(RNWrapperView view, String region) {
|
|
148
|
+
Log.e(REACT_CLASS_NAME, "region: " + region);
|
|
149
|
+
AdWhaleMediationAdView adView = getAdWhaleMediationAdView(view);
|
|
150
|
+
if (adView != null) {
|
|
151
|
+
adView.setRegion(region);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
@ReactProp(name = "gcoder")
|
|
156
|
+
public void setGcoder(RNWrapperView view, ReadableMap gcoderMap) {
|
|
157
|
+
Log.e(REACT_CLASS_NAME, "gcoderMap: " + gcoderMap);
|
|
158
|
+
AdWhaleMediationAdView adView = getAdWhaleMediationAdView(view);
|
|
159
|
+
|
|
160
|
+
if (adView != null && gcoderMap != null) {
|
|
161
|
+
double lt = gcoderMap.hasKey("lt") ? gcoderMap.getDouble("lt") : 0.0;
|
|
162
|
+
double lng = gcoderMap.hasKey("lng") ? gcoderMap.getDouble("lng") : 0.0;
|
|
163
|
+
|
|
164
|
+
adView.setGcoder(lt, lng);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
136
168
|
private AdWhaleMediationAdView getAdWhaleMediationAdView(RNWrapperView parent) {
|
|
137
169
|
if (parent != null && parent.getChildCount() > 0 && parent.getChildAt(0) instanceof AdWhaleMediationAdView) {
|
|
138
170
|
return (AdWhaleMediationAdView) parent.getChildAt(0);
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
package com.adwhalesdkreactnative;
|
|
2
|
+
|
|
3
|
+
import android.util.Log;
|
|
4
|
+
|
|
5
|
+
import androidx.annotation.NonNull;
|
|
6
|
+
import androidx.annotation.Nullable;
|
|
7
|
+
import androidx.lifecycle.DefaultLifecycleObserver;
|
|
8
|
+
import androidx.lifecycle.LifecycleOwner;
|
|
9
|
+
import androidx.lifecycle.ProcessLifecycleOwner;
|
|
10
|
+
|
|
11
|
+
import com.facebook.react.bridge.Arguments;
|
|
12
|
+
import com.facebook.react.bridge.LifecycleEventListener;
|
|
13
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
14
|
+
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
|
15
|
+
import com.facebook.react.bridge.ReactMethod;
|
|
16
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
17
|
+
import com.facebook.react.bridge.UiThreadUtil;
|
|
18
|
+
import com.facebook.react.bridge.WritableMap;
|
|
19
|
+
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
|
20
|
+
|
|
21
|
+
import net.adwhale.sdk.mediation.ads.AdWhaleMediationAppOpenAd;
|
|
22
|
+
import net.adwhale.sdk.mediation.ads.AdWhaleMediationAppOpenAdListener;
|
|
23
|
+
|
|
24
|
+
public class RNAdWhaleMediationAppOpenAd extends ReactContextBaseJavaModule implements AdWhaleMediationAppOpenAdListener, LifecycleEventListener {
|
|
25
|
+
|
|
26
|
+
public static final String REACT_CLASS_NAME = RNAdWhaleMediationAppOpenAd.class.getSimpleName();
|
|
27
|
+
private AdWhaleMediationAppOpenAd adWhaleMediationAppOpenAd;
|
|
28
|
+
private final ReactApplicationContext reactContext;
|
|
29
|
+
|
|
30
|
+
private boolean isAppInBackground = false;
|
|
31
|
+
private DefaultLifecycleObserver appLifecycleObserver;
|
|
32
|
+
private boolean isObserverSetup = false;
|
|
33
|
+
|
|
34
|
+
private String placementName;
|
|
35
|
+
private String region;
|
|
36
|
+
private double lt;
|
|
37
|
+
private double lng;
|
|
38
|
+
|
|
39
|
+
public RNAdWhaleMediationAppOpenAd(ReactApplicationContext context) {
|
|
40
|
+
super(context);
|
|
41
|
+
reactContext = context;
|
|
42
|
+
reactContext.addLifecycleEventListener(this);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
private void setupLifecycleObserver() {
|
|
46
|
+
UiThreadUtil.runOnUiThread(() -> {
|
|
47
|
+
if (isObserverSetup) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
appLifecycleObserver = new DefaultLifecycleObserver() {
|
|
52
|
+
@Override
|
|
53
|
+
public void onStart(@NonNull LifecycleOwner owner) {
|
|
54
|
+
Log.d(REACT_CLASS_NAME, "App moved to foreground");
|
|
55
|
+
if (adWhaleMediationAppOpenAd != null && isAppInBackground) {
|
|
56
|
+
if (getCurrentActivity() != null) {
|
|
57
|
+
adWhaleMediationAppOpenAd.showAd(getCurrentActivity());
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
isAppInBackground = false;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
@Override
|
|
64
|
+
public void onStop(@NonNull LifecycleOwner owner) {
|
|
65
|
+
Log.d(REACT_CLASS_NAME, "App moved to background");
|
|
66
|
+
isAppInBackground = true;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
ProcessLifecycleOwner.get().getLifecycle().addObserver(appLifecycleObserver);
|
|
70
|
+
isObserverSetup = true;
|
|
71
|
+
Log.d(REACT_CLASS_NAME, "ProcessLifecycleOwner observer setup successfully.");
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
private void release() {
|
|
76
|
+
UiThreadUtil.runOnUiThread(() -> {
|
|
77
|
+
if (appLifecycleObserver != null) {
|
|
78
|
+
ProcessLifecycleOwner.get().getLifecycle().removeObserver(appLifecycleObserver);
|
|
79
|
+
appLifecycleObserver = null;
|
|
80
|
+
isObserverSetup = false;
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
if (adWhaleMediationAppOpenAd != null) {
|
|
84
|
+
adWhaleMediationAppOpenAd.destroy();
|
|
85
|
+
adWhaleMediationAppOpenAd = null;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
@NonNull
|
|
90
|
+
@Override
|
|
91
|
+
public String getName() {
|
|
92
|
+
return REACT_CLASS_NAME;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
@ReactMethod
|
|
96
|
+
public void setPlacementName(String placementName) {
|
|
97
|
+
Log.e(REACT_CLASS_NAME, "placementName: " + placementName);
|
|
98
|
+
this.placementName = placementName;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
@ReactMethod
|
|
102
|
+
public void setRegion(String region) {
|
|
103
|
+
Log.e(REACT_CLASS_NAME, "region: " + region);
|
|
104
|
+
this.region = region;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
@ReactMethod
|
|
108
|
+
public void setGcoder(ReadableMap gcoderMap) {
|
|
109
|
+
Log.e(REACT_CLASS_NAME, "gcoderMap: " + gcoderMap);
|
|
110
|
+
|
|
111
|
+
if (gcoderMap != null) {
|
|
112
|
+
double lt = gcoderMap.hasKey("lt") ? gcoderMap.getDouble("lt") : 0.0;
|
|
113
|
+
double lng = gcoderMap.hasKey("lng") ? gcoderMap.getDouble("lng") : 0.0;
|
|
114
|
+
|
|
115
|
+
this.lt = lt;
|
|
116
|
+
this.lng = lng;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
@ReactMethod
|
|
121
|
+
public void loadAd(String placementUid) {
|
|
122
|
+
Log.d(REACT_CLASS_NAME, "loadAd(" + placementUid + ")");
|
|
123
|
+
UiThreadUtil.runOnUiThread(() -> {
|
|
124
|
+
Log.d(REACT_CLASS_NAME, "runOnUiThread()");
|
|
125
|
+
if (getCurrentActivity() != null) {
|
|
126
|
+
if (adWhaleMediationAppOpenAd != null) {
|
|
127
|
+
adWhaleMediationAppOpenAd.destroy();
|
|
128
|
+
}
|
|
129
|
+
adWhaleMediationAppOpenAd = new AdWhaleMediationAppOpenAd(getCurrentActivity(), placementUid);
|
|
130
|
+
adWhaleMediationAppOpenAd.setAdWhaleMediationAppOpenAdListener(this);
|
|
131
|
+
adWhaleMediationAppOpenAd.setPlacementName(placementName);
|
|
132
|
+
adWhaleMediationAppOpenAd.setRegion(region);
|
|
133
|
+
adWhaleMediationAppOpenAd.setGcoder(lt, lng);
|
|
134
|
+
adWhaleMediationAppOpenAd.loadAd();
|
|
135
|
+
} else {
|
|
136
|
+
Log.e(REACT_CLASS_NAME, "Current Activity is null, cannot create AppOpenAd.");
|
|
137
|
+
WritableMap params = Arguments.createMap();
|
|
138
|
+
params.putInt("statusCode", -1);
|
|
139
|
+
params.putString("message", "Activity not available to load ad.");
|
|
140
|
+
sendEvent("onAppOpenAdFailedToLoad", params);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
@ReactMethod
|
|
146
|
+
public void showAd() {
|
|
147
|
+
Log.d(REACT_CLASS_NAME, "showAd()");
|
|
148
|
+
UiThreadUtil.runOnUiThread(() -> {
|
|
149
|
+
if (adWhaleMediationAppOpenAd != null) {
|
|
150
|
+
if (getCurrentActivity() != null) {
|
|
151
|
+
adWhaleMediationAppOpenAd.showAd(getCurrentActivity());
|
|
152
|
+
} else {
|
|
153
|
+
Log.e(REACT_CLASS_NAME, "Current Activity is null, cannot show AppOpenAd.");
|
|
154
|
+
}
|
|
155
|
+
} else {
|
|
156
|
+
Log.e(REACT_CLASS_NAME, "adWhaleMediationAppOpenAd is not loaded yet.");
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
private void sendEvent(String eventName, @Nullable WritableMap params) {
|
|
162
|
+
if (reactContext.hasActiveCatalystInstance()) {
|
|
163
|
+
reactContext
|
|
164
|
+
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
|
|
165
|
+
.emit(eventName, params);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
@Override
|
|
170
|
+
public void onAdLoaded() {
|
|
171
|
+
Log.i(REACT_CLASS_NAME, ".onAdLoaded()");
|
|
172
|
+
sendEvent("onAppOpenAdLoaded", null);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
@Override
|
|
176
|
+
public void onAdFailedToLoad(int statusCode, String message) {
|
|
177
|
+
Log.e(REACT_CLASS_NAME, ".onAdFailedToLoad(" + statusCode + ", " + message + ")");
|
|
178
|
+
WritableMap params = Arguments.createMap();
|
|
179
|
+
params.putInt("statusCode", statusCode);
|
|
180
|
+
params.putString("message", message);
|
|
181
|
+
sendEvent("onAppOpenAdFailedToLoad", params);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
@Override
|
|
185
|
+
public void onAdShowed() {
|
|
186
|
+
Log.i(REACT_CLASS_NAME, ".onAdShowed()");
|
|
187
|
+
sendEvent("onAppOpenAdShowed", null);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
@Override
|
|
191
|
+
public void onAdFailedToShow(int statusCode, String message) {
|
|
192
|
+
Log.e(REACT_CLASS_NAME, ".onAdFailedToShow(" + statusCode + ", " + message + ")");
|
|
193
|
+
WritableMap params = Arguments.createMap();
|
|
194
|
+
params.putInt("statusCode", statusCode);
|
|
195
|
+
params.putString("message", message);
|
|
196
|
+
sendEvent("onAppOpenAdFailedToShow", params);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
@Override
|
|
200
|
+
public void onAdDismissed() {
|
|
201
|
+
Log.i(REACT_CLASS_NAME, ".onAdDismissed()");
|
|
202
|
+
sendEvent("onAppOpenAdDismissed", null);
|
|
203
|
+
if (adWhaleMediationAppOpenAd != null) {
|
|
204
|
+
adWhaleMediationAppOpenAd.destroy();
|
|
205
|
+
adWhaleMediationAppOpenAd = null;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
@Override
|
|
210
|
+
public void onAdClicked() {
|
|
211
|
+
Log.i(REACT_CLASS_NAME, ".onAdClicked()");
|
|
212
|
+
sendEvent("onAppOpenAdClicked", null);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
@ReactMethod
|
|
216
|
+
public void addListener(String eventName) {
|
|
217
|
+
// Keep: Required for RN built in Event Emitter Calls.
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
@ReactMethod
|
|
221
|
+
public void removeListeners(Integer count) {
|
|
222
|
+
// Keep: Required for RN built in Event Emitter Calls.
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
@Override
|
|
226
|
+
public void onHostResume() {
|
|
227
|
+
setupLifecycleObserver();
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
@Override
|
|
231
|
+
public void onHostPause() {
|
|
232
|
+
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
@Override
|
|
236
|
+
public void onHostDestroy() {
|
|
237
|
+
release();
|
|
238
|
+
reactContext.removeLifecycleEventListener(this);
|
|
239
|
+
}
|
|
240
|
+
}
|
package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationCustomNativeAdView.java
CHANGED
|
@@ -11,6 +11,7 @@ import androidx.annotation.Nullable;
|
|
|
11
11
|
import com.facebook.react.bridge.Arguments;
|
|
12
12
|
import com.facebook.react.bridge.ReactContext;
|
|
13
13
|
import com.facebook.react.bridge.ReadableArray;
|
|
14
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
14
15
|
import com.facebook.react.bridge.WritableMap;
|
|
15
16
|
import com.facebook.react.common.MapBuilder;
|
|
16
17
|
import com.facebook.react.uimanager.SimpleViewManager;
|
|
@@ -18,6 +19,7 @@ import com.facebook.react.uimanager.ThemedReactContext;
|
|
|
18
19
|
import com.facebook.react.uimanager.annotations.ReactProp;
|
|
19
20
|
import com.facebook.react.uimanager.events.RCTEventEmitter;
|
|
20
21
|
|
|
22
|
+
import net.adwhale.sdk.mediation.ads.AdWhaleMediationAdView;
|
|
21
23
|
import net.adwhale.sdk.mediation.ads.AdWhaleMediationNativeAdView;
|
|
22
24
|
import net.adwhale.sdk.mediation.ads.AdWhaleMediationNativeAdViewListener;
|
|
23
25
|
import net.adwhale.sdk.mediation.ads.AdWhaleNativeAdBinder;
|
|
@@ -32,6 +34,7 @@ public class RNAdWhaleMediationCustomNativeAdView extends SimpleViewManager<RNWr
|
|
|
32
34
|
|
|
33
35
|
private String placementUid;
|
|
34
36
|
private String layoutName;
|
|
37
|
+
private String placementName;
|
|
35
38
|
|
|
36
39
|
@NonNull
|
|
37
40
|
@Override
|
|
@@ -55,6 +58,35 @@ public class RNAdWhaleMediationCustomNativeAdView extends SimpleViewManager<RNWr
|
|
|
55
58
|
this.layoutName = name;
|
|
56
59
|
}
|
|
57
60
|
|
|
61
|
+
|
|
62
|
+
@ReactProp(name = "placementName")
|
|
63
|
+
public void setPlacementName(RNWrapperView view, String placementName) {
|
|
64
|
+
Log.e(REACT_CLASS_NAME, "placementName: " + placementName);
|
|
65
|
+
this.placementName = placementName;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@ReactProp(name = "region")
|
|
69
|
+
public void setRegion(RNWrapperView view, String region) {
|
|
70
|
+
Log.e(REACT_CLASS_NAME, "region: " + region);
|
|
71
|
+
AdWhaleMediationNativeAdView adView = getAdWhaleMediationNativeAdView(view);
|
|
72
|
+
if (adView != null) {
|
|
73
|
+
adView.setRegion(region);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
@ReactProp(name = "gcoder")
|
|
78
|
+
public void setGcoder(RNWrapperView view, ReadableMap gcoderMap) {
|
|
79
|
+
Log.e(REACT_CLASS_NAME, "gcoderMap: " + gcoderMap);
|
|
80
|
+
AdWhaleMediationNativeAdView adView = getAdWhaleMediationNativeAdView(view);
|
|
81
|
+
|
|
82
|
+
if (adView != null && gcoderMap != null) {
|
|
83
|
+
double lt = gcoderMap.hasKey("lt") ? gcoderMap.getDouble("lt") : 0.0;
|
|
84
|
+
double lng = gcoderMap.hasKey("lng") ? gcoderMap.getDouble("lng") : 0.0;
|
|
85
|
+
|
|
86
|
+
adView.setGcoder(lt, lng);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
58
90
|
@Nullable
|
|
59
91
|
@Override
|
|
60
92
|
public Map<String, Integer> getCommandsMap() {
|
package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationInterstitialAd.java
CHANGED
|
@@ -6,14 +6,13 @@ import androidx.annotation.NonNull;
|
|
|
6
6
|
import androidx.annotation.Nullable;
|
|
7
7
|
|
|
8
8
|
import com.facebook.react.bridge.Arguments;
|
|
9
|
-
import com.facebook.react.bridge.Promise;
|
|
10
9
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
11
10
|
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
|
12
11
|
import com.facebook.react.bridge.ReactMethod;
|
|
12
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
13
13
|
import com.facebook.react.bridge.UiThreadUtil;
|
|
14
14
|
import com.facebook.react.bridge.WritableMap;
|
|
15
15
|
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
|
16
|
-
import com.facebook.react.uimanager.events.RCTEventEmitter;
|
|
17
16
|
|
|
18
17
|
import net.adwhale.sdk.mediation.ads.AdWhaleMediationInterstitialAd;
|
|
19
18
|
import net.adwhale.sdk.mediation.ads.AdWhaleMediationInterstitialAdListener;
|
|
@@ -30,6 +29,10 @@ public class RNAdWhaleMediationInterstitialAd extends ReactContextBaseJavaModule
|
|
|
30
29
|
public static final String REACT_CLASS_NAME = RNAdWhaleMediationInterstitialAd.class.getSimpleName();
|
|
31
30
|
private AdWhaleMediationInterstitialAd adWhaleMediationInterstitialAd;
|
|
32
31
|
private String placementUid;
|
|
32
|
+
private String placementName;
|
|
33
|
+
private String region;
|
|
34
|
+
private double lt;
|
|
35
|
+
private double lng;
|
|
33
36
|
|
|
34
37
|
public RNAdWhaleMediationInterstitialAd(ReactApplicationContext context) {
|
|
35
38
|
super(context);
|
|
@@ -41,12 +44,40 @@ public class RNAdWhaleMediationInterstitialAd extends ReactContextBaseJavaModule
|
|
|
41
44
|
return REACT_CLASS_NAME;
|
|
42
45
|
}
|
|
43
46
|
|
|
47
|
+
@ReactMethod
|
|
48
|
+
public void setPlacementName(String placementName) {
|
|
49
|
+
Log.e(REACT_CLASS_NAME, "placementName: " + placementName);
|
|
50
|
+
this.placementName = placementName;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
@ReactMethod
|
|
54
|
+
public void setRegion(String region) {
|
|
55
|
+
Log.e(REACT_CLASS_NAME, "region: " + region);
|
|
56
|
+
this.region = region;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@ReactMethod
|
|
60
|
+
public void setGcoder(ReadableMap gcoderMap) {
|
|
61
|
+
Log.e(REACT_CLASS_NAME, "gcoderMap: " + gcoderMap);
|
|
62
|
+
|
|
63
|
+
if (gcoderMap != null) {
|
|
64
|
+
double lt = gcoderMap.hasKey("lt") ? gcoderMap.getDouble("lt") : 0.0;
|
|
65
|
+
double lng = gcoderMap.hasKey("lng") ? gcoderMap.getDouble("lng") : 0.0;
|
|
66
|
+
|
|
67
|
+
this.lt = lt;
|
|
68
|
+
this.lng = lng;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
44
72
|
@ReactMethod
|
|
45
73
|
public void loadAd(String placementUid) {
|
|
46
74
|
Log.e(REACT_CLASS_NAME, ".loadAd()");
|
|
47
75
|
this.placementUid = placementUid;
|
|
48
76
|
adWhaleMediationInterstitialAd = new AdWhaleMediationInterstitialAd(placementUid);
|
|
49
77
|
adWhaleMediationInterstitialAd.setAdWhaleMediationInterstitialAdListener(this);
|
|
78
|
+
adWhaleMediationInterstitialAd.setPlacementName(placementName);
|
|
79
|
+
adWhaleMediationInterstitialAd.setRegion(region);
|
|
80
|
+
adWhaleMediationInterstitialAd.setGcoder(lt, lng);
|
|
50
81
|
|
|
51
82
|
UiThreadUtil.runOnUiThread(() -> {
|
|
52
83
|
adWhaleMediationInterstitialAd.loadAd();
|
|
@@ -7,6 +7,7 @@ import androidx.annotation.NonNull;
|
|
|
7
7
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
8
8
|
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
|
9
9
|
import com.facebook.react.bridge.ReactMethod;
|
|
10
|
+
import com.facebook.react.bridge.Promise;
|
|
10
11
|
import net.adwhale.sdk.utils.AdWhaleLog;
|
|
11
12
|
|
|
12
13
|
public class RNAdWhaleMediationLoggerModule extends ReactContextBaseJavaModule {
|
|
@@ -32,4 +33,17 @@ public class RNAdWhaleMediationLoggerModule extends ReactContextBaseJavaModule {
|
|
|
32
33
|
AdWhaleLog.setLogLevel(AdWhaleLog.LogLevel.None);
|
|
33
34
|
}
|
|
34
35
|
}
|
|
36
|
+
|
|
37
|
+
@ReactMethod
|
|
38
|
+
public void getLogLevel(Promise promise) {
|
|
39
|
+
try {
|
|
40
|
+
AdWhaleLog.LogLevel logLevel = AdWhaleLog.getLogLevel();
|
|
41
|
+
String logLevelString = logLevel.toString();
|
|
42
|
+
Log.d(REACT_CLASS_NAME, "현재 로그 레벨: " + logLevelString);
|
|
43
|
+
promise.resolve(logLevelString);
|
|
44
|
+
} catch (Exception e) {
|
|
45
|
+
Log.e(REACT_CLASS_NAME, "로그 레벨 조회 실패", e);
|
|
46
|
+
promise.reject("GET_LOG_LEVEL_ERROR", "Failed to get log level", e);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
35
49
|
}
|
|
@@ -9,6 +9,7 @@ import com.facebook.react.bridge.Arguments;
|
|
|
9
9
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
10
10
|
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
|
11
11
|
import com.facebook.react.bridge.ReactMethod;
|
|
12
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
12
13
|
import com.facebook.react.bridge.UiThreadUtil;
|
|
13
14
|
import com.facebook.react.bridge.WritableMap;
|
|
14
15
|
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
|
@@ -31,6 +32,10 @@ public class RNAdWhaleMediationRewardAd extends ReactContextBaseJavaModule imple
|
|
|
31
32
|
public static final String REACT_CLASS_NAME = RNAdWhaleMediationRewardAd.class.getSimpleName();
|
|
32
33
|
private AdWhaleMediationRewardAd adWhaleMediationRewardAd;
|
|
33
34
|
private String placementUid;
|
|
35
|
+
private String placementName;
|
|
36
|
+
private String region;
|
|
37
|
+
private double lt;
|
|
38
|
+
private double lng;
|
|
34
39
|
private final ReactApplicationContext reactContext;
|
|
35
40
|
|
|
36
41
|
public RNAdWhaleMediationRewardAd(ReactApplicationContext context) {
|
|
@@ -45,12 +50,40 @@ public class RNAdWhaleMediationRewardAd extends ReactContextBaseJavaModule imple
|
|
|
45
50
|
return REACT_CLASS_NAME;
|
|
46
51
|
}
|
|
47
52
|
|
|
53
|
+
@ReactMethod
|
|
54
|
+
public void setPlacementName(String placementName) {
|
|
55
|
+
Log.e(REACT_CLASS_NAME, "placementName: " + placementName);
|
|
56
|
+
this.placementName = placementName;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@ReactMethod
|
|
60
|
+
public void setRegion(String region) {
|
|
61
|
+
Log.e(REACT_CLASS_NAME, "region: " + region);
|
|
62
|
+
this.region = region;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
@ReactMethod
|
|
66
|
+
public void setGcoder(ReadableMap gcoderMap) {
|
|
67
|
+
Log.e(REACT_CLASS_NAME, "gcoderMap: " + gcoderMap);
|
|
68
|
+
|
|
69
|
+
if (gcoderMap != null) {
|
|
70
|
+
double lt = gcoderMap.hasKey("lt") ? gcoderMap.getDouble("lt") : 0.0;
|
|
71
|
+
double lng = gcoderMap.hasKey("lng") ? gcoderMap.getDouble("lng") : 0.0;
|
|
72
|
+
|
|
73
|
+
this.lt = lt;
|
|
74
|
+
this.lng = lng;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
48
78
|
@ReactMethod
|
|
49
79
|
public void loadAd(String placementUid) {
|
|
50
80
|
Log.e(REACT_CLASS_NAME, "loadAd()");
|
|
51
81
|
this.placementUid = placementUid;
|
|
52
82
|
adWhaleMediationRewardAd = new AdWhaleMediationRewardAd(placementUid);
|
|
53
83
|
adWhaleMediationRewardAd.setAdWhaleMediationFullScreenContentCallback(this);
|
|
84
|
+
adWhaleMediationRewardAd.setPlacementName(placementName);
|
|
85
|
+
adWhaleMediationRewardAd.setRegion(region);
|
|
86
|
+
adWhaleMediationRewardAd.setGcoder(lt, lng);
|
|
54
87
|
|
|
55
88
|
UiThreadUtil.runOnUiThread(() -> {
|
|
56
89
|
adWhaleMediationRewardAd.loadAd(this);
|