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.
@@ -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.4"
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.300
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
- 자세한 가이드는 https://adwhale.gitbook.io/adwhale-mediation-sdk/react-native/sdk 참고하세요.
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
- ## Version Policy
29
- 본 SDK는 Android 네이티브 및 iOS 네이티브 SDK 버전과의 대응 관계를 명확히 유지하기 위해
30
- 다음과 같은 버전 규칙을 사용합니다.
31
- - 세 자릿수(Major.Minor.Patch) 는 Android SDK 버전과 동일
32
- - React Native 전용 수정 사항은 Patch 값을 확장하여 관리
33
-
34
- ### Version Mapping Example
35
- | Android SDK | React Native SDK | Description |
36
- |-------------|------------------|--------------------------------|
37
- | 2.7.1 | 2.7.100 | Android 2.7.1 기반 RN SDK 최초 릴리스 |
38
- | 2.7.1 | 2.7.101 | RN 레이어 핫픽스 |
39
- | 2.7.1 | 2.7.102 | RN 버그 수정 |
40
- | 2.7.2 | 2.7.200 | Android SDK 2.7.2 반영 |
41
- | 2.7.3 | 2.7.300 | Android SDK 2.7.3 반영 |
42
-
43
-
44
- ## Version Usage Guide
45
- 프로젝트 상황에 따라 아래 방식을 권장합니다.
46
-
47
- ### Android SDK 버전에 고정하여 사용하는 경우 (권장)
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.300"
60
+ "adwhale-sdk-react-native": "~2.7.400"
52
61
  }
53
62
  ```
54
- - Android SDK 2.7.3 기반 유지
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.300"
66
+ "adwhale-sdk-react-native": "2.7.400"
62
67
  }
63
68
  ```
64
- - 버전 변경 없음
65
- - 재현성, 장애 분석에 최적
66
- - QA / 장애 재현 환경
67
- - 장기 유지 브랜치
68
69
 
69
- ## Example Project
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
- yarn install
76
- yarn prepare
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
- ## Troubleshooting
78
+ # 2. ReactNativeSample 사용 시
79
+ cd ADwhaleMediationSDK-ReactNative/ReactNativeSample
110
80
 
111
- ### Android 빌드 오류
112
- ```sh
113
- cd example/android
114
- ./gradlew clean
115
- ```
81
+ # 2. ExpoSample 사용 시
82
+ cd ADwhaleMediationSDK-ReactNative/ExpoSample
116
83
 
117
- ### iOS: "PhaseScriptExecution failed with a nonzero exit code"
118
- Xcode 빌드 시 **Run Script** 단계 중 하나가 실패할 때 나옵니다. 어떤 스크립트에서 실패했는지부터 확인하세요.
84
+ # 3. React Native 의존성 설치: yarn 사용
85
+ yarn install
119
86
 
120
- **1) 실패한 스크립트 확인**
121
- - Xcode에서 **Product → Build** 후 왼쪽 **Report navigator** (⌘9) → 최근 빌드 선택
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
- **2) 자주 쓰는 해결 방법**
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
- ### iOS 실기기에서 "Development team" 오류가 나는 이유
144
- - **시뮬레이터**: 코드 서명이 필요 없어 Development team 없이 실행됩니다.
145
- - **실제 기기(USB)**: iOS는 기기 설치 시 **Apple 개발자 팀(Development team)** 서명을 요구합니다.
96
+ ### Expo Support
97
+ 다음 환경에서 사용 가능합니다.
98
+ - Expo Bare Workflow
99
+ - Expo Custom Dev Client
100
+ Expo Go 환경에서는 사용할 수 없습니다.
146
101
 
147
- **해결**: Xcode에서 `example/ios/AdwhaleSdkReactNativeExample.xcworkspace` 열기 → **AdwhaleSdkReactNativeExample** 타깃 → **Signing & Capabilities** → **Team**에서 본인 Apple ID(팀) 선택. (무료 Apple ID로도 실기기 테스트 가능)
148
- 자신의 앱이라면 해당 앱의 `.xcworkspace`와 앱 타깃 이름에 맞춰 동일하게 설정하면 됩니다.
102
+ ### Android 실행
103
+ ```sh
104
+ # yarn 사용 시
105
+ yarn start
106
+ yarn android
149
107
 
150
- ### iOS 실기기에서 "신뢰하지 않는 개발자" / 앱이 실행되지 않을 때
151
- 무료 Apple ID로 서명한 앱을 **처음** 실기기에 설치한 경우, iOS가 개발자를 "신뢰하지 않음"으로 두어 앱 실행을 막습니다.
152
- 이때 Xcode에서는 *"failed to launch"*, *"exited before the debugger could attach"* 같은 메시지가 나올 수 있습니다.
108
+ # npm 사용
109
+ npm start
110
+ npm run android
111
+ ```
153
112
 
