adwhale-sdk-react-native 2.7.300 → 2.7.400
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/AdwhaleSdkReactNative.podspec +1 -1
- package/README.md +92 -131
- package/android/build.gradle +35 -1
- package/android/proguard-rules.pro +2 -0
- package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationAppOpenAd.java +15 -3
- package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationInterstitialAd.java +20 -4
- package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationRewardAd.java +86 -0
- package/ios/RNAdWhaleMediationRewardAd.m +4 -0
- package/ios/RNAdWhaleMediationRewardAd.swift +37 -3
- package/lib/module/AdWhaleRewardAd.js +54 -2
- package/lib/module/AdWhaleRewardAd.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/AdWhaleRewardAd.d.ts +50 -9
- package/lib/typescript/src/AdWhaleRewardAd.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +1 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/AdWhaleRewardAd.ts +77 -13
- package/src/index.ts +2 -0
|
@@ -23,7 +23,7 @@ Pod::Spec.new do |s|
|
|
|
23
23
|
# ios/AdwhaleSdkReactNative.mm 에서 AdWhale iOS SDK(AdWhaleAds 등)를 사용
|
|
24
24
|
# 앱 Podfile 에는 AdWhaleSDK_iOS 소스가 있어야 함:
|
|
25
25
|
# source 'https://github.com/dev-adwhale/AdWhaleSDK_iOS.git'
|
|
26
|
-
s.dependency "AdWhaleSDK", "1.0.
|
|
26
|
+
s.dependency "AdWhaleSDK", "1.0.7"
|
|
27
27
|
# AdWhaleSDK-Swift.h 가 GAD* 프로토콜/클래스를 참조하므로 컴파일 단위에 GMA 헤더가 필요함 (AdWhaleSDK/Core 와 동일 버전)
|
|
28
28
|
s.dependency "Google-Mobile-Ads-SDK", "13.0.0"
|
|
29
29
|
|
package/README.md
CHANGED
|
@@ -1,185 +1,146 @@
|
|
|
1
|
-
# 최신 버전: 2.7.
|
|
1
|
+
# 최신 버전: 2.7.400
|
|
2
2
|
|
|
3
3
|
# adwhale-sdk-react-native
|
|
4
4
|
ADwhale Android/iOS 네이티브 광고 미디에이션 SDK를
|
|
5
5
|
React Native 환경에서 사용할 수 있도록 제공하는 공식 SDK입니다.
|
|
6
6
|
|
|
7
|
-
- Android 네이티브 SDK 기반
|
|
8
|
-
- React Native Bridge / TurboModule 지원
|
|
9
|
-
- SDK 초기화, 배너, 전면, 보상형, 네이티브 광고(템플릿, 커스텀), 앱오프닝 광고, 앱 종료 팝업 광고, Android 전용 전환 팝업 광고 지원
|
|
10
|
-
- 광고 이벤트 콜백 리스너 제공
|
|
11
7
|
- Expo Bare Workflow / Custom Dev Client 지원
|
|
12
8
|
|
|
13
9
|
> ⚠️ Expo Go (Managed Workflow)에서는 네이티브 모듈 특성상 사용할 수 없습니다.
|
|
14
10
|
|
|
15
|
-
자세한 가이드는
|
|
11
|
+
자세한 연동 가이드는 아래 문서를 참고하세요.
|
|
12
|
+
- Guide: https://adwhale.gitbook.io/adwhale-mediation-sdk/react-native/sdk
|
|
13
|
+
- Sample: https://github.com/dev-adwhale/ADwhaleMediationSDK-ReactNative
|
|
14
|
+
- Package: https://www.npmjs.com/package/adwhale-sdk-react-native
|
|
15
|
+
|
|
16
16
|
---
|
|
17
17
|
|
|
18
18
|
## Installation
|
|
19
19
|
```sh
|
|
20
|
+
# yarn 사용 시
|
|
20
21
|
yarn add adwhale-sdk-react-native
|
|
21
22
|
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
# npm 사용 시
|
|
24
24
|
npm install adwhale-sdk-react-native
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
27
|
+
## Support platforms
|
|
28
|
+
| Platform | Support |
|
|
29
|
+
|----------|---------|
|
|
30
|
+
| Android | O |
|
|
31
|
+
| iOS | O |
|
|
32
|
+
|
|
33
|
+
## Support Features
|
|
34
|
+
| Features | Support |
|
|
35
|
+
|------------------|-------------------|
|
|
36
|
+
| SDK initialize | O |
|
|
37
|
+
| Banner | O |
|
|
38
|
+
| Interstitial | O |
|
|
39
|
+
| Rewarded | O |
|
|
40
|
+
| Native Template | ⚠️(Android only) |
|
|
41
|
+
| Native Custom | O |
|
|
42
|
+
| App Open | O |
|
|
43
|
+
| App Exit Popup | ⚠️(Android only) |
|
|
44
|
+
| Transition Popup | ⚠️(Android only) |
|
|
45
|
+
| Event Callback | O |
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
## Version
|
|
49
|
+
현재 버전은 ```2.7.400``` 입니다.
|
|
50
|
+
|
|
51
|
+
| Native SDK | React Native SDK |
|
|
52
|
+
|---------------|------------------|
|
|
53
|
+
| Android 2.7.4 | 2.7.400 |
|
|
54
|
+
| iOS 1.0.7 | 2.7.400 |
|
|
55
|
+
|
|
56
|
+
## Dependency
|
|
57
|
+
권장 설정:
|
|
49
58
|
```json
|
|
50
59
|
{
|
|
51
|
-
"adwhale-sdk-react-native": "~2.7.
|
|
60
|
+
"adwhale-sdk-react-native": "~2.7.400"
|
|
52
61
|
}
|
|
53
62
|
```
|
|
54
|
-
|
|
55
|
-
- RN 핫픽스만 자동 반영
|
|
56
|
-
- >=2.7.3+0 <2.8.0 범위
|
|
57
|
-
|
|
58
|
-
### 특정 버전을 완전히 고정하여 사용하는 경우
|
|
63
|
+
고정 설정:
|
|
59
64
|
```json
|
|
60
65
|
{
|
|
61
|
-
"adwhale-sdk-react-native": "2.7.
|
|
66
|
+
"adwhale-sdk-react-native": "2.7.400"
|
|
62
67
|
}
|
|
63
68
|
```
|
|
64
|
-
- 버전 변경 없음
|
|
65
|
-
- 재현성, 장애 분석에 최적
|
|
66
|
-
- QA / 장애 재현 환경
|
|
67
|
-
- 장기 유지 브랜치
|
|
68
69
|
|
|
69
|
-
## Example
|
|
70
|
+
## Example
|
|
70
71
|
SDK 동작을 바로 확인할 수 있는 example 프로젝트를 제공합니다.
|
|
71
72
|
- [React Native 샘플](https://github.com/dev-adwhale/ADwhaleMediationSDK-ReactNative/tree/main/ReactNativeSample)
|
|
72
73
|
- [Expo 샘플](https://github.com/dev-adwhale/ADwhaleMediationSDK-ReactNative/tree/main/ExpoSample)
|
|
73
|
-
yarn 사용시
|
|
74
74
|
```sh
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
cd example
|
|
78
|
-
yarn android
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
npm 사용시
|
|
82
|
-
```sh
|
|
83
|
-
npm install
|
|
84
|
-
cd example
|
|
85
|
-
npm run android
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
## Expo Support
|
|
89
|
-
다음 환경에서 사용 가능합니다.
|
|
90
|
-
- Expo Bare Workflow
|
|
91
|
-
- Expo Custom Dev Client
|
|
92
|
-
Expo Go 환경에서는 사용할 수 없습니다.
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
## Supported Features
|
|
96
|
-
- SDK 초기화
|
|
97
|
-
- 배너 광고
|
|
98
|
-
- 전면 광고
|
|
99
|
-
- 보상형 광고
|
|
100
|
-
- 네이티브 템플릿 광고
|
|
101
|
-
- 네이티브 커스텀 광고
|
|
102
|
-
- 앱 오프닝 광고
|
|
103
|
-
- 앱 종료 팝업 광고
|
|
104
|
-
- Android 전용 전환 팝업 광고
|
|
105
|
-
- 광고 이벤트 콜백 리스너 제공
|
|
106
|
-
|
|
107
|
-
---
|
|
75
|
+
# 1. 프로젝트 클론
|
|
76
|
+
git clone https://github.com/dev-adwhale/ADwhaleMediationSDK-ReactNative.git
|
|
108
77
|
|
|
109
|
-
|
|
78
|
+
# 2. ReactNativeSample 사용 시
|
|
79
|
+
cd ADwhaleMediationSDK-ReactNative/ReactNativeSample
|
|
110
80
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
cd example/android
|
|
114
|
-
./gradlew clean
|
|
115
|
-
```
|
|
81
|
+
# 2. ExpoSample 사용 시
|
|
82
|
+
cd ADwhaleMediationSDK-ReactNative/ExpoSample
|
|
116
83
|
|
|
117
|
-
|
|
118
|
-
|
|
84
|
+
# 3. React Native 의존성 설치: yarn 사용 시
|
|
85
|
+
yarn install
|
|
119
86
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
- 빌드 로그에서 **PhaseScriptExecution** 또는 **Run Script** 근처의 **빨간 에러 메시지** 확인
|
|
123
|
-
- 실패한 스크립트 이름(예: "Bundle React Native code and images", "Embed Pods Frameworks")과 그 아래 출력 내용 확인
|
|
87
|
+
# 3. React Native 의존성 설치: npm 사용 시
|
|
88
|
+
npm install
|
|
124
89
|
|
|
125
|
-
|
|
126
|
-
```sh
|
|
127
|
-
# example 기준 (저장소 루트에서)
|
|
128
|
-
cd example
|
|
129
|
-
yarn install # 또는 npm install
|
|
90
|
+
# 4. iOS 의존성 설치 (iOS 빌드 시에만 필요)
|
|
130
91
|
cd ios
|
|
131
|
-
rm -rf build Pods Podfile.lock
|
|
132
92
|
pod install
|
|
133
93
|
cd ..
|
|
134
|
-
yarn ios # 또는 npx react-native run-ios
|
|
135
|
-
# CLI로만 빌드해 볼 때:
|
|
136
|
-
# yarn build:ios # example/package.json의 react-native build-ios
|
|
137
94
|
```
|
|
138
|
-
- **Podfile.lock 불일치**라면: `example/ios`에서 `pod install`을 다시 실행합니다.
|
|
139
|
-
- **"Bundle React Native code and images"** 등 Node를 쓰는 스크립트 실패: Xcode가 터미널과 다른 `PATH`로 `node`를 못 찾는 경우가 많습니다. 터미널에서 `which node`로 경로를 확인한 뒤, `example/ios/.xcode.env` 또는 `example/ios/.xcode.env.local`에 `export NODE_BINARY=...`로 지정하거나, Xcode **Build Phases**의 해당 Run Script 상단에 동일하게 넣어 보세요.
|
|
140
|
-
- **Hermes / 번들 관련 스크립트** 실패: 위 정리 후 터미널에서 `yarn build:ios`(또는 `npx react-native build-ios`)로 한 번 빌드해 로그를 확인합니다.
|
|
141
|
-
- **실기기/서명** 관련이라면: Development team·신뢰 설정을 확인합니다.
|
|
142
95
|
|
|
143
|
-
###
|
|
144
|
-
|
|
145
|
-
-
|
|
96
|
+
### Expo Support
|
|
97
|
+
다음 환경에서 사용 가능합니다.
|
|
98
|
+
- Expo Bare Workflow
|
|
99
|
+
- Expo Custom Dev Client
|
|
100
|
+
Expo Go 환경에서는 사용할 수 없습니다.
|
|
146
101
|
|
|
147
|
-
|
|
148
|
-
|
|
102
|
+
### Android 실행
|
|
103
|
+
```sh
|
|
104
|
+
# yarn 사용 시
|
|
105
|
+
yarn start
|
|
106
|
+
yarn android
|
|
149
107
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
108
|
+
# npm 사용 시
|
|
109
|
+
npm start
|
|
110
|
+
npm run android
|
|
111
|
+
```
|
|
153
112
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
113
|
+
### iOS 실행
|
|
114
|
+
```sh
|
|
115
|
+
# yarn 사용 시
|
|
116
|
+
yarn start
|
|
117
|
+
yarn ios
|
|
159
118
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
119
|
+
# npm 사용 시
|
|
120
|
+
npm start
|
|
121
|
+
npm run ios
|
|
122
|
+
```
|
|
163
123
|
|
|
164
|
-
### 환경
|
|
124
|
+
### 환경 점검
|
|
165
125
|
```sh
|
|
166
126
|
npx react-native doctor
|
|
167
127
|
```
|
|
168
128
|
|
|
169
129
|
## Changelog
|
|
170
|
-
| 배포버전 | 내용
|
|
171
|
-
|
|
172
|
-
| 2.7.
|
|
173
|
-
| 2.7.
|
|
174
|
-
| 2.7.
|
|
175
|
-
| 2.7.
|
|
176
|
-
| 2.7.
|
|
177
|
-
| 2.7.
|
|
178
|
-
| 2.7.
|
|
179
|
-
| 2.7.
|
|
180
|
-
| 2.7.
|
|
181
|
-
|
|
|
182
|
-
| |
|
|
130
|
+
| 배포버전 | 내용 | 배포날짜 |
|
|
131
|
+
|---------|------------------------------------------------------------------|------------|
|
|
132
|
+
| 2.7.400 | 보상형 SSV 추가, 애드웨일 Android 2.7.4 업데이트 및 ios 1.0.7 추가 | 2026.04.11 |
|
|
133
|
+
| 2.7.300 | 애드웨일 Android 2.7.3 업데이트 및 ios 1.0.4 추가 | 2026.04.11 |
|
|
134
|
+
| 2.7.204 | 버그 및 샘플 수정 | 2026.01.22 |
|
|
135
|
+
| 2.7.203 | 버그 및 샘플 수정 | 2026.01.19 |
|
|
136
|
+
| 2.7.202 | 버그 및 샘플 수정 | 2026.01.19 |
|
|
137
|
+
| 2.7.201 | 버그 및 샘플 수정 | 2026.01.12 |
|
|
138
|
+
| 2.7.200 | 앱오프닝 광고 추가 (ADwhale Android SDK v2.7.2에서 추가됨) | 2026.01.09 |
|
|
139
|
+
| 2.7.102 | gcoder 및 placement name 추가 | 2025.12.29 |
|
|
140
|
+
| 2.7.101 | 버그 및 샘플 수정 | 2025.12.23 |
|
|
141
|
+
| 2.7.100 | 네이티브 광고 추가 (ADwhale Android SDK v2.7.0) | 2025.12.15 |
|
|
142
|
+
| | GDPR 기능 추가 (ADwhale Android SDK v2.7.0) | |
|
|
143
|
+
| | 적응형 배너 추가 (ADwhale Android SDK v2.7.1) | |
|
|
183
144
|
|
|
184
145
|
## Learn More
|
|
185
146
|
- [ADwhale ReactNative 가이드](https://adwhale.gitbook.io/adwhale-mediation-sdk/react-native/sdk)
|
package/android/build.gradle
CHANGED
|
@@ -18,6 +18,36 @@ ext.sdkVersionPatch = (properties["sdkVersionPatch"] ?: "0")
|
|
|
18
18
|
ext.sdkVersionCode = Integer.valueOf((Integer.parseInt(sdkVersionMajor)*10000) + (Integer.parseInt(sdkVersionMinor)*100) + Integer.parseInt(sdkVersionPatch))
|
|
19
19
|
ext.sdkVersion = "${sdkVersionMajor}.${sdkVersionMinor}.${sdkVersionPatch}"
|
|
20
20
|
|
|
21
|
+
ext.adfitAdapterSdkVersionMajor = properties["adfitVersionMajor"]
|
|
22
|
+
ext.adfitAdapterSdkVersionMinor = properties["adfitVersionMinor"]
|
|
23
|
+
ext.adfitAdapterSdkVersionPatch = properties["adfitVersionPatch"]
|
|
24
|
+
ext.adfitAdapterSdkVersionTrivial = properties["adfitVersionTrivial"]
|
|
25
|
+
ext.adfitAdapterSdkVersion = "${adfitAdapterSdkVersionMajor}.${adfitAdapterSdkVersionMinor}.${adfitAdapterSdkVersionPatch}.${adfitAdapterSdkVersionTrivial}"
|
|
26
|
+
|
|
27
|
+
ext.admizeAdapterSdkVersionMajor = properties["admizeVersionMajor"]
|
|
28
|
+
ext.admizeAdapterSdkVersionMinor = properties["admizeVersionMinor"]
|
|
29
|
+
ext.admizeAdapterSdkVersionPatch = properties["admizeVersionPatch"]
|
|
30
|
+
ext.admizeAdapterSdkVersionTrivial = properties["admizeVersionTrivial"]
|
|
31
|
+
ext.admizeAdapterSdkVersion = "${admizeAdapterSdkVersionMajor}.${admizeAdapterSdkVersionMinor}.${admizeAdapterSdkVersionPatch}.${admizeAdapterSdkVersionTrivial}"
|
|
32
|
+
|
|
33
|
+
ext.admobAdapterSdkVersionMajor = properties["admobVersionMajor"]
|
|
34
|
+
ext.admobAdapterSdkVersionMinor = properties["admobVersionMinor"]
|
|
35
|
+
ext.admobAdapterSdkVersionPatch = properties["admobVersionPatch"]
|
|
36
|
+
ext.admobAdapterSdkVersionTrivial = properties["admobVersionTrivial"]
|
|
37
|
+
ext.admobAdapterSdkVersion = "${admobAdapterSdkVersionMajor}.${admobAdapterSdkVersionMinor}.${admobAdapterSdkVersionPatch}.${admobAdapterSdkVersionTrivial}"
|
|
38
|
+
|
|
39
|
+
ext.caulyAdapterSdkVersionMajor = properties["caulyVersionMajor"]
|
|
40
|
+
ext.caulyAdapterSdkVersionMinor = properties["caulyVersionMinor"]
|
|
41
|
+
ext.caulyAdapterSdkVersionPatch = properties["caulyVersionPatch"]
|
|
42
|
+
ext.caulyAdapterSdkVersionTrivial = properties["caulyVersionTrivial"]
|
|
43
|
+
ext.caulyAdapterSdkVersion = "${caulyAdapterSdkVersionMajor}.${caulyAdapterSdkVersionMinor}.${caulyAdapterSdkVersionPatch}.${caulyAdapterSdkVersionTrivial}"
|
|
44
|
+
|
|
45
|
+
ext.levelplayAdapterSdkVersionMajor = properties["levelplayVersionMajor"]
|
|
46
|
+
ext.levelplayAdapterSdkVersionMinor = properties["levelplayVersionMinor"]
|
|
47
|
+
ext.levelplayAdapterSdkVersionPatch = properties["levelplayVersionPatch"]
|
|
48
|
+
ext.levelplayAdapterSdkVersionTrivial = properties["levelplayVersionTrivial"]
|
|
49
|
+
ext.levelplayAdapterSdkVersion = "${levelplayAdapterSdkVersionMajor}.${levelplayAdapterSdkVersionMinor}.${levelplayAdapterSdkVersionPatch}.${levelplayAdapterSdkVersionTrivial}"
|
|
50
|
+
|
|
21
51
|
def resolveNodeBinary() {
|
|
22
52
|
def candidateSources = [
|
|
23
53
|
System.getenv("NODE_BINARY"),
|
|
@@ -133,6 +163,10 @@ dependencies {
|
|
|
133
163
|
implementation 'androidx.lifecycle:lifecycle-runtime:2.6.2'
|
|
134
164
|
|
|
135
165
|
// 기본 디펜던시: ADwhale Mediation SDK Repository
|
|
136
|
-
|
|
166
|
+
// ⚠️ local.properties 의 sdkVersion(2.7.4) 과 반드시 일치시킬 것.
|
|
167
|
+
// (RN 래퍼 2.7.400 은 네이티브 Android SDK 2.7.4 API 에 의존)
|
|
168
|
+
// 미디에이션 어댑터(cauly/admize/adfit/admob/levelplay + AdMob 네트워크 어댑터)는
|
|
169
|
+
// SDK 패키지가 아니라, 연동 가이드에 따라 "앱" build.gradle 에서 직접 추가한다.
|
|
170
|
+
implementation "net.adwhale.sdk.mediation:adwhale-mediation-sdk:2.7.4"
|
|
137
171
|
|
|
138
172
|
}
|
|
@@ -97,6 +97,8 @@
|
|
|
97
97
|
public *** setRegion(***);
|
|
98
98
|
public *** setGcoder(***, ***);
|
|
99
99
|
public *** setPlacementName(***);
|
|
100
|
+
public *** setUserId(***);
|
|
101
|
+
public *** setCustomData(***);
|
|
100
102
|
public *** destroy();
|
|
101
103
|
public *** setAdWhaleMediationFullScreenContentCallback(***);
|
|
102
104
|
}
|
|
@@ -176,7 +176,11 @@ public class RNAdWhaleMediationAppOpenAd extends ReactContextBaseJavaModule impl
|
|
|
176
176
|
params.putInt("statusCode", -1);
|
|
177
177
|
params.putString("message", "Activity not available to load ad.");
|
|
178
178
|
sendEvent("onAppOpenAdFailedToLoad", params);
|
|
179
|
-
|
|
179
|
+
// NOTE: emit() 이후에는 Map 이 consume 되므로 재사용 금지. 새 맵으로 따로 보낸다.
|
|
180
|
+
WritableMap forAdEvent = Arguments.createMap();
|
|
181
|
+
forAdEvent.putInt("statusCode", -1);
|
|
182
|
+
forAdEvent.putString("message", "Activity not available to load ad.");
|
|
183
|
+
sendAdEvent(adId, "onAppOpenAdLoadFailed", forAdEvent);
|
|
180
184
|
return;
|
|
181
185
|
}
|
|
182
186
|
|
|
@@ -307,7 +311,11 @@ public class RNAdWhaleMediationAppOpenAd extends ReactContextBaseJavaModule impl
|
|
|
307
311
|
params.putInt("statusCode", statusCode);
|
|
308
312
|
params.putString("message", message);
|
|
309
313
|
sendEvent("onAppOpenAdFailedToLoad", params);
|
|
310
|
-
|
|
314
|
+
// NOTE: emit() 이후에는 Map 이 consume 되므로 재사용 금지. 새 맵으로 따로 보낸다.
|
|
315
|
+
WritableMap forAdEvent = Arguments.createMap();
|
|
316
|
+
forAdEvent.putInt("statusCode", statusCode);
|
|
317
|
+
forAdEvent.putString("message", message);
|
|
318
|
+
sendAdEvent(lastActiveAdId, "onAppOpenAdLoadFailed", forAdEvent);
|
|
311
319
|
}
|
|
312
320
|
|
|
313
321
|
@Override
|
|
@@ -324,7 +332,11 @@ public class RNAdWhaleMediationAppOpenAd extends ReactContextBaseJavaModule impl
|
|
|
324
332
|
params.putInt("statusCode", statusCode);
|
|
325
333
|
params.putString("message", message);
|
|
326
334
|
sendEvent("onAppOpenAdFailedToShow", params);
|
|
327
|
-
|
|
335
|
+
// NOTE: emit() 이후에는 Map 이 consume 되므로 재사용 금지. 새 맵으로 따로 보낸다.
|
|
336
|
+
WritableMap forAdEvent = Arguments.createMap();
|
|
337
|
+
forAdEvent.putInt("statusCode", statusCode);
|
|
338
|
+
forAdEvent.putString("message", message);
|
|
339
|
+
sendAdEvent(lastActiveAdId, "onAppOpenAdShowFailed", forAdEvent);
|
|
328
340
|
}
|
|
329
341
|
|
|
330
342
|
@Override
|
package/android/src/main/java/com/adwhalesdkreactnative/RNAdWhaleMediationInterstitialAd.java
CHANGED
|
@@ -212,7 +212,11 @@ public class RNAdWhaleMediationInterstitialAd extends ReactContextBaseJavaModule
|
|
|
212
212
|
params.putInt("statusCode", statusCode);
|
|
213
213
|
params.putString("message", message);
|
|
214
214
|
sendEvent("onInterstitialAdLoadFailed", params);
|
|
215
|
-
|
|
215
|
+
// NOTE: emit() 이후에는 Map 이 consume 되므로 재사용 금지. 새 맵으로 따로 보낸다.
|
|
216
|
+
WritableMap forAdEvent = Arguments.createMap();
|
|
217
|
+
forAdEvent.putInt("statusCode", statusCode);
|
|
218
|
+
forAdEvent.putString("message", message);
|
|
219
|
+
sendAdEvent(lastActiveAdId, "onInterstitialAdLoadFailed", forAdEvent);
|
|
216
220
|
}
|
|
217
221
|
|
|
218
222
|
@Override
|
|
@@ -229,7 +233,11 @@ public class RNAdWhaleMediationInterstitialAd extends ReactContextBaseJavaModule
|
|
|
229
233
|
params.putInt("statusCode", statusCode);
|
|
230
234
|
params.putString("message", message);
|
|
231
235
|
sendEvent("onInterstitialAdShowFailed", params);
|
|
232
|
-
|
|
236
|
+
// NOTE: emit() 이후에는 Map 이 consume 되므로 재사용 금지. 새 맵으로 따로 보낸다.
|
|
237
|
+
WritableMap forAdEvent = Arguments.createMap();
|
|
238
|
+
forAdEvent.putInt("statusCode", statusCode);
|
|
239
|
+
forAdEvent.putString("message", message);
|
|
240
|
+
sendAdEvent(lastActiveAdId, "onInterstitialAdShowFailed", forAdEvent);
|
|
233
241
|
}
|
|
234
242
|
|
|
235
243
|
@Override
|
|
@@ -314,7 +322,11 @@ public class RNAdWhaleMediationInterstitialAd extends ReactContextBaseJavaModule
|
|
|
314
322
|
params.putInt("statusCode", statusCode);
|
|
315
323
|
params.putString("message", message);
|
|
316
324
|
sendEvent("onInterstitialAdLoadFailed", params);
|
|
317
|
-
|
|
325
|
+
// NOTE: emit() 이후에는 Map 이 consume 되므로 재사용 금지. 새 맵으로 따로 보낸다.
|
|
326
|
+
WritableMap forAdEvent = Arguments.createMap();
|
|
327
|
+
forAdEvent.putInt("statusCode", statusCode);
|
|
328
|
+
forAdEvent.putString("message", message);
|
|
329
|
+
sendAdEvent(boundAdId, "onInterstitialAdLoadFailed", forAdEvent);
|
|
318
330
|
}
|
|
319
331
|
|
|
320
332
|
@Override
|
|
@@ -331,7 +343,11 @@ public class RNAdWhaleMediationInterstitialAd extends ReactContextBaseJavaModule
|
|
|
331
343
|
params.putInt("statusCode", statusCode);
|
|
332
344
|
params.putString("message", message);
|
|
333
345
|
sendEvent("onInterstitialAdShowFailed", params);
|
|
334
|
-
|
|
346
|
+
// NOTE: emit() 이후에는 Map 이 consume 되므로 재사용 금지. 새 맵으로 따로 보낸다.
|
|
347
|
+
WritableMap forAdEvent = Arguments.createMap();
|
|
348
|
+
forAdEvent.putInt("statusCode", statusCode);
|
|
349
|
+
forAdEvent.putString("message", message);
|
|
350
|
+
sendAdEvent(boundAdId, "onInterstitialAdShowFailed", forAdEvent);
|
|
335
351
|
}
|
|
336
352
|
|
|
337
353
|
@Override
|
|
@@ -46,6 +46,9 @@ public class RNAdWhaleMediationRewardAd extends ReactContextBaseJavaModule imple
|
|
|
46
46
|
private String region;
|
|
47
47
|
private double lt;
|
|
48
48
|
private double lng;
|
|
49
|
+
// 보상형 SSV(서버 사이드 검증) 전용 옵션
|
|
50
|
+
private String userId;
|
|
51
|
+
private Map<String, String> customData;
|
|
49
52
|
private final ReactApplicationContext reactContext;
|
|
50
53
|
|
|
51
54
|
public RNAdWhaleMediationRewardAd(ReactApplicationContext context) {
|
|
@@ -85,6 +88,76 @@ public class RNAdWhaleMediationRewardAd extends ReactContextBaseJavaModule imple
|
|
|
85
88
|
}
|
|
86
89
|
}
|
|
87
90
|
|
|
91
|
+
/**
|
|
92
|
+
* 보상형 SSV(서버 사이드 검증)용 앱 사용자 id 설정.
|
|
93
|
+
* AdMob / AdManager SSV postback 의 user_id 로 전달됩니다. (그 외 네트워크에서는 무시)
|
|
94
|
+
*/
|
|
95
|
+
@ReactMethod
|
|
96
|
+
public void setUserId(String userId) {
|
|
97
|
+
Log.e(REACT_CLASS_NAME, "userId: " + userId);
|
|
98
|
+
this.userId = userId;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* 보상형 SSV(서버 사이드 검증)용 커스텀 데이터 설정.
|
|
103
|
+
* AdMob / AdManager SSV postback 의 custom_data 로 전달되며, SDK 내부에서 JSON 직렬화됩니다.
|
|
104
|
+
* (그 외 네트워크에서는 무시)
|
|
105
|
+
*/
|
|
106
|
+
@ReactMethod
|
|
107
|
+
public void setCustomData(ReadableMap customDataMap) {
|
|
108
|
+
Log.e(REACT_CLASS_NAME, "customData: " + customDataMap);
|
|
109
|
+
this.customData = toStringMap(customDataMap);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** ReadableMap 을 SDK 가 요구하는 Map<String, String> 으로 변환 (값은 문자열로 강제) */
|
|
113
|
+
@Nullable
|
|
114
|
+
private static Map<String, String> toStringMap(@Nullable ReadableMap map) {
|
|
115
|
+
if (map == null) {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
Map<String, String> result = new HashMap<>();
|
|
119
|
+
com.facebook.react.bridge.ReadableMapKeySetIterator it = map.keySetIterator();
|
|
120
|
+
while (it.hasNextKey()) {
|
|
121
|
+
String key = it.nextKey();
|
|
122
|
+
switch (map.getType(key)) {
|
|
123
|
+
case String:
|
|
124
|
+
result.put(key, map.getString(key));
|
|
125
|
+
break;
|
|
126
|
+
case Number:
|
|
127
|
+
result.put(key, String.valueOf(map.getDouble(key)));
|
|
128
|
+
break;
|
|
129
|
+
case Boolean:
|
|
130
|
+
result.put(key, String.valueOf(map.getBoolean(key)));
|
|
131
|
+
break;
|
|
132
|
+
default:
|
|
133
|
+
// null / Map / Array 등은 무시
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return result;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/** 보상형 SSV 옵션(userId / customData)을 SDK 인스턴스에 적용 */
|
|
141
|
+
private static void applySsvOptions(
|
|
142
|
+
@NonNull AdWhaleMediationRewardAd ad,
|
|
143
|
+
@Nullable String userId,
|
|
144
|
+
@Nullable Map<String, String> customData) {
|
|
145
|
+
try {
|
|
146
|
+
if (userId != null && !userId.isEmpty()) {
|
|
147
|
+
ad.setUserId(userId);
|
|
148
|
+
}
|
|
149
|
+
} catch (Throwable t) {
|
|
150
|
+
Log.w(REACT_CLASS_NAME, "setUserId failed: " + t.getMessage());
|
|
151
|
+
}
|
|
152
|
+
try {
|
|
153
|
+
if (customData != null && !customData.isEmpty()) {
|
|
154
|
+
ad.setCustomData(customData);
|
|
155
|
+
}
|
|
156
|
+
} catch (Throwable t) {
|
|
157
|
+
Log.w(REACT_CLASS_NAME, "setCustomData failed: " + t.getMessage());
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
88
161
|
@ReactMethod
|
|
89
162
|
public void loadAd(String placementUid) {
|
|
90
163
|
Log.e(REACT_CLASS_NAME, "loadAd()");
|
|
@@ -95,6 +168,8 @@ public class RNAdWhaleMediationRewardAd extends ReactContextBaseJavaModule imple
|
|
|
95
168
|
adWhaleMediationRewardAd.setPlacementName(placementName);
|
|
96
169
|
adWhaleMediationRewardAd.setRegion(region);
|
|
97
170
|
adWhaleMediationRewardAd.setGcoder(lt, lng);
|
|
171
|
+
// 보상형 SSV(서버 사이드 검증) 옵션 적용
|
|
172
|
+
applySsvOptions(adWhaleMediationRewardAd, userId, customData);
|
|
98
173
|
|
|
99
174
|
UiThreadUtil.runOnUiThread(() -> {
|
|
100
175
|
adWhaleMediationRewardAd.loadAd(this);
|
|
@@ -160,6 +235,17 @@ public class RNAdWhaleMediationRewardAd extends ReactContextBaseJavaModule imple
|
|
|
160
235
|
Log.w(REACT_CLASS_NAME, "setGcoder failed: " + t.getMessage());
|
|
161
236
|
}
|
|
162
237
|
|
|
238
|
+
// 보상형 SSV(서버 사이드 검증) 옵션: userId / customData
|
|
239
|
+
String ssvUserId = null;
|
|
240
|
+
if (args.hasKey("userId") && args.getType("userId") == ReadableType.String) {
|
|
241
|
+
ssvUserId = args.getString("userId");
|
|
242
|
+
}
|
|
243
|
+
Map<String, String> ssvCustomData = null;
|
|
244
|
+
if (args.hasKey("customData") && args.getType("customData") == ReadableType.Map) {
|
|
245
|
+
ssvCustomData = toStringMap(args.getMap("customData"));
|
|
246
|
+
}
|
|
247
|
+
applySsvOptions(rewardAd, ssvUserId, ssvCustomData);
|
|
248
|
+
|
|
163
249
|
adsById.put(adId, rewardAd);
|
|
164
250
|
|
|
165
251
|
UiThreadUtil.runOnUiThread(() -> rewardAd.loadAd(perAdListener));
|
|
@@ -6,6 +6,10 @@ RCT_EXTERN_METHOD(setPlacementName:(NSString *)placementName)
|
|
|
6
6
|
RCT_EXTERN_METHOD(setRegion:(NSString *)region)
|
|
7
7
|
RCT_EXTERN_METHOD(setGcoder:(NSDictionary *)gcoder)
|
|
8
8
|
|
|
9
|
+
// 보상형 SSV(서버 사이드 검증) API
|
|
10
|
+
RCT_EXTERN_METHOD(setUserId:(NSString *)userId)
|
|
11
|
+
RCT_EXTERN_METHOD(setCustomData:(NSDictionary *)customData)
|
|
12
|
+
|
|
9
13
|
// Legacy API
|
|
10
14
|
RCT_EXTERN_METHOD(loadAd:(NSString *)placementUid)
|
|
11
15
|
RCT_EXTERN_METHOD(showAd)
|
|
@@ -62,6 +62,9 @@ final class RNAdWhaleMediationRewardAd: RCTEventEmitter {
|
|
|
62
62
|
private var legacyPlacementName: String?
|
|
63
63
|
private var legacyRegion: String?
|
|
64
64
|
private var legacyGcoder: (Double, Double)?
|
|
65
|
+
// 보상형 SSV(서버 사이드 검증) 전용 옵션
|
|
66
|
+
private var legacyUserId: String?
|
|
67
|
+
private var legacyCustomData: [String: String]?
|
|
65
68
|
private var legacyLastAdId: Int = 0
|
|
66
69
|
|
|
67
70
|
override static func requiresMainQueueSetup() -> Bool { true }
|
|
@@ -81,7 +84,7 @@ final class RNAdWhaleMediationRewardAd: RCTEventEmitter {
|
|
|
81
84
|
|
|
82
85
|
// MARK: - Flutter-sync API (권장)
|
|
83
86
|
|
|
84
|
-
/// loadRewardAd({adId, placementUid, placementName?, region?, gcoder?})
|
|
87
|
+
/// loadRewardAd({adId, placementUid, placementName?, region?, gcoder?, userId?, customData?})
|
|
85
88
|
@objc func loadRewardAd(_ args: NSDictionary) {
|
|
86
89
|
let adId = (args["adId"] as? NSNumber)?.intValue ?? 0
|
|
87
90
|
let placementUid = (args["placementUid"] as? String) ?? ""
|
|
@@ -91,11 +94,32 @@ final class RNAdWhaleMediationRewardAd: RCTEventEmitter {
|
|
|
91
94
|
let holder = Holder(adId: adId, module: self, ad: ad)
|
|
92
95
|
holdersById[adId] = holder
|
|
93
96
|
|
|
97
|
+
// 보상형 SSV(서버 사이드 검증) 옵션 적용
|
|
98
|
+
let userId = args["userId"] as? String
|
|
99
|
+
let customData = (args["customData"] as? [String: String])
|
|
100
|
+
?? (args["customData"] as? NSDictionary as? [String: String])
|
|
101
|
+
Self.applySsvOptions(ad: ad, userId: userId, customData: customData)
|
|
102
|
+
|
|
94
103
|
DispatchQueue.main.async {
|
|
95
104
|
ad.load(placementUid)
|
|
96
105
|
}
|
|
97
106
|
}
|
|
98
107
|
|
|
108
|
+
/// 보상형 SSV 옵션(userId / customData)을 SDK 인스턴스에 적용.
|
|
109
|
+
/// AdMob / AdManager 만 동작하며, 그 외 네트워크에서는 무시(no-op)됩니다.
|
|
110
|
+
private static func applySsvOptions(
|
|
111
|
+
ad: AdWhaleRewardAd,
|
|
112
|
+
userId: String?,
|
|
113
|
+
customData: [String: String]?
|
|
114
|
+
) {
|
|
115
|
+
if let userId, !userId.isEmpty {
|
|
116
|
+
ad.setUserId(userId)
|
|
117
|
+
}
|
|
118
|
+
if let customData, !customData.isEmpty {
|
|
119
|
+
ad.setCustomData(customData)
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
99
123
|
/// showAdWithoutView(adId)
|
|
100
124
|
@objc func showAdWithoutView(_ adId: NSNumber) {
|
|
101
125
|
let id = adId.intValue
|
|
@@ -134,15 +158,25 @@ final class RNAdWhaleMediationRewardAd: RCTEventEmitter {
|
|
|
134
158
|
legacyGcoder = (lt, lng)
|
|
135
159
|
}
|
|
136
160
|
|
|
161
|
+
/// 보상형 SSV(서버 사이드 검증)용 앱 사용자 id 설정 (AdMob / AdManager 전용)
|
|
162
|
+
@objc func setUserId(_ userId: String) { legacyUserId = userId }
|
|
163
|
+
/// 보상형 SSV(서버 사이드 검증)용 커스텀 데이터 설정 (AdMob / AdManager 전용)
|
|
164
|
+
@objc func setCustomData(_ customData: NSDictionary) {
|
|
165
|
+
legacyCustomData = customData as? [String: String]
|
|
166
|
+
}
|
|
167
|
+
|
|
137
168
|
@objc func loadAd(_ placementUid: String) {
|
|
138
169
|
legacyLastAdId += 1
|
|
139
|
-
|
|
170
|
+
var args: [String: Any] = [
|
|
140
171
|
"adId": legacyLastAdId,
|
|
141
172
|
"placementUid": placementUid,
|
|
142
173
|
"placementName": legacyPlacementName ?? "",
|
|
143
174
|
"region": legacyRegion ?? "",
|
|
144
175
|
"gcoder": legacyGcoder != nil ? [legacyGcoder!.0, legacyGcoder!.1] : [],
|
|
145
|
-
]
|
|
176
|
+
]
|
|
177
|
+
if let legacyUserId { args["userId"] = legacyUserId }
|
|
178
|
+
if let legacyCustomData { args["customData"] = legacyCustomData }
|
|
179
|
+
loadRewardAd(args as NSDictionary)
|
|
146
180
|
}
|
|
147
181
|
|
|
148
182
|
@objc func showAd() {
|
|
@@ -2,12 +2,53 @@
|
|
|
2
2
|
|
|
3
3
|
// src/AdWhaleRewardAd.ts
|
|
4
4
|
import { NativeEventEmitter, NativeModules } from 'react-native';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* 보상형 광고 로드 시 함께 지정할 수 있는 옵션.
|
|
8
|
+
* placementName / region / gcoder 는 기존 옵션이며,
|
|
9
|
+
* userId / customData 는 보상형 SSV(서버 사이드 검증) 전용 옵션입니다.
|
|
10
|
+
*/
|
|
11
|
+
|
|
5
12
|
const LINKING_ERROR = 'RNAdWhaleMediationRewardAd native module is not linked on this platform.';
|
|
6
13
|
const {
|
|
7
14
|
RNAdWhaleMediationRewardAd
|
|
8
15
|
} = NativeModules;
|
|
9
16
|
const rewardEmitter = RNAdWhaleMediationRewardAd ? new NativeEventEmitter(RNAdWhaleMediationRewardAd) : null;
|
|
10
17
|
export const AdWhaleRewardAd = {
|
|
18
|
+
/**
|
|
19
|
+
* 보상형 SSV(서버 사이드 검증)용 앱 사용자 id 설정.
|
|
20
|
+
*
|
|
21
|
+
* - AdMob / AdManager 의 SSV postback `user_id` 로 전달됩니다. 그 외 네트워크에서는 무시(no-op)됩니다.
|
|
22
|
+
* - `loadAd()` 호출 전에 설정하는 것을 권장하며, `showAd()` 이전까지 호출할 수 있습니다.
|
|
23
|
+
* - 여러 번 호출하면 마지막 값이 적용됩니다.
|
|
24
|
+
*
|
|
25
|
+
* 참고: `loadAd(placementUid, { userId })` 옵션으로도 동일하게 지정할 수 있습니다.
|
|
26
|
+
*/
|
|
27
|
+
setUserId(userId) {
|
|
28
|
+
if (!RNAdWhaleMediationRewardAd) {
|
|
29
|
+
console.warn(LINKING_ERROR);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
RNAdWhaleMediationRewardAd.setUserId?.(userId);
|
|
33
|
+
},
|
|
34
|
+
/**
|
|
35
|
+
* 보상형 SSV(서버 사이드 검증)용 커스텀 데이터 설정.
|
|
36
|
+
*
|
|
37
|
+
* - AdMob / AdManager 의 SSV postback `custom_data` 로 전달됩니다. 그 외 네트워크에서는 무시(no-op)됩니다.
|
|
38
|
+
* - 전달한 객체는 네이티브에서 JSON 문자열로 직렬화되어 단일 문자열 필드에 실립니다.
|
|
39
|
+
* 퍼블리셔 서버는 postback 의 `custom_data` 값을 JSON 으로 파싱해야 합니다.
|
|
40
|
+
* - AdMob 의 `custom_data` 는 실무상 200자 정도를 넘기면 잘릴 수 있으니 길이에 유의하세요.
|
|
41
|
+
* - `loadAd()` 호출 전에 설정하는 것을 권장하며, `showAd()` 이전까지 호출할 수 있습니다.
|
|
42
|
+
*
|
|
43
|
+
* 참고: `loadAd(placementUid, { customData })` 옵션으로도 동일하게 지정할 수 있습니다.
|
|
44
|
+
*/
|
|
45
|
+
setCustomData(customData) {
|
|
46
|
+
if (!RNAdWhaleMediationRewardAd) {
|
|
47
|
+
console.warn(LINKING_ERROR);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
RNAdWhaleMediationRewardAd.setCustomData?.(customData);
|
|
51
|
+
},
|
|
11
52
|
loadAd(placementUid, options) {
|
|
12
53
|
if (!RNAdWhaleMediationRewardAd) {
|
|
13
54
|
console.warn(LINKING_ERROR);
|
|
@@ -23,6 +64,13 @@ export const AdWhaleRewardAd = {
|
|
|
23
64
|
if (options?.gcoder) {
|
|
24
65
|
RNAdWhaleMediationRewardAd.setGcoder?.(options.gcoder);
|
|
25
66
|
}
|
|
67
|
+
// 보상형 SSV(서버 사이드 검증) 옵션
|
|
68
|
+
if (options?.userId) {
|
|
69
|
+
RNAdWhaleMediationRewardAd.setUserId?.(options.userId);
|
|
70
|
+
}
|
|
71
|
+
if (options?.customData) {
|
|
72
|
+
RNAdWhaleMediationRewardAd.setCustomData?.(options.customData);
|
|
73
|
+
}
|
|
26
74
|
if (RNAdWhaleMediationRewardAd.loadAd) {
|
|
27
75
|
RNAdWhaleMediationRewardAd.loadAd(placementUid);
|
|
28
76
|
return;
|
|
@@ -33,7 +81,9 @@ export const AdWhaleRewardAd = {
|
|
|
33
81
|
placementUid,
|
|
34
82
|
placementName: options?.placementName,
|
|
35
83
|
region: options?.region,
|
|
36
|
-
gcoder: options?.gcoder ? [options.gcoder.lt, options.gcoder.lng] : undefined
|
|
84
|
+
gcoder: options?.gcoder ? [options.gcoder.lt, options.gcoder.lng] : undefined,
|
|
85
|
+
userId: options?.userId,
|
|
86
|
+
customData: options?.customData
|
|
37
87
|
});
|
|
38
88
|
return;
|
|
39
89
|
}
|
|
@@ -69,7 +119,9 @@ export const AdWhaleRewardAd = {
|
|
|
69
119
|
placementUid,
|
|
70
120
|
placementName: options?.placementName,
|
|
71
121
|
region: options?.region,
|
|
72
|
-
gcoder: options?.gcoder ? [options.gcoder.lt, options.gcoder.lng] : undefined
|
|
122
|
+
gcoder: options?.gcoder ? [options.gcoder.lt, options.gcoder.lng] : undefined,
|
|
123
|
+
userId: options?.userId,
|
|
124
|
+
customData: options?.customData
|
|
73
125
|
});
|
|
74
126
|
},
|
|
75
127
|
showAdWithoutView(adId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeEventEmitter","NativeModules","LINKING_ERROR","RNAdWhaleMediationRewardAd","rewardEmitter","AdWhaleRewardAd","
|
|
1
|
+
{"version":3,"names":["NativeEventEmitter","NativeModules","LINKING_ERROR","RNAdWhaleMediationRewardAd","rewardEmitter","AdWhaleRewardAd","setUserId","userId","console","warn","setCustomData","customData","loadAd","placementUid","options","placementName","setPlacementName","region","setRegion","gcoder","setGcoder","loadRewardAd","adId","lt","lng","undefined","showAd","showAdWithoutView","destroyAd","addEventListeners","listeners","subs","directShowedReceived","directUserRewardedReceived","push","addListener","log","onLoaded","onLoadFailed","event","onShowed","onShowFailed","onDismissed","onClicked","rewardedEvent","rewardAmount","amount","RewardAmount","rewardType","type","RewardType","String","onUserRewarded","payload","eventName","addAdEventListenersById","handle","cb","p","statusCode","Number","message"],"sourceRoot":"../../src","sources":["AdWhaleRewardAd.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AdWhaleMediationAds","AdWhaleMethodCallConst","AdWhaleMethodArgConst","AdWhaleMethodResultConst","AdWhaleAdView","AdWhaleAdSize","ADWHALE_BANNER_IOS_UNSUPPORTED_STATUS_CODE","isAdWhaleBannerAdSizeSupportedOnIos","AdWhaleInterstitialAd","AdWhaleRewardAd","AdWhaleAppOpenAd","AdWhaleExitPopupAd","AdWhaleTransitionPopupAd","AdWhaleNativeCustomView"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA;;AAEA;AACA,SAASA,mBAAmB,QAAQ,0BAAuB;AAM3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SACEC,sBAAsB,QAEjB,uCAAoC;AAC3C,SAASC,qBAAqB,QAAQ,sCAAmC;AACzE,SAASC,wBAAwB,QAAQ,yCAAsC;;AAE/E;AACA,SACEC,aAAa,EACbC,aAAa,EACbC,0CAA0C,EAC1CC,mCAAmC,QAC9B,oBAAiB;AAOxB;AACA,SACEC,qBAAqB,QAChB,4BAAyB;AAOhC;AACA,SACEC,eAAe,QACV,sBAAmB;
|
|
1
|
+
{"version":3,"names":["AdWhaleMediationAds","AdWhaleMethodCallConst","AdWhaleMethodArgConst","AdWhaleMethodResultConst","AdWhaleAdView","AdWhaleAdSize","ADWHALE_BANNER_IOS_UNSUPPORTED_STATUS_CODE","isAdWhaleBannerAdSizeSupportedOnIos","AdWhaleInterstitialAd","AdWhaleRewardAd","AdWhaleAppOpenAd","AdWhaleExitPopupAd","AdWhaleTransitionPopupAd","AdWhaleNativeCustomView"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA;;AAEA;AACA,SAASA,mBAAmB,QAAQ,0BAAuB;AAM3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SACEC,sBAAsB,QAEjB,uCAAoC;AAC3C,SAASC,qBAAqB,QAAQ,sCAAmC;AACzE,SAASC,wBAAwB,QAAQ,yCAAsC;;AAE/E;AACA,SACEC,aAAa,EACbC,aAAa,EACbC,0CAA0C,EAC1CC,mCAAmC,QAC9B,oBAAiB;AAOxB;AACA,SACEC,qBAAqB,QAChB,4BAAyB;AAOhC;AACA,SACEC,eAAe,QACV,sBAAmB;AAU1B;AACA,SACEC,gBAAgB,QACX,uBAAoB;AAO3B;AACA,SAASC,kBAAkB,QAAQ,yBAAsB;AAQzD;AACA,SAASC,wBAAwB,QAAQ,+BAA4B;AASrE;AACA,SACEC,uBAAuB,QAClB,8BAA2B;AAQlC;AACA;AACA;AACA,cAAc,gCAA6B","ignoreList":[]}
|
|
@@ -26,19 +26,60 @@ export interface AdWhaleRewardGcoder {
|
|
|
26
26
|
lt: number;
|
|
27
27
|
lng: number;
|
|
28
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* 보상형 광고 로드 시 함께 지정할 수 있는 옵션.
|
|
31
|
+
* placementName / region / gcoder 는 기존 옵션이며,
|
|
32
|
+
* userId / customData 는 보상형 SSV(서버 사이드 검증) 전용 옵션입니다.
|
|
33
|
+
*/
|
|
34
|
+
export interface AdWhaleRewardLoadOptions {
|
|
35
|
+
placementName?: string;
|
|
36
|
+
region?: string;
|
|
37
|
+
gcoder?: AdWhaleRewardGcoder;
|
|
38
|
+
/**
|
|
39
|
+
* 보상형 SSV(서버 사이드 검증)용 앱 사용자 id.
|
|
40
|
+
* AdMob / AdManager SSV postback 의 user_id 로 전달됩니다.
|
|
41
|
+
* (그 외 네트워크에서는 무시됩니다.)
|
|
42
|
+
*/
|
|
43
|
+
userId?: string;
|
|
44
|
+
/**
|
|
45
|
+
* 보상형 SSV(서버 사이드 검증)용 커스텀 데이터.
|
|
46
|
+
* AdMob / AdManager SSV postback 의 custom_data 로 전달되며,
|
|
47
|
+
* 네이티브에서 JSON 문자열로 직렬화되어 실립니다.
|
|
48
|
+
* (그 외 네트워크에서는 무시됩니다.)
|
|
49
|
+
*/
|
|
50
|
+
customData?: {
|
|
51
|
+
[key: string]: string;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
29
54
|
export declare const AdWhaleRewardAd: {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
55
|
+
/**
|
|
56
|
+
* 보상형 SSV(서버 사이드 검증)용 앱 사용자 id 설정.
|
|
57
|
+
*
|
|
58
|
+
* - AdMob / AdManager 의 SSV postback `user_id` 로 전달됩니다. 그 외 네트워크에서는 무시(no-op)됩니다.
|
|
59
|
+
* - `loadAd()` 호출 전에 설정하는 것을 권장하며, `showAd()` 이전까지 호출할 수 있습니다.
|
|
60
|
+
* - 여러 번 호출하면 마지막 값이 적용됩니다.
|
|
61
|
+
*
|
|
62
|
+
* 참고: `loadAd(placementUid, { userId })` 옵션으로도 동일하게 지정할 수 있습니다.
|
|
63
|
+
*/
|
|
64
|
+
setUserId(userId: string): void;
|
|
65
|
+
/**
|
|
66
|
+
* 보상형 SSV(서버 사이드 검증)용 커스텀 데이터 설정.
|
|
67
|
+
*
|
|
68
|
+
* - AdMob / AdManager 의 SSV postback `custom_data` 로 전달됩니다. 그 외 네트워크에서는 무시(no-op)됩니다.
|
|
69
|
+
* - 전달한 객체는 네이티브에서 JSON 문자열로 직렬화되어 단일 문자열 필드에 실립니다.
|
|
70
|
+
* 퍼블리셔 서버는 postback 의 `custom_data` 값을 JSON 으로 파싱해야 합니다.
|
|
71
|
+
* - AdMob 의 `custom_data` 는 실무상 200자 정도를 넘기면 잘릴 수 있으니 길이에 유의하세요.
|
|
72
|
+
* - `loadAd()` 호출 전에 설정하는 것을 권장하며, `showAd()` 이전까지 호출할 수 있습니다.
|
|
73
|
+
*
|
|
74
|
+
* 참고: `loadAd(placementUid, { customData })` 옵션으로도 동일하게 지정할 수 있습니다.
|
|
75
|
+
*/
|
|
76
|
+
setCustomData(customData: {
|
|
77
|
+
[key: string]: string;
|
|
34
78
|
}): void;
|
|
79
|
+
loadAd(placementUid: string, options?: AdWhaleRewardLoadOptions): void;
|
|
35
80
|
showAd(): void;
|
|
36
81
|
/** Flutter와 동일한 신규 API (권장) */
|
|
37
|
-
loadRewardAd(adId: number, placementUid: string, options?:
|
|
38
|
-
placementName?: string;
|
|
39
|
-
region?: string;
|
|
40
|
-
gcoder?: AdWhaleRewardGcoder;
|
|
41
|
-
}): void;
|
|
82
|
+
loadRewardAd(adId: number, placementUid: string, options?: AdWhaleRewardLoadOptions): void;
|
|
42
83
|
showAdWithoutView(adId: number): void;
|
|
43
84
|
destroyAd(adId: number): void;
|
|
44
85
|
addEventListeners(listeners: AdWhaleRewardEvents): EmitterSubscription[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdWhaleRewardAd.d.ts","sourceRoot":"","sources":["../../../src/AdWhaleRewardAd.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,8BAA8B;IAC7C,0BAA0B;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACxD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACxD,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,8BAA8B,KAAK,IAAI,CAAC;CAClE;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;CACb;
|
|
1
|
+
{"version":3,"file":"AdWhaleRewardAd.d.ts","sourceRoot":"","sources":["../../../src/AdWhaleRewardAd.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,8BAA8B;IAC7C,0BAA0B;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACxD,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACxD,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,8BAA8B,KAAK,IAAI,CAAC;CAClE;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,UAAU,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CACxC;AAoCD,eAAO,MAAM,eAAe;IAC1B;;;;;;;;OAQG;sBACe,MAAM;IAQxB;;;;;;;;;;OAUG;8BACuB;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE;yBAQ9B,MAAM,YAAY,wBAAwB;;IA+D/D,+BAA+B;uBAEvB,MAAM,gBACE,MAAM,YACV,wBAAwB;4BAqBZ,MAAM;oBAYd,MAAM;iCAIO,mBAAmB,GAAG,mBAAmB,EAAE;IAmGxE,yCAAyC;kCAEjC,MAAM,aACD,mBAAmB,GAC7B,mBAAmB,EAAE;CA4DzB,CAAC"}
|
|
@@ -8,7 +8,7 @@ export type { AdWhaleBannerError, AdWhaleBannerViewProps, } from './AdWhaleAdVie
|
|
|
8
8
|
export { AdWhaleInterstitialAd, } from './AdWhaleInterstitialAd';
|
|
9
9
|
export type { AdWhaleInterstitialErrorEvent, AdWhaleInterstitialEvents, } from './AdWhaleInterstitialAd';
|
|
10
10
|
export { AdWhaleRewardAd, } from './AdWhaleRewardAd';
|
|
11
|
-
export type { AdWhaleRewardErrorEvent, AdWhaleRewardUserRewardedEvent, AdWhaleRewardEvents, } from './AdWhaleRewardAd';
|
|
11
|
+
export type { AdWhaleRewardErrorEvent, AdWhaleRewardUserRewardedEvent, AdWhaleRewardEvents, AdWhaleRewardGcoder, AdWhaleRewardLoadOptions, } from './AdWhaleRewardAd';
|
|
12
12
|
export { AdWhaleAppOpenAd, } from './AdWhaleAppOpenAd';
|
|
13
13
|
export type { AdWhaleAppOpenErrorEvent, AdWhaleAppOpenEvents, } from './AdWhaleAppOpenAd';
|
|
14
14
|
export { AdWhaleExitPopupAd } from './AdWhaleExitPopupAd';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAW/B,OAAO,EACL,sBAAsB,EACtB,KAAK,yBAAyB,GAC/B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAGhF,OAAO,EACL,aAAa,EACb,aAAa,EACb,0CAA0C,EAC1C,mCAAmC,GACpC,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EACL,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,6BAA6B,EAC7B,yBAAyB,GAC1B,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EACL,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,uBAAuB,EACvB,8BAA8B,EAC9B,mBAAmB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAW/B,OAAO,EACL,sBAAsB,EACtB,KAAK,yBAAyB,GAC/B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAGhF,OAAO,EACL,aAAa,EACb,aAAa,EACb,0CAA0C,EAC1C,mCAAmC,GACpC,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EACL,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,6BAA6B,EAC7B,yBAAyB,GAC1B,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EACL,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,uBAAuB,EACvB,8BAA8B,EAC9B,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EACL,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EACV,6BAA6B,EAC7B,4BAA4B,EAC5B,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,YAAY,EACV,mCAAmC,EACnC,kCAAkC,EAClC,8BAA8B,EAC9B,4BAA4B,GAC7B,MAAM,4BAA4B,CAAC;AAIpC,OAAO,EACL,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,yBAAyB,EACzB,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,2BAA2B,CAAC;AAMnC,cAAc,6BAA6B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "adwhale-sdk-react-native",
|
|
3
|
-
"version": "2.7.
|
|
3
|
+
"version": "2.7.400",
|
|
4
4
|
"description": "Adwhale SDK React Native library for integrating Adwhale advertising mediation SDK into React Native applications.",
|
|
5
5
|
"main": "./lib/module/index.js",
|
|
6
6
|
"react-native": "./lib/module/index.js",
|
package/src/AdWhaleRewardAd.ts
CHANGED
|
@@ -33,10 +33,36 @@ export interface AdWhaleRewardGcoder {
|
|
|
33
33
|
lng: number;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
/**
|
|
37
|
+
* 보상형 광고 로드 시 함께 지정할 수 있는 옵션.
|
|
38
|
+
* placementName / region / gcoder 는 기존 옵션이며,
|
|
39
|
+
* userId / customData 는 보상형 SSV(서버 사이드 검증) 전용 옵션입니다.
|
|
40
|
+
*/
|
|
41
|
+
export interface AdWhaleRewardLoadOptions {
|
|
42
|
+
placementName?: string;
|
|
43
|
+
region?: string;
|
|
44
|
+
gcoder?: AdWhaleRewardGcoder;
|
|
45
|
+
/**
|
|
46
|
+
* 보상형 SSV(서버 사이드 검증)용 앱 사용자 id.
|
|
47
|
+
* AdMob / AdManager SSV postback 의 user_id 로 전달됩니다.
|
|
48
|
+
* (그 외 네트워크에서는 무시됩니다.)
|
|
49
|
+
*/
|
|
50
|
+
userId?: string;
|
|
51
|
+
/**
|
|
52
|
+
* 보상형 SSV(서버 사이드 검증)용 커스텀 데이터.
|
|
53
|
+
* AdMob / AdManager SSV postback 의 custom_data 로 전달되며,
|
|
54
|
+
* 네이티브에서 JSON 문자열로 직렬화되어 실립니다.
|
|
55
|
+
* (그 외 네트워크에서는 무시됩니다.)
|
|
56
|
+
*/
|
|
57
|
+
customData?: { [key: string]: string };
|
|
58
|
+
}
|
|
59
|
+
|
|
36
60
|
interface RNAdWhaleMediationRewardAdNativeModule {
|
|
37
61
|
setPlacementName?(placementName: string): void;
|
|
38
62
|
setRegion?(region: string): void;
|
|
39
63
|
setGcoder?(gcoder: { lt: number; lng: number }): void;
|
|
64
|
+
setUserId?(userId: string): void;
|
|
65
|
+
setCustomData?(customData: { [key: string]: string }): void;
|
|
40
66
|
loadAd?(placementUid: string): void;
|
|
41
67
|
showAd?(): void;
|
|
42
68
|
loadRewardAd?(args: {
|
|
@@ -45,6 +71,8 @@ interface RNAdWhaleMediationRewardAdNativeModule {
|
|
|
45
71
|
placementName?: string;
|
|
46
72
|
region?: string;
|
|
47
73
|
gcoder?: [number, number];
|
|
74
|
+
userId?: string;
|
|
75
|
+
customData?: { [key: string]: string };
|
|
48
76
|
}): void;
|
|
49
77
|
showAdWithoutView?(adId: number): void;
|
|
50
78
|
destroyAd?(adId: number): void;
|
|
@@ -64,14 +92,43 @@ const rewardEmitter = RNAdWhaleMediationRewardAd
|
|
|
64
92
|
: null;
|
|
65
93
|
|
|
66
94
|
export const AdWhaleRewardAd = {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
95
|
+
/**
|
|
96
|
+
* 보상형 SSV(서버 사이드 검증)용 앱 사용자 id 설정.
|
|
97
|
+
*
|
|
98
|
+
* - AdMob / AdManager 의 SSV postback `user_id` 로 전달됩니다. 그 외 네트워크에서는 무시(no-op)됩니다.
|
|
99
|
+
* - `loadAd()` 호출 전에 설정하는 것을 권장하며, `showAd()` 이전까지 호출할 수 있습니다.
|
|
100
|
+
* - 여러 번 호출하면 마지막 값이 적용됩니다.
|
|
101
|
+
*
|
|
102
|
+
* 참고: `loadAd(placementUid, { userId })` 옵션으로도 동일하게 지정할 수 있습니다.
|
|
103
|
+
*/
|
|
104
|
+
setUserId(userId: string) {
|
|
105
|
+
if (!RNAdWhaleMediationRewardAd) {
|
|
106
|
+
console.warn(LINKING_ERROR);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
RNAdWhaleMediationRewardAd.setUserId?.(userId);
|
|
110
|
+
},
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* 보상형 SSV(서버 사이드 검증)용 커스텀 데이터 설정.
|
|
114
|
+
*
|
|
115
|
+
* - AdMob / AdManager 의 SSV postback `custom_data` 로 전달됩니다. 그 외 네트워크에서는 무시(no-op)됩니다.
|
|
116
|
+
* - 전달한 객체는 네이티브에서 JSON 문자열로 직렬화되어 단일 문자열 필드에 실립니다.
|
|
117
|
+
* 퍼블리셔 서버는 postback 의 `custom_data` 값을 JSON 으로 파싱해야 합니다.
|
|
118
|
+
* - AdMob 의 `custom_data` 는 실무상 200자 정도를 넘기면 잘릴 수 있으니 길이에 유의하세요.
|
|
119
|
+
* - `loadAd()` 호출 전에 설정하는 것을 권장하며, `showAd()` 이전까지 호출할 수 있습니다.
|
|
120
|
+
*
|
|
121
|
+
* 참고: `loadAd(placementUid, { customData })` 옵션으로도 동일하게 지정할 수 있습니다.
|
|
122
|
+
*/
|
|
123
|
+
setCustomData(customData: { [key: string]: string }) {
|
|
124
|
+
if (!RNAdWhaleMediationRewardAd) {
|
|
125
|
+
console.warn(LINKING_ERROR);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
RNAdWhaleMediationRewardAd.setCustomData?.(customData);
|
|
129
|
+
},
|
|
130
|
+
|
|
131
|
+
loadAd(placementUid: string, options?: AdWhaleRewardLoadOptions) {
|
|
75
132
|
if (!RNAdWhaleMediationRewardAd) {
|
|
76
133
|
console.warn(LINKING_ERROR);
|
|
77
134
|
return;
|
|
@@ -86,6 +143,13 @@ export const AdWhaleRewardAd = {
|
|
|
86
143
|
if (options?.gcoder) {
|
|
87
144
|
RNAdWhaleMediationRewardAd.setGcoder?.(options.gcoder);
|
|
88
145
|
}
|
|
146
|
+
// 보상형 SSV(서버 사이드 검증) 옵션
|
|
147
|
+
if (options?.userId) {
|
|
148
|
+
RNAdWhaleMediationRewardAd.setUserId?.(options.userId);
|
|
149
|
+
}
|
|
150
|
+
if (options?.customData) {
|
|
151
|
+
RNAdWhaleMediationRewardAd.setCustomData?.(options.customData);
|
|
152
|
+
}
|
|
89
153
|
if (RNAdWhaleMediationRewardAd.loadAd) {
|
|
90
154
|
RNAdWhaleMediationRewardAd.loadAd(placementUid);
|
|
91
155
|
return;
|
|
@@ -99,6 +163,8 @@ export const AdWhaleRewardAd = {
|
|
|
99
163
|
gcoder: options?.gcoder
|
|
100
164
|
? [options.gcoder.lt, options.gcoder.lng]
|
|
101
165
|
: undefined,
|
|
166
|
+
userId: options?.userId,
|
|
167
|
+
customData: options?.customData,
|
|
102
168
|
});
|
|
103
169
|
return;
|
|
104
170
|
}
|
|
@@ -129,11 +195,7 @@ export const AdWhaleRewardAd = {
|
|
|
129
195
|
loadRewardAd(
|
|
130
196
|
adId: number,
|
|
131
197
|
placementUid: string,
|
|
132
|
-
options?:
|
|
133
|
-
placementName?: string;
|
|
134
|
-
region?: string;
|
|
135
|
-
gcoder?: AdWhaleRewardGcoder;
|
|
136
|
-
},
|
|
198
|
+
options?: AdWhaleRewardLoadOptions,
|
|
137
199
|
) {
|
|
138
200
|
if (!RNAdWhaleMediationRewardAd) {
|
|
139
201
|
console.warn(LINKING_ERROR);
|
|
@@ -149,6 +211,8 @@ export const AdWhaleRewardAd = {
|
|
|
149
211
|
placementName: options?.placementName,
|
|
150
212
|
region: options?.region,
|
|
151
213
|
gcoder: options?.gcoder ? [options.gcoder.lt, options.gcoder.lng] : undefined,
|
|
214
|
+
userId: options?.userId,
|
|
215
|
+
customData: options?.customData,
|
|
152
216
|
});
|
|
153
217
|
},
|
|
154
218
|
|