@1selfworld/adchain-sdk-react-native 1.0.24 → 1.0.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -15
- package/adchain-sdk-react-native.podspec +1 -1
- package/android/build.gradle +1 -1
- package/package.json +1 -1
- package/plugin/src/withAdchainIOS.js +4 -4
package/README.md
CHANGED
|
@@ -5,16 +5,20 @@ React Native 및 Expo를 위한 AdChain SDK입니다.
|
|
|
5
5
|
## 🚨 중요 공지
|
|
6
6
|
|
|
7
7
|
### Expo Go 미지원
|
|
8
|
+
|
|
8
9
|
이 SDK는 네이티브 코드를 포함하고 있어 **Expo Go에서 작동하지 않습니다**.
|
|
9
10
|
|
|
10
11
|
반드시 다음 방법을 사용하세요:
|
|
12
|
+
|
|
11
13
|
- ✅ Development Build: `npx expo run:android` 또는 `npx expo run:ios`
|
|
12
14
|
- ✅ EAS Build: `eas build --profile development`
|
|
13
15
|
|
|
14
16
|
### 🔐 보안 주의사항
|
|
17
|
+
|
|
15
18
|
app.json에 저장된 API 키는 앱 번들에 포함됩니다.
|
|
16
19
|
|
|
17
20
|
**권장사항:**
|
|
21
|
+
|
|
18
22
|
- ✅ **개발/테스트:** app.json 사용 가능
|
|
19
23
|
- ⚠️ **프로덕션:** 환경별 키 분리 권장
|
|
20
24
|
- Android: `buildConfigField` 사용
|
|
@@ -22,6 +26,7 @@ app.json에 저장된 API 키는 앱 번들에 포함됩니다.
|
|
|
22
26
|
- ❌ **절대 금지:** Private API 키, 결제/인증 비밀키 노출
|
|
23
27
|
|
|
24
28
|
**대안:**
|
|
29
|
+
|
|
25
30
|
```typescript
|
|
26
31
|
// 런타임에 서버에서 토큰 발급
|
|
27
32
|
const token = await fetchTokenFromServer();
|
|
@@ -84,6 +89,7 @@ export default function App() {
|
|
|
84
89
|
## API 레퍼런스
|
|
85
90
|
|
|
86
91
|
### 핵심 메서드
|
|
92
|
+
|
|
87
93
|
- `autoInitialize()` - app.json 설정을 사용한 자동 초기화
|
|
88
94
|
- `initialize(config)` - 수동 초기화
|
|
89
95
|
- `login(user)` - 사용자 로그인
|
|
@@ -92,14 +98,17 @@ export default function App() {
|
|
|
92
98
|
- `getCurrentUser()` - 현재 사용자 정보 조회
|
|
93
99
|
|
|
94
100
|
### 오퍼월
|
|
101
|
+
|
|
95
102
|
- `openOfferwall(placementId?)` - 오퍼월 열기
|
|
96
103
|
- `openAdjoeOfferwall(placementId?)` - ADJOE 오퍼월 열기
|
|
97
104
|
- `openOfferwallNestAds(placementId)` - NestAds 오퍼월 열기
|
|
98
105
|
|
|
99
106
|
### 임베디드 오퍼월 컴포넌트
|
|
107
|
+
|
|
100
108
|
`AdchainOfferwallView`는 탭이나 화면에 직접 임베드할 수 있는 React Native 컴포넌트입니다.
|
|
101
109
|
|
|
102
110
|
**주요 특징**:
|
|
111
|
+
|
|
103
112
|
- ✅ `placementId`만으로 서버에서 오퍼월 URL을 자동으로 가져옴
|
|
104
113
|
- ✅ `openOfferwallNestAds`와 동일한 URL 로딩 방식 사용
|
|
105
114
|
- ✅ 각 placement마다 다른 오퍼월 페이지 로드 가능
|
|
@@ -123,17 +132,20 @@ import { AdchainOfferwallView } from '@1selfworld/adchain-sdk-react-native';
|
|
|
123
132
|
```
|
|
124
133
|
|
|
125
134
|
**동작 방식**:
|
|
135
|
+
|
|
126
136
|
1. `placementId`를 입력하면 SDK가 자동으로 서버 API 호출 (`GET /v1/api/sdk/placement-url`)
|
|
127
137
|
2. 서버에서 해당 placement에 매핑된 오퍼월 URL 반환
|
|
128
138
|
3. 반환된 URL로 WebView 로드
|
|
129
139
|
|
|
130
140
|
**백버튼 이벤트 (Android, v1.0.15+)**:
|
|
141
|
+
|
|
131
142
|
- `onBackPressOnFirstPage`: WebView 스택에 페이지가 1개만 있을 때 (더 이상 뒤로갈 수 없음)
|
|
132
143
|
- `onBackNavigated`: WebView 스택에서 성공적으로 뒤로 이동했을 때
|
|
133
144
|
|
|
134
145
|
앱 개발자는 이 이벤트를 받아서 앱 종료, 탭 전환 등의 동작을 직접 구현할 수 있습니다.
|
|
135
146
|
|
|
136
147
|
### 퀴즈 & 미션
|
|
148
|
+
|
|
137
149
|
- `loadQuizList(unitId)` - 퀴즈 목록 로드
|
|
138
150
|
- `clickQuiz(unitId, quizId)` - 퀴즈 클릭
|
|
139
151
|
- `loadMissionList(unitId)` - 미션 목록 로드
|
|
@@ -141,6 +153,7 @@ import { AdchainOfferwallView } from '@1selfworld/adchain-sdk-react-native';
|
|
|
141
153
|
- `claimReward(unitId)` - 보상 수령
|
|
142
154
|
|
|
143
155
|
### 디버그
|
|
156
|
+
|
|
144
157
|
- `getUserId()` - 현재 사용자 ID 조회
|
|
145
158
|
- `getIFA()` - 광고 ID 조회
|
|
146
159
|
- `isInitialized()` - SDK 초기화 상태 확인
|
|
@@ -148,6 +161,7 @@ import { AdchainOfferwallView } from '@1selfworld/adchain-sdk-react-native';
|
|
|
148
161
|
## 🔧 기술 노트
|
|
149
162
|
|
|
150
163
|
### Swift 5.5 사용 (5.9 아님)
|
|
164
|
+
|
|
151
165
|
이 SDK는 **Swift 5.5**를 사용합니다. Swift 5.9에서 발견된 React Native 브리지의
|
|
152
166
|
선택적 매개변수 전달 문제를 피하기 위함입니다.
|
|
153
167
|
|
|
@@ -155,15 +169,18 @@ import { AdchainOfferwallView } from '@1selfworld/adchain-sdk-react-native';
|
|
|
155
169
|
제대로 전달되지 않아 조용히 실패하는 버그를 경험했습니다.
|
|
156
170
|
|
|
157
171
|
테스트 완료 환경:
|
|
172
|
+
|
|
158
173
|
- Xcode 14.x - 15.x
|
|
159
174
|
- Swift 5.5
|
|
160
175
|
- iOS 14.0+
|
|
161
176
|
|
|
162
177
|
### Kotlin 표준 라이브러리
|
|
178
|
+
|
|
163
179
|
SDK는 네이티브 AdChain SDK에서 요구하는 `kotlin-stdlib:1.9.21`을 포함합니다.
|
|
164
180
|
버전 충돌이 발생하면 Gradle이 자동으로 호스트 앱의 버전으로 해결합니다.
|
|
165
181
|
|
|
166
182
|
### React Native 의존성
|
|
183
|
+
|
|
167
184
|
SDK는 AAR의 중복 클래스를 피하기 위해 `react-android`에 대해 `compileOnly`를 사용합니다.
|
|
168
185
|
의존성은 호스트 애플리케이션에서 제공됩니다.
|
|
169
186
|
|
|
@@ -195,56 +212,61 @@ npx expo run:ios
|
|
|
195
212
|
## 문제 해결
|
|
196
213
|
|
|
197
214
|
### "SDK not initialized" 오류
|
|
215
|
+
|
|
198
216
|
- app.json에 플러그인을 추가했는지 확인
|
|
199
217
|
- appKey와 appSecret이 올바른지 확인
|
|
200
218
|
- 다른 메서드 호출 전에 `autoInitialize()` 호출 확인
|
|
201
219
|
|
|
202
220
|
### "Expo config not found" 오류
|
|
221
|
+
|
|
203
222
|
- Expo Go를 사용 중일 가능성이 높습니다 (미지원)
|
|
204
223
|
- 사용: `npx expo run:android` 또는 `npx expo run:ios`
|
|
205
224
|
|
|
206
225
|
### "expo-constants not found" 오류
|
|
226
|
+
|
|
207
227
|
- peer dependency 설치: `npx expo install expo-constants`
|
|
208
228
|
|
|
209
229
|
### Prebuild 실패
|
|
230
|
+
|
|
210
231
|
- devDependencies에 @expo/config-plugins가 있는지 확인
|
|
211
232
|
- 시도: `rm -rf node_modules && npm install`
|
|
212
233
|
|
|
213
234
|
### JitPack not found (Android)
|
|
235
|
+
|
|
214
236
|
- settings.gradle에 maven { url "https://jitpack.io" }가 있는지 확인
|
|
215
237
|
- 인터넷 연결 확인
|
|
216
238
|
- 시도: `cd android && ./gradlew clean`
|
|
217
239
|
|
|
218
240
|
### Pod install 실패 (iOS)
|
|
241
|
+
|
|
219
242
|
- Git URL이 올바른지 확인
|
|
220
243
|
- 태그 v1.0.45가 존재하는지 확인
|
|
221
244
|
- 시도: `cd ios && rm -rf Pods Podfile.lock && pod install`
|
|
222
245
|
|
|
223
246
|
## 버전 호환성
|
|
224
247
|
|
|
225
|
-
| 패키지 버전 | Android SDK | iOS SDK | Swift | Expo SDK | 주요 변경사항
|
|
226
|
-
|
|
227
|
-
| 1.0.
|
|
228
|
-
| 1.0.
|
|
229
|
-
| 1.0.
|
|
230
|
-
| 1.0.
|
|
231
|
-
| 1.0.
|
|
232
|
-
| 1.0.
|
|
233
|
-
| 1.0.
|
|
248
|
+
| 패키지 버전 | Android SDK | iOS SDK | Swift | Expo SDK | 주요 변경사항 |
|
|
249
|
+
| ----------- | ----------- | ------- | ----- | -------- | ------------------------------------------------------------------- |
|
|
250
|
+
| 1.0.25 | v1.0.34 | v1.0.49 | 5.5 | 50-53 | Android SDK v1.0.34 + iOS SDK v1.0.49 업데이트 |
|
|
251
|
+
| 1.0.24 | v1.0.33 | v1.0.48 | 5.5 | 50-53 | iOS SDK v1.0.48 업데이트 |
|
|
252
|
+
| 1.0.23 | v1.0.33 | v1.0.47 | 5.5 | 50-53 | Android SDK v1.0.33 업데이트 |
|
|
253
|
+
| 1.0.22 | v1.0.32 | v1.0.47 | 5.5 | 50-53 | iOS SDK 버전 v1.0.47 수정 |
|
|
254
|
+
| 1.0.21 | v1.0.32 | v1.0.47 | 5.5 | 50-53 | Android SDK v1.0.32 업데이트 (JitPack 빌드 안정화) |
|
|
255
|
+
| 1.0.20 | v1.0.31 | v1.0.47 | 5.5 | 50-53 | AdchainOfferwallView placementId 단순화 (네이티브 SDK에서 URL 처리) |
|
|
256
|
+
| 1.0.19 | v1.0.30 | v1.0.46 | 5.5 | 50-53 | iOS 타입 오류 수정 (AdchainSdkConfig, AdchainSdkUser) |
|
|
257
|
+
| 1.0.18 | v1.0.30 | v1.0.46 | 5.5 | 50-53 | 네이티브 SDK 버전 업데이트 |
|
|
258
|
+
| 1.0.15 | v1.0.29 | v1.0.45 | 5.5 | 50-53 | 백버튼 이벤트, NestAds 지원 |
|
|
259
|
+
| 1.0.13 | v1.0.28 | v1.0.45 | 5.5 | 50-53 | NestAds 오퍼월 추가 |
|
|
260
|
+
| 1.0.0 | v1.0.28 | v1.0.45 | 5.5 | 50-53 | 초기 릴리즈 |
|
|
234
261
|
|
|
235
262
|
## 알려진 제한사항
|
|
236
263
|
|
|
237
264
|
### v1.0.0
|
|
265
|
+
|
|
238
266
|
- OTA 업데이트 (expo-updates) 아직 미지원 - Development Build 사용
|
|
239
267
|
- Swift 5.9 선택적 매개변수 버그 - 5.5 유지
|
|
240
268
|
- CocoaPods Trunk: AdChainSDK는 Git Pod 사용 (아직 Trunk 미등록)
|
|
241
269
|
|
|
242
|
-
### v1.1.0 계획
|
|
243
|
-
- expo-updates 폴백 지원
|
|
244
|
-
- 조건부 iOS 플러그인 (Trunk vs Git)
|
|
245
|
-
- 서버 사이드 토큰 초기화
|
|
246
|
-
- 향상된 오류 메시지
|
|
247
|
-
|
|
248
270
|
## 라이선스
|
|
249
271
|
|
|
250
272
|
Proprietary
|
package/android/build.gradle
CHANGED
|
@@ -35,5 +35,5 @@ dependencies {
|
|
|
35
35
|
implementation 'com.facebook.react:react-native:+'
|
|
36
36
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.21"
|
|
37
37
|
// AdChain Android SDK via JitPack
|
|
38
|
-
implementation 'com.github.1selfworld-labs:adchain-sdk-android:v1.0.
|
|
38
|
+
implementation 'com.github.1selfworld-labs:adchain-sdk-android:v1.0.34'
|
|
39
39
|
}
|
package/package.json
CHANGED
|
@@ -28,10 +28,10 @@ function withAdchainIOS(config) {
|
|
|
28
28
|
if (targetMatch) {
|
|
29
29
|
const targetName = targetMatch[1];
|
|
30
30
|
const podDeclaration = `
|
|
31
|
-
# AdChain SDK (Git Pod) - v1.0.
|
|
31
|
+
# AdChain SDK (Git Pod) - v1.0.49
|
|
32
32
|
# CocoaPods Trunk에 없으므로 Git 방식 사용
|
|
33
33
|
# Swift 5.5 (5.9 optional 파라미터 버그 회피)
|
|
34
|
-
pod 'AdChainSDK', :git => 'https://github.com/1selfworld-labs/adchain-sdk-ios-release.git', :tag => 'v1.0.
|
|
34
|
+
pod 'AdChainSDK', :git => 'https://github.com/1selfworld-labs/adchain-sdk-ios-release.git', :tag => 'v1.0.49'
|
|
35
35
|
`;
|
|
36
36
|
|
|
37
37
|
podfile = podfile.replace(
|
|
@@ -41,8 +41,8 @@ function withAdchainIOS(config) {
|
|
|
41
41
|
} else {
|
|
42
42
|
// Fallback
|
|
43
43
|
const podDeclaration = `
|
|
44
|
-
# AdChain SDK (Git Pod) - v1.0.
|
|
45
|
-
pod 'AdChainSDK', :git => 'https://github.com/1selfworld-labs/adchain-sdk-ios-release.git', :tag => 'v1.0.
|
|
44
|
+
# AdChain SDK (Git Pod) - v1.0.49
|
|
45
|
+
pod 'AdChainSDK', :git => 'https://github.com/1selfworld-labs/adchain-sdk-ios-release.git', :tag => 'v1.0.49'
|
|
46
46
|
`;
|
|
47
47
|
|
|
48
48
|
podfile = podfile.replace(
|