@hayanmind/monetai-react-native 0.2.5 → 0.2.8
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/android/build.gradle +1 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/AndroidManifestNew.xml +2 -0
- package/android/src/main/java/com/hayanmind/monetaireactnative/MonetaiReactNativeModule.kt +312 -4
- package/lib/commonjs/MonetaiSDK.js +6 -8
- package/lib/commonjs/MonetaiSDK.js.map +1 -1
- package/lib/commonjs/lib.js +2 -2
- package/lib/module/MonetaiSDK.js +6 -8
- package/lib/module/MonetaiSDK.js.map +1 -1
- package/lib/module/lib.js +2 -2
- package/lib/typescript/commonjs/src/MonetaiSDK.d.ts +2 -2
- package/lib/typescript/commonjs/src/MonetaiSDK.d.ts.map +1 -1
- package/lib/typescript/module/src/MonetaiSDK.d.ts +2 -2
- package/lib/typescript/module/src/MonetaiSDK.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/MonetaiSDK.ts +6 -8
package/android/build.gradle
CHANGED
|
@@ -77,5 +77,6 @@ def kotlin_version = getExtOrDefault("kotlinVersion")
|
|
|
77
77
|
dependencies {
|
|
78
78
|
implementation "com.facebook.react:react-android"
|
|
79
79
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
80
|
+
implementation "com.android.billingclient:billing-ktx:6.1.0"
|
|
80
81
|
}
|
|
81
82
|
|
|
@@ -3,10 +3,297 @@ package com.hayanmind.monetaireactnative
|
|
|
3
3
|
import android.content.Context
|
|
4
4
|
import android.content.SharedPreferences
|
|
5
5
|
import android.util.Log
|
|
6
|
+
import com.android.billingclient.api.*
|
|
6
7
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
7
8
|
import com.facebook.react.bridge.ReactContextBaseJavaModule
|
|
8
9
|
import com.facebook.react.bridge.ReactMethod
|
|
9
10
|
import com.facebook.react.bridge.Promise
|
|
11
|
+
import org.json.JSONObject
|
|
12
|
+
import org.json.JSONArray
|
|
13
|
+
import java.net.HttpURLConnection
|
|
14
|
+
import java.net.URL
|
|
15
|
+
import java.util.concurrent.Executors
|
|
16
|
+
import kotlinx.coroutines.CoroutineScope
|
|
17
|
+
import kotlinx.coroutines.Dispatchers
|
|
18
|
+
import kotlinx.coroutines.launch
|
|
19
|
+
import kotlinx.coroutines.withContext
|
|
20
|
+
import kotlinx.coroutines.CompletableDeferred
|
|
21
|
+
|
|
22
|
+
// 하드코딩된 엔드포인트 URL
|
|
23
|
+
private const val MAPPING_URL = "https://monetai-api-414410537412.us-central1.run.app/sdk/transaction-id-to-user-id/android"
|
|
24
|
+
private const val RECEIPT_VALIDATION_URL = "https://monetai-api-414410537412.us-central1.run.app/sdk/transaction-id-to-user-id/android/receipt"
|
|
25
|
+
|
|
26
|
+
// MARK: - 영수증 검증 및 전송 로직
|
|
27
|
+
class ReceiptValidator private constructor(private val context: Context) {
|
|
28
|
+
companion object {
|
|
29
|
+
@Volatile
|
|
30
|
+
private var INSTANCE: ReceiptValidator? = null
|
|
31
|
+
|
|
32
|
+
fun getInstance(context: Context): ReceiptValidator {
|
|
33
|
+
return INSTANCE ?: synchronized(this) {
|
|
34
|
+
INSTANCE ?: ReceiptValidator(context.applicationContext).also { INSTANCE = it }
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
private val sharedPreferences: SharedPreferences by lazy {
|
|
40
|
+
context.getSharedPreferences("MonetaiPrefs", Context.MODE_PRIVATE)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
suspend fun sendReceipt() {
|
|
44
|
+
Log.d("Monetai", "[Debug] sendReceipt 시작")
|
|
45
|
+
|
|
46
|
+
val userId = sharedPreferences.getString("MonetaiAppAccountToken", null)
|
|
47
|
+
val packageName = context.packageName
|
|
48
|
+
val sdkKey = sharedPreferences.getString("MonetaiSdkKey", null)
|
|
49
|
+
|
|
50
|
+
Log.d("Monetai", "[Debug] userId: ${if (userId != null) "존재" else "null"}")
|
|
51
|
+
Log.d("Monetai", "[Debug] packageName: $packageName")
|
|
52
|
+
Log.d("Monetai", "[Debug] sdkKey: ${if (sdkKey != null) "존재" else "null"}")
|
|
53
|
+
|
|
54
|
+
if (userId == null || sdkKey == null) {
|
|
55
|
+
val errorMsg = "필요한 정보가 누락되었습니다 - userId: ${userId != null}, sdkKey: ${sdkKey != null}"
|
|
56
|
+
Log.e("Monetai", "[Error] $errorMsg")
|
|
57
|
+
throw IllegalStateException(errorMsg)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
Log.d("Monetai", "[Debug] queryAndSyncPurchaseHistory 호출")
|
|
61
|
+
// queryPurchaseHistoryAsync를 사용해서 모든 구매 내역 조회
|
|
62
|
+
queryAndSyncPurchaseHistory(userId, packageName, sdkKey)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
private suspend fun queryAndSyncPurchaseHistory(userId: String, packageName: String, sdkKey: String) {
|
|
66
|
+
Log.d("Monetai", "[Debug] queryAndSyncPurchaseHistory 시작")
|
|
67
|
+
|
|
68
|
+
val deferred = CompletableDeferred<Unit>()
|
|
69
|
+
|
|
70
|
+
val billingClient = BillingClient.newBuilder(context)
|
|
71
|
+
.setListener { billingResult, purchases ->
|
|
72
|
+
// 구매 내역 조회용이므로 더미 리스너
|
|
73
|
+
Log.d("Monetai", "[Debug] 더미 리스너 호출됨: ${billingResult.responseCode}")
|
|
74
|
+
}
|
|
75
|
+
.enablePendingPurchases()
|
|
76
|
+
.build()
|
|
77
|
+
|
|
78
|
+
billingClient.startConnection(object : BillingClientStateListener {
|
|
79
|
+
override fun onBillingSetupFinished(billingResult: BillingResult) {
|
|
80
|
+
Log.d("Monetai", "[Debug] onBillingSetupFinished: ${billingResult.responseCode}")
|
|
81
|
+
|
|
82
|
+
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
|
|
83
|
+
Log.d("Monetai", "[Debug] 인앱 구매 내역 조회 시작")
|
|
84
|
+
// 인앱 구매 내역 조회
|
|
85
|
+
val inappParams = QueryPurchaseHistoryParams.newBuilder()
|
|
86
|
+
.setProductType(BillingClient.ProductType.INAPP)
|
|
87
|
+
.build()
|
|
88
|
+
|
|
89
|
+
billingClient.queryPurchaseHistoryAsync(inappParams) { result1, inappPurchases ->
|
|
90
|
+
Log.d("Monetai", "[Debug] 인앱 구매 내역 조회 완료: ${result1.responseCode}, 개수: ${inappPurchases?.size ?: 0}")
|
|
91
|
+
|
|
92
|
+
// 구독 내역 조회
|
|
93
|
+
Log.d("Monetai", "[Debug] 구독 내역 조회 시작")
|
|
94
|
+
val subsParams = QueryPurchaseHistoryParams.newBuilder()
|
|
95
|
+
.setProductType(BillingClient.ProductType.SUBS)
|
|
96
|
+
.build()
|
|
97
|
+
|
|
98
|
+
billingClient.queryPurchaseHistoryAsync(subsParams) { result2, subsPurchases ->
|
|
99
|
+
try {
|
|
100
|
+
Log.d("Monetai", "[Debug] 구독 내역 조회 완료: ${result2.responseCode}, 개수: ${subsPurchases?.size ?: 0}")
|
|
101
|
+
|
|
102
|
+
val allPurchases = (inappPurchases ?: emptyList()) + (subsPurchases ?: emptyList())
|
|
103
|
+
|
|
104
|
+
// 디버깅 로그 추가
|
|
105
|
+
Log.d("Monetai", "[Debug] 전체 구매 내역 개수: ${allPurchases.size}")
|
|
106
|
+
Log.d("Monetai", "[Debug] 인앱 구매 개수: ${inappPurchases?.size ?: 0}")
|
|
107
|
+
Log.d("Monetai", "[Debug] 구독 구매 개수: ${subsPurchases?.size ?: 0}")
|
|
108
|
+
|
|
109
|
+
allPurchases.forEachIndexed { index, purchase ->
|
|
110
|
+
Log.d("Monetai", "[Debug] 구매 $index: purchaseToken=${purchase.purchaseToken}, productIds=${purchase.products}, purchaseTime=${purchase.purchaseTime}")
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (allPurchases.isNotEmpty()) {
|
|
114
|
+
sendPurchaseHistoryToServer(userId, packageName, sdkKey, allPurchases)
|
|
115
|
+
Log.d("Monetai", "[Debug] 구매 내역 서버 전송 완료")
|
|
116
|
+
} else {
|
|
117
|
+
Log.d("Monetai", "[Debug] 구매 내역이 없습니다")
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
billingClient.endConnection()
|
|
121
|
+
deferred.complete(Unit)
|
|
122
|
+
} catch (e: Exception) {
|
|
123
|
+
Log.e("Monetai", "[Error] 구매 내역 처리 중 에러: ${e.message}")
|
|
124
|
+
billingClient.endConnection()
|
|
125
|
+
deferred.completeExceptionally(e)
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
} else {
|
|
130
|
+
Log.e("Monetai", "[Error] Billing setup failed: ${billingResult.debugMessage}")
|
|
131
|
+
billingClient.endConnection()
|
|
132
|
+
deferred.completeExceptionally(Exception("Billing setup failed: ${billingResult.debugMessage}"))
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
override fun onBillingServiceDisconnected() {
|
|
137
|
+
Log.d("Monetai", "[Debug] Billing service disconnected")
|
|
138
|
+
if (!deferred.isCompleted) {
|
|
139
|
+
deferred.completeExceptionally(Exception("Billing service disconnected"))
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
})
|
|
143
|
+
|
|
144
|
+
// 콜백이 완료될 때까지 기다림
|
|
145
|
+
deferred.await()
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
private fun sendPurchaseHistoryToServer(
|
|
149
|
+
userId: String,
|
|
150
|
+
packageName: String,
|
|
151
|
+
sdkKey: String,
|
|
152
|
+
purchases: List<PurchaseHistoryRecord>
|
|
153
|
+
) {
|
|
154
|
+
val purchasesList = purchases.map { purchase ->
|
|
155
|
+
JSONObject().apply {
|
|
156
|
+
put("purchaseToken", purchase.purchaseToken)
|
|
157
|
+
// PurchaseHistoryRecord에는 orderId가 없음
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
val payload = JSONObject().apply {
|
|
162
|
+
put("packageName", packageName)
|
|
163
|
+
put("userId", userId)
|
|
164
|
+
put("sdkKey", sdkKey)
|
|
165
|
+
put("purchases", JSONArray(purchasesList))
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
CoroutineScope(Dispatchers.IO).launch {
|
|
169
|
+
try {
|
|
170
|
+
val url = URL(RECEIPT_VALIDATION_URL)
|
|
171
|
+
val connection = url.openConnection() as HttpURLConnection
|
|
172
|
+
connection.requestMethod = "POST"
|
|
173
|
+
connection.setRequestProperty("Content-Type", "application/json")
|
|
174
|
+
connection.doOutput = true
|
|
175
|
+
|
|
176
|
+
connection.outputStream.use { os ->
|
|
177
|
+
os.write(payload.toString().toByteArray())
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
val responseCode = connection.responseCode
|
|
181
|
+
Log.d("Monetai", "[Debug] 구매 내역 동기화 응답: $responseCode")
|
|
182
|
+
} catch (e: Exception) {
|
|
183
|
+
Log.e("Monetai", "[Error] 구매 내역 동기화 실패: ${e.message}")
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// MARK: - Billing Client Manager
|
|
190
|
+
class BillingManager private constructor(private val context: Context) :
|
|
191
|
+
PurchasesUpdatedListener, BillingClientStateListener {
|
|
192
|
+
|
|
193
|
+
companion object {
|
|
194
|
+
@Volatile
|
|
195
|
+
private var INSTANCE: BillingManager? = null
|
|
196
|
+
|
|
197
|
+
fun getInstance(context: Context): BillingManager {
|
|
198
|
+
return INSTANCE ?: synchronized(this) {
|
|
199
|
+
INSTANCE ?: BillingManager(context.applicationContext).also { INSTANCE = it }
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
private var billingClient: BillingClient? = null
|
|
205
|
+
private val sharedPreferences: SharedPreferences by lazy {
|
|
206
|
+
context.getSharedPreferences("MonetaiPrefs", Context.MODE_PRIVATE)
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
fun startObserving() {
|
|
210
|
+
Log.d("Monetai", "[Debug] BillingManager startObserving")
|
|
211
|
+
|
|
212
|
+
billingClient = BillingClient.newBuilder(context)
|
|
213
|
+
.setListener(this)
|
|
214
|
+
.enablePendingPurchases()
|
|
215
|
+
.build()
|
|
216
|
+
|
|
217
|
+
billingClient?.startConnection(this)
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
override fun onBillingSetupFinished(billingResult: BillingResult) {
|
|
221
|
+
Log.d("Monetai", "[Debug] onBillingSetupFinished: ${billingResult.responseCode}")
|
|
222
|
+
|
|
223
|
+
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
|
|
224
|
+
Log.d("Monetai", "[Debug] Billing client ready - waiting for new purchases")
|
|
225
|
+
} else {
|
|
226
|
+
Log.e("Monetai", "[Error] Billing setup failed: ${billingResult.debugMessage}")
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
override fun onBillingServiceDisconnected() {
|
|
231
|
+
Log.d("Monetai", "[Debug] onBillingServiceDisconnected")
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
override fun onPurchasesUpdated(billingResult: BillingResult, purchases: MutableList<Purchase>?) {
|
|
235
|
+
Log.d("Monetai", "[Debug] onPurchasesUpdated: ${billingResult.responseCode}, count: ${purchases?.size ?: 0}")
|
|
236
|
+
|
|
237
|
+
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK && purchases != null) {
|
|
238
|
+
for (purchase in purchases) {
|
|
239
|
+
handlePurchase(purchase)
|
|
240
|
+
}
|
|
241
|
+
} else {
|
|
242
|
+
Log.e("Monetai", "[Error] Purchase update failed: ${billingResult.debugMessage}")
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
private fun handlePurchase(purchase: Purchase) {
|
|
247
|
+
val purchaseToken = purchase.purchaseToken
|
|
248
|
+
|
|
249
|
+
Log.d("Monetai", "[Debug] handlePurchase: purchaseToken=$purchaseToken, state=${purchase.purchaseState}")
|
|
250
|
+
|
|
251
|
+
if (purchase.purchaseState == Purchase.PurchaseState.PURCHASED) {
|
|
252
|
+
sendMapping(purchaseToken)
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
private fun sendMapping(purchaseToken: String) {
|
|
257
|
+
Log.d("Monetai", "[Debug] sendMapping: $purchaseToken")
|
|
258
|
+
|
|
259
|
+
val userId = sharedPreferences.getString("MonetaiAppAccountToken", null)
|
|
260
|
+
val packageName = context.packageName
|
|
261
|
+
val sdkKey = sharedPreferences.getString("MonetaiSdkKey", null)
|
|
262
|
+
|
|
263
|
+
if (userId == null || sdkKey == null) {
|
|
264
|
+
Log.e("Monetai", "[Error] no userId or sdkKey set")
|
|
265
|
+
return
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
val payload = JSONObject().apply {
|
|
269
|
+
put("purchaseToken", purchaseToken)
|
|
270
|
+
put("packageName", packageName)
|
|
271
|
+
put("userId", userId)
|
|
272
|
+
put("sdkKey", sdkKey)
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
Log.d("Monetai", "[Debug] POST to $MAPPING_URL: $payload")
|
|
276
|
+
|
|
277
|
+
CoroutineScope(Dispatchers.IO).launch {
|
|
278
|
+
try {
|
|
279
|
+
val url = URL(MAPPING_URL)
|
|
280
|
+
val connection = url.openConnection() as HttpURLConnection
|
|
281
|
+
connection.requestMethod = "POST"
|
|
282
|
+
connection.setRequestProperty("Content-Type", "application/json")
|
|
283
|
+
connection.doOutput = true
|
|
284
|
+
|
|
285
|
+
connection.outputStream.use { os ->
|
|
286
|
+
os.write(payload.toString().toByteArray())
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
val responseCode = connection.responseCode
|
|
290
|
+
Log.d("Monetai", "[Debug] Mapping POST succeeded: $responseCode")
|
|
291
|
+
} catch (e: Exception) {
|
|
292
|
+
Log.e("Monetai", "[Error] Mapping POST failed: ${e.message}")
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
10
297
|
|
|
11
298
|
class MonetaiReactNativeModule(reactContext: ReactApplicationContext) :
|
|
12
299
|
ReactContextBaseJavaModule(reactContext) {
|
|
@@ -80,14 +367,35 @@ class MonetaiReactNativeModule(reactContext: ReactApplicationContext) :
|
|
|
80
367
|
|
|
81
368
|
@ReactMethod
|
|
82
369
|
fun startObserving(useStoreKit2: Boolean, promise: Promise) {
|
|
83
|
-
|
|
84
|
-
|
|
370
|
+
try {
|
|
371
|
+
Log.d(TAG, "startObserving: Android에서 Google Play Billing 시작")
|
|
372
|
+
BillingManager.getInstance(reactApplicationContext).startObserving()
|
|
373
|
+
promise.resolve(null)
|
|
374
|
+
} catch (e: Exception) {
|
|
375
|
+
promise.reject("ERROR_START_OBSERVING", "구매 관찰 시작 실패", e)
|
|
376
|
+
}
|
|
85
377
|
}
|
|
86
378
|
|
|
87
379
|
@ReactMethod
|
|
88
380
|
fun sendReceipt(promise: Promise) {
|
|
89
|
-
|
|
90
|
-
|
|
381
|
+
try {
|
|
382
|
+
Log.d(TAG, "sendReceipt: Android에서 구매 영수증 전송 시작")
|
|
383
|
+
Log.d(TAG, "sendReceipt: ReceiptValidator.sendReceipt() 호출")
|
|
384
|
+
|
|
385
|
+
CoroutineScope(Dispatchers.IO).launch {
|
|
386
|
+
try {
|
|
387
|
+
ReceiptValidator.getInstance(reactApplicationContext).sendReceipt()
|
|
388
|
+
Log.d(TAG, "sendReceipt: ReceiptValidator.sendReceipt() 완료")
|
|
389
|
+
promise.resolve(null)
|
|
390
|
+
} catch (e: Exception) {
|
|
391
|
+
Log.e(TAG, "sendReceipt: 코루틴 내부 에러 발생 - ${e.message}", e)
|
|
392
|
+
promise.reject("ERROR_SEND_RECEIPT", "영수증 전송 실패: ${e.message}", e)
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
} catch (e: Exception) {
|
|
396
|
+
Log.e(TAG, "sendReceipt: 에러 발생 - ${e.message}", e)
|
|
397
|
+
promise.reject("ERROR_SEND_RECEIPT", "영수증 전송 실패: ${e.message}", e)
|
|
398
|
+
}
|
|
91
399
|
}
|
|
92
400
|
|
|
93
401
|
@ReactMethod
|
|
@@ -45,8 +45,8 @@ class MonetaiSDK {
|
|
|
45
45
|
* 모넷AI SDK를 초기화합니다
|
|
46
46
|
* @param userId 사용자 고유 ID (필수)
|
|
47
47
|
* @param useStoreKit2 StoreKit2를 사용할지 여부 (기본값: false)
|
|
48
|
-
* -
|
|
49
|
-
* -
|
|
48
|
+
* - iOS: true는 iOS 15+ 기기에서 StoreKit2 사용 (권장), false는 StoreKit1 사용
|
|
49
|
+
* - Android: Google Play Billing Library 사용 (useStoreKit2 값 무시)
|
|
50
50
|
* @returns 성공 시 Promise<void>
|
|
51
51
|
*/
|
|
52
52
|
async initialize({
|
|
@@ -70,12 +70,10 @@ class MonetaiSDK {
|
|
|
70
70
|
// 트랜잭션 관찰 시작
|
|
71
71
|
await MonetaiReactNative.startObserving(useStoreKit2);
|
|
72
72
|
|
|
73
|
-
//
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
});
|
|
78
|
-
}
|
|
73
|
+
// 영수증 전송 (iOS는 App Store 영수증, Android는 Google Play 영수증)
|
|
74
|
+
MonetaiReactNative.sendReceipt().catch(err => {
|
|
75
|
+
console.error('Failed to send receipt', err);
|
|
76
|
+
});
|
|
79
77
|
const result = await ApiRequest.initialize({
|
|
80
78
|
sdkKey,
|
|
81
79
|
userId
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_mitt","_interopRequireDefault","_dayjs","_ApiRequest","_interopRequireWildcard","ApiRequest","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","LINKING_ERROR","Platform","select","ios","MonetaiReactNative","NativeModules","Proxy","Error","MonetaiSDK","exposureTimeSec","initialized","pendingEvents","emitter","mitt","getEmitter","getExposureTimeSec","initialize","sdkKey","userId","useStoreKit2","setSdkKey","setUserId","startObserving","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_mitt","_interopRequireDefault","_dayjs","_ApiRequest","_interopRequireWildcard","ApiRequest","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","LINKING_ERROR","Platform","select","ios","MonetaiReactNative","NativeModules","Proxy","Error","MonetaiSDK","exposureTimeSec","initialized","pendingEvents","emitter","mitt","getEmitter","getExposureTimeSec","initialize","sdkKey","userId","useStoreKit2","setSdkKey","setUserId","startObserving","sendReceipt","catch","err","console","error","result","campaign","exposure_time_sec","pendingPromises","map","eventName","value","createdAt","createEvent","log","Promise","all","then","emit","organizationId","platform","version","group","logEvent","getSdkKey","getUserId","push","Date","predict","prediction","discountInfo","getAppUserDiscount","hasActiveDiscount","app_user_id","dayjs","ended_at","isAfter","startedAt","endedAt","clone","add","createAppUserDiscount","toDate","getInitialized","reset","monetaiSDK","_default","exports"],"sourceRoot":"../../src","sources":["MonetaiSDK.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/commonjs/lib.js
CHANGED
|
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.getSDKVersion = getSDKVersion;
|
|
7
7
|
function getSDKVersion() {
|
|
8
8
|
// __SDK_VERSION__이 정의되어 있으면 해당 값을 사용
|
|
9
|
-
if (typeof "0.2.
|
|
10
|
-
return "0.2.
|
|
9
|
+
if (typeof "0.2.8" === 'string') {
|
|
10
|
+
return "0.2.8";
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
// 그렇지 않으면, package.json을 lazy하게 불러와 version을 반환
|
package/lib/module/MonetaiSDK.js
CHANGED
|
@@ -39,8 +39,8 @@ class MonetaiSDK {
|
|
|
39
39
|
* 모넷AI SDK를 초기화합니다
|
|
40
40
|
* @param userId 사용자 고유 ID (필수)
|
|
41
41
|
* @param useStoreKit2 StoreKit2를 사용할지 여부 (기본값: false)
|
|
42
|
-
* -
|
|
43
|
-
* -
|
|
42
|
+
* - iOS: true는 iOS 15+ 기기에서 StoreKit2 사용 (권장), false는 StoreKit1 사용
|
|
43
|
+
* - Android: Google Play Billing Library 사용 (useStoreKit2 값 무시)
|
|
44
44
|
* @returns 성공 시 Promise<void>
|
|
45
45
|
*/
|
|
46
46
|
async initialize({
|
|
@@ -64,12 +64,10 @@ class MonetaiSDK {
|
|
|
64
64
|
// 트랜잭션 관찰 시작
|
|
65
65
|
await MonetaiReactNative.startObserving(useStoreKit2);
|
|
66
66
|
|
|
67
|
-
//
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
});
|
|
72
|
-
}
|
|
67
|
+
// 영수증 전송 (iOS는 App Store 영수증, Android는 Google Play 영수증)
|
|
68
|
+
MonetaiReactNative.sendReceipt().catch(err => {
|
|
69
|
+
console.error('Failed to send receipt', err);
|
|
70
|
+
});
|
|
73
71
|
const result = await ApiRequest.initialize({
|
|
74
72
|
sdkKey,
|
|
75
73
|
userId
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeModules","Platform","mitt","dayjs","ApiRequest","createAppUserDiscount","LINKING_ERROR","select","ios","default","MonetaiReactNative","Proxy","get","Error","MonetaiSDK","exposureTimeSec","initialized","pendingEvents","emitter","getEmitter","getExposureTimeSec","initialize","sdkKey","userId","useStoreKit2","setSdkKey","setUserId","startObserving","
|
|
1
|
+
{"version":3,"names":["NativeModules","Platform","mitt","dayjs","ApiRequest","createAppUserDiscount","LINKING_ERROR","select","ios","default","MonetaiReactNative","Proxy","get","Error","MonetaiSDK","exposureTimeSec","initialized","pendingEvents","emitter","getEmitter","getExposureTimeSec","initialize","sdkKey","userId","useStoreKit2","setSdkKey","setUserId","startObserving","sendReceipt","catch","err","console","error","result","campaign","exposure_time_sec","pendingPromises","map","eventName","value","createdAt","createEvent","log","Promise","all","then","emit","organizationId","platform","version","group","logEvent","getSdkKey","getUserId","push","Date","predict","prediction","discountInfo","getAppUserDiscount","hasActiveDiscount","app_user_id","ended_at","isAfter","startedAt","endedAt","clone","add","toDate","getInitialized","reset","monetaiSDK"],"sourceRoot":"../../src","sources":["MonetaiSDK.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/lib.js
CHANGED
|
@@ -13,8 +13,8 @@ declare class MonetaiSDK {
|
|
|
13
13
|
* 모넷AI SDK를 초기화합니다
|
|
14
14
|
* @param userId 사용자 고유 ID (필수)
|
|
15
15
|
* @param useStoreKit2 StoreKit2를 사용할지 여부 (기본값: false)
|
|
16
|
-
* -
|
|
17
|
-
* -
|
|
16
|
+
* - iOS: true는 iOS 15+ 기기에서 StoreKit2 사용 (권장), false는 StoreKit1 사용
|
|
17
|
+
* - Android: Google Play Billing Library 사용 (useStoreKit2 값 무시)
|
|
18
18
|
* @returns 성공 시 Promise<void>
|
|
19
19
|
*/
|
|
20
20
|
initialize({ sdkKey, userId, useStoreKit2, }: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonetaiSDK.d.ts","sourceRoot":"","sources":["../../../../src/MonetaiSDK.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAqB/D,KAAK,aAAa,GAAG;IACnB,kBAAkB,EAAE,IAAI,CAAC;CAC1B,CAAC;AAEF,cAAM,UAAU;IACd,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,WAAW,CAAS;IAG5B,OAAO,CAAC,aAAa,CAIb;IAGR,OAAO,CAAC,OAAO,CAAyB;IAGjC,UAAU;IAIV,kBAAkB;IAIzB;;;;;;;OAOG;IACU,UAAU,CAAC,EACtB,MAAM,EACN,MAAM,EACN,YAAoB,GACrB,EAAE;QACD,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,GAAG,OAAO,CAAC;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,cAAc,CAAC;QACzB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;KAC3B,CAAC;
|
|
1
|
+
{"version":3,"file":"MonetaiSDK.d.ts","sourceRoot":"","sources":["../../../../src/MonetaiSDK.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAqB/D,KAAK,aAAa,GAAG;IACnB,kBAAkB,EAAE,IAAI,CAAC;CAC1B,CAAC;AAEF,cAAM,UAAU;IACd,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,WAAW,CAAS;IAG5B,OAAO,CAAC,aAAa,CAIb;IAGR,OAAO,CAAC,OAAO,CAAyB;IAGjC,UAAU;IAIV,kBAAkB;IAIzB;;;;;;;OAOG;IACU,UAAU,CAAC,EACtB,MAAM,EACN,MAAM,EACN,YAAoB,GACrB,EAAE;QACD,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,GAAG,OAAO,CAAC;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,cAAc,CAAC;QACzB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;KAC3B,CAAC;IAuDW,QAAQ,CAAC,EAAE,SAAS,EAAE,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;IAmB7C,OAAO,IAAI,OAAO,CAAC;QAC9B,UAAU,EAAE,aAAa,CAAC;QAC1B,SAAS,EAAE,WAAW,CAAC;KACxB,CAAC;IAuCK,cAAc;IAIR,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAUnC,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAUnC,KAAK;CAInB;AAGD,QAAA,MAAM,UAAU,YAAmB,CAAC;AACpC,eAAe,UAAU,CAAC"}
|
|
@@ -13,8 +13,8 @@ declare class MonetaiSDK {
|
|
|
13
13
|
* 모넷AI SDK를 초기화합니다
|
|
14
14
|
* @param userId 사용자 고유 ID (필수)
|
|
15
15
|
* @param useStoreKit2 StoreKit2를 사용할지 여부 (기본값: false)
|
|
16
|
-
* -
|
|
17
|
-
* -
|
|
16
|
+
* - iOS: true는 iOS 15+ 기기에서 StoreKit2 사용 (권장), false는 StoreKit1 사용
|
|
17
|
+
* - Android: Google Play Billing Library 사용 (useStoreKit2 값 무시)
|
|
18
18
|
* @returns 성공 시 Promise<void>
|
|
19
19
|
*/
|
|
20
20
|
initialize({ sdkKey, userId, useStoreKit2, }: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonetaiSDK.d.ts","sourceRoot":"","sources":["../../../../src/MonetaiSDK.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAqB/D,KAAK,aAAa,GAAG;IACnB,kBAAkB,EAAE,IAAI,CAAC;CAC1B,CAAC;AAEF,cAAM,UAAU;IACd,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,WAAW,CAAS;IAG5B,OAAO,CAAC,aAAa,CAIb;IAGR,OAAO,CAAC,OAAO,CAAyB;IAGjC,UAAU;IAIV,kBAAkB;IAIzB;;;;;;;OAOG;IACU,UAAU,CAAC,EACtB,MAAM,EACN,MAAM,EACN,YAAoB,GACrB,EAAE;QACD,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,GAAG,OAAO,CAAC;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,cAAc,CAAC;QACzB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;KAC3B,CAAC;
|
|
1
|
+
{"version":3,"file":"MonetaiSDK.d.ts","sourceRoot":"","sources":["../../../../src/MonetaiSDK.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAqB/D,KAAK,aAAa,GAAG;IACnB,kBAAkB,EAAE,IAAI,CAAC;CAC1B,CAAC;AAEF,cAAM,UAAU;IACd,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,WAAW,CAAS;IAG5B,OAAO,CAAC,aAAa,CAIb;IAGR,OAAO,CAAC,OAAO,CAAyB;IAGjC,UAAU;IAIV,kBAAkB;IAIzB;;;;;;;OAOG;IACU,UAAU,CAAC,EACtB,MAAM,EACN,MAAM,EACN,YAAoB,GACrB,EAAE;QACD,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,GAAG,OAAO,CAAC;QACV,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,cAAc,CAAC;QACzB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;KAC3B,CAAC;IAuDW,QAAQ,CAAC,EAAE,SAAS,EAAE,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;IAmB7C,OAAO,IAAI,OAAO,CAAC;QAC9B,UAAU,EAAE,aAAa,CAAC;QAC1B,SAAS,EAAE,WAAW,CAAC;KACxB,CAAC;IAuCK,cAAc;IAIR,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAUnC,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAUnC,KAAK;CAInB;AAGD,QAAA,MAAM,UAAU,YAAmB,CAAC;AACpC,eAAe,UAAU,CAAC"}
|
package/package.json
CHANGED
package/src/MonetaiSDK.ts
CHANGED
|
@@ -54,8 +54,8 @@ class MonetaiSDK {
|
|
|
54
54
|
* 모넷AI SDK를 초기화합니다
|
|
55
55
|
* @param userId 사용자 고유 ID (필수)
|
|
56
56
|
* @param useStoreKit2 StoreKit2를 사용할지 여부 (기본값: false)
|
|
57
|
-
* -
|
|
58
|
-
* -
|
|
57
|
+
* - iOS: true는 iOS 15+ 기기에서 StoreKit2 사용 (권장), false는 StoreKit1 사용
|
|
58
|
+
* - Android: Google Play Billing Library 사용 (useStoreKit2 값 무시)
|
|
59
59
|
* @returns 성공 시 Promise<void>
|
|
60
60
|
*/
|
|
61
61
|
public async initialize({
|
|
@@ -89,12 +89,10 @@ class MonetaiSDK {
|
|
|
89
89
|
// 트랜잭션 관찰 시작
|
|
90
90
|
await MonetaiReactNative.startObserving(useStoreKit2);
|
|
91
91
|
|
|
92
|
-
//
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
});
|
|
97
|
-
}
|
|
92
|
+
// 영수증 전송 (iOS는 App Store 영수증, Android는 Google Play 영수증)
|
|
93
|
+
MonetaiReactNative.sendReceipt().catch((err: any) => {
|
|
94
|
+
console.error('Failed to send receipt', err);
|
|
95
|
+
});
|
|
98
96
|
|
|
99
97
|
const result = await ApiRequest.initialize({ sdkKey, userId });
|
|
100
98
|
this.exposureTimeSec = result.campaign?.exposure_time_sec ?? null;
|