154
- **해결 (iPhone에서 한 번만 하면 됨)**
155
- 1. iPhone **설정** → **일반** → **VPN 및 기기 관리** (또는 **기기 관리** / **프로필 및 기기 관리**)
156
- 2. **개발자 앱** 아래에서 본인 Apple ID(예: `xxxxx@gmail.com`) 항목 선택
157
- 3. **"[Apple ID]을(를) 신뢰"** 탭 → **신뢰** 확인
158
- 4. 이후부터는 해당 기기에서 같은 Apple ID로 서명한 앱이 정상 실행됩니다.
113
+ ### iOS 실행
114
+ ```sh
115
+ # yarn 사용
116
+ yarn start
117
+ yarn ios
159
118
 
160
- ### iOS App Store 배포
161
- SDK를 사용한 앱을 App Store에 제출·배포하는 데 문제 없습니다.
162
- 실기기 테스트·스토어 제출 시에는 위와 같이 서명(Development team, 프로비저닝 프로필)을 설정하고, [ADwhale React Native 가이드](https://adwhale.gitbook.io/adwhale-mediation-sdk/react-native/sdk)에 안내된 iOS 설정(Info.plist, App Transport Security, AdMob(Google) App ID 등)을 준수하면 됩니다.
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.300 | 애드웨일 Android 2.7.3 업데이트 및 ios 1.0.4 추가 | 2026.04.11 |
173
- | 2.7.204 | 버그샘플 수정 | 2026.01.22 |
174
- | 2.7.203 | 버그 및 샘플 수정 | 2026.01.19 |
175
- | 2.7.202 | 버그 및 샘플 수정 | 2026.01.19 |
176
- | 2.7.201 | 버그 및 샘플 수정 | 2026.01.12 |
177
- | 2.7.200 | 앱오프닝 광고 추가 (ADwhale Android SDK v2.7.2에서 추가됨) | 2026.01.09 |
178
- | 2.7.102 | gcoder placement name 추가 | 2025.12.29 |
179
- | 2.7.101 | 버그샘플 수정 | 2025.12.23 |
180
- | 2.7.100 | 네이티브 광고 추가 (ADwhale Android SDK v2.7.0) | 2025.12.15 |
181
- | | GDPR 기능 추가 (ADwhale Android SDK v2.7.0) | |
182
- | | 적응형 배너 추가 (ADwhale Android SDK v2.7.1) | |
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 | gcoderplacement 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)
@@ -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
- implementation "net.adwhale.sdk.mediation:adwhale-mediation-sdk:2.7.2"
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
- sendAdEvent(adId, "onAppOpenAdLoadFailed", params);
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
- sendAdEvent(lastActiveAdId, "onAppOpenAdLoadFailed", params);
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
- sendAdEvent(lastActiveAdId, "onAppOpenAdShowFailed", params);
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
@@ -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
- sendAdEvent(lastActiveAdId, "onInterstitialAdLoadFailed", params);
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
- sendAdEvent(lastActiveAdId, "onInterstitialAdShowFailed", params);
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
- sendAdEvent(boundAdId, "onInterstitialAdLoadFailed", params);
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
- sendAdEvent(boundAdId, "onInterstitialAdShowFailed", params);
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
- loadRewardAd([
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","loadAd","placementUid","options","console","warn","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":[]}
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":[]}
@@ -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;AAQ1B;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":[]}
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
- loadAd(placementUid: string, options?: {
31
- placementName?: string;
32
- region?: string;
33
- gcoder?: AdWhaleRewardGcoder;
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;AAgCD,eAAO,MAAM,eAAe;yBAEV,MAAM,YACV;QACR,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,mBAAmB,CAAC;KAC9B;;IAuDH,+BAA+B;uBAEvB,MAAM,gBACE,MAAM,YACV;QACR,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,mBAAmB,CAAC;KAC9B;4BAmBqB,MAAM;oBAYd,MAAM;iCAIO,mBAAmB,GAAG,mBAAmB,EAAE;IAmGxE,yCAAyC;kCAEjC,MAAM,aACD,mBAAmB,GAC7B,mBAAmB,EAAE;CA4DzB,CAAC"}
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,GACpB,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"}
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.300",
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",
@@ -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
- loadAd(
68
- placementUid: string,
69
- options?: {
70
- placementName?: string;
71
- region?: string;
72
- gcoder?: AdWhaleRewardGcoder;
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
 
package/src/index.ts CHANGED
@@ -55,6 +55,8 @@ export type {
55
55
  AdWhaleRewardErrorEvent,
56
56
  AdWhaleRewardUserRewardedEvent,
57
57
  AdWhaleRewardEvents,
58
+ AdWhaleRewardGcoder,
59
+ AdWhaleRewardLoadOptions,
58
60
  } from './AdWhaleRewardAd';
59
61
 
60
62