@1selfworld/adchain-sdk-react-native 1.0.25 → 1.0.27-rc.2
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/adchain-sdk-react-native.podspec +1 -1
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/adchain/exposdk/AdchainOfferwallViewManager.kt +29 -31
- package/android/src/main/java/com/adchain/exposdk/AdchainRNLog.kt +101 -0
- package/android/src/main/java/com/adchain/exposdk/AdchainRNTelemetry.kt +83 -0
- package/android/src/main/java/com/adchain/exposdk/AdchainSdkModule.kt +51 -11
- package/ios/AdchainRNLog.swift +69 -0
- package/ios/AdchainSdk.swift +33 -15
- package/lib/module/index.js +9 -0
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/index.d.ts +9 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/plugin/src/withAdchainIOS.js +4 -4
- package/src/index.tsx +21 -0
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.36-rc.2'
|
|
39
39
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
package com.adchain.exposdk
|
|
2
2
|
|
|
3
|
-
import android.util.Log
|
|
4
3
|
import com.facebook.react.bridge.Arguments
|
|
5
4
|
import com.facebook.react.bridge.ReactContext
|
|
6
5
|
import com.facebook.react.bridge.ReadableArray
|
|
@@ -21,7 +20,7 @@ import kotlinx.coroutines.withContext
|
|
|
21
20
|
class AdchainOfferwallViewManager : SimpleViewManager<AdchainOfferwallView>() {
|
|
22
21
|
|
|
23
22
|
companion object {
|
|
24
|
-
private const val TAG = "
|
|
23
|
+
private const val TAG = "OfferwallVM"
|
|
25
24
|
private const val REACT_CLASS = "AdchainOfferwallView"
|
|
26
25
|
private const val COMMAND_LOAD_OFFERWALL = 1
|
|
27
26
|
private const val COMMAND_HANDLE_BACK_PRESS = 2
|
|
@@ -34,12 +33,12 @@ class AdchainOfferwallViewManager : SimpleViewManager<AdchainOfferwallView>() {
|
|
|
34
33
|
override fun getName() = REACT_CLASS
|
|
35
34
|
|
|
36
35
|
override fun createViewInstance(reactContext: ThemedReactContext): AdchainOfferwallView {
|
|
37
|
-
|
|
36
|
+
AdchainRNLog.d(TAG, "createViewInstance called")
|
|
38
37
|
return AdchainOfferwallView(reactContext)
|
|
39
38
|
}
|
|
40
39
|
|
|
41
40
|
override fun getCommandsMap(): Map<String, Int> {
|
|
42
|
-
|
|
41
|
+
AdchainRNLog.d(TAG, "getCommandsMap called")
|
|
43
42
|
return mapOf(
|
|
44
43
|
"loadOfferwall" to COMMAND_LOAD_OFFERWALL,
|
|
45
44
|
"handleBackPress" to COMMAND_HANDLE_BACK_PRESS,
|
|
@@ -55,54 +54,54 @@ class AdchainOfferwallViewManager : SimpleViewManager<AdchainOfferwallView>() {
|
|
|
55
54
|
commandId: String?,
|
|
56
55
|
args: ReadableArray?
|
|
57
56
|
) {
|
|
58
|
-
|
|
57
|
+
AdchainRNLog.d(TAG, "receiveCommand called - commandId: $commandId")
|
|
59
58
|
when (commandId) {
|
|
60
59
|
"loadOfferwall" -> {
|
|
61
60
|
val placementId = args?.getString(0) ?: ""
|
|
62
|
-
|
|
61
|
+
AdchainRNLog.d(TAG, "loadOfferwall command - placementId: $placementId")
|
|
63
62
|
loadOfferwall(root, placementId)
|
|
64
63
|
}
|
|
65
64
|
"handleBackPress" -> {
|
|
66
|
-
|
|
65
|
+
AdchainRNLog.d(TAG, "handleBackPress command")
|
|
67
66
|
val handled = root.handleBackPress()
|
|
68
|
-
|
|
67
|
+
AdchainRNLog.d(TAG, "handleBackPress result: $handled")
|
|
69
68
|
|
|
70
69
|
// Send event to React Native based on result
|
|
71
70
|
if (!handled) {
|
|
72
71
|
// WebView stack has only 1 item (first page)
|
|
73
|
-
|
|
72
|
+
AdchainRNLog.d(TAG, "Sending onBackPressOnFirstPage event")
|
|
74
73
|
sendEvent(root, "onBackPressOnFirstPage", Arguments.createMap())
|
|
75
74
|
} else {
|
|
76
75
|
// WebView stack has 2+ items (navigated back)
|
|
77
|
-
|
|
76
|
+
AdchainRNLog.d(TAG, "Sending onBackNavigated event")
|
|
78
77
|
sendEvent(root, "onBackNavigated", Arguments.createMap())
|
|
79
78
|
}
|
|
80
79
|
}
|
|
81
80
|
"sendDataResponse" -> { // NEW
|
|
82
81
|
val requestId = args?.getString(0) ?: ""
|
|
83
82
|
val responseData = args?.getMap(1)?.toHashMap()
|
|
84
|
-
|
|
83
|
+
AdchainRNLog.d(TAG, "sendDataResponse command - requestId: $requestId")
|
|
85
84
|
if (responseData != null) {
|
|
86
85
|
pendingDataResponses[requestId] = responseData
|
|
87
86
|
}
|
|
88
87
|
}
|
|
89
88
|
else -> {
|
|
90
|
-
|
|
89
|
+
AdchainRNLog.w(TAG, "Unknown command: $commandId")
|
|
91
90
|
}
|
|
92
91
|
}
|
|
93
92
|
}
|
|
94
93
|
|
|
95
94
|
private fun loadOfferwall(view: AdchainOfferwallView, placementId: String) {
|
|
96
|
-
|
|
95
|
+
AdchainRNLog.d(TAG, "loadOfferwall method called - placementId: $placementId")
|
|
97
96
|
|
|
98
97
|
if (placementId.isEmpty()) {
|
|
99
|
-
|
|
98
|
+
AdchainRNLog.w(TAG, "placementId is empty, returning")
|
|
100
99
|
return
|
|
101
100
|
}
|
|
102
101
|
|
|
103
102
|
try {
|
|
104
103
|
// Set callback for offerwall events
|
|
105
|
-
|
|
104
|
+
AdchainRNLog.d(TAG, "Setting callback...")
|
|
106
105
|
view.setCallback(object : OfferwallCallback {
|
|
107
106
|
override fun onOpened() {
|
|
108
107
|
sendEvent(view, "onOfferwallOpened", Arguments.createMap())
|
|
@@ -127,7 +126,7 @@ class AdchainOfferwallViewManager : SimpleViewManager<AdchainOfferwallView>() {
|
|
|
127
126
|
}
|
|
128
127
|
|
|
129
128
|
override fun onHeightChanged(height: Int) {
|
|
130
|
-
|
|
129
|
+
AdchainRNLog.d(TAG, "onHeightChanged callback received - height: $height")
|
|
131
130
|
val map = Arguments.createMap().apply {
|
|
132
131
|
putInt("height", height)
|
|
133
132
|
}
|
|
@@ -136,10 +135,10 @@ class AdchainOfferwallViewManager : SimpleViewManager<AdchainOfferwallView>() {
|
|
|
136
135
|
})
|
|
137
136
|
|
|
138
137
|
// NEW: Set event callback for custom events
|
|
139
|
-
|
|
138
|
+
AdchainRNLog.d(TAG, "Setting event callback...")
|
|
140
139
|
view.setEventCallback(object : OfferwallEventCallback {
|
|
141
140
|
override fun onCustomEvent(eventType: String, payload: Map<String, Any?>) {
|
|
142
|
-
|
|
141
|
+
AdchainRNLog.d(TAG, "onCustomEvent received - type: $eventType")
|
|
143
142
|
// Sample 앱에서 처리하도록 이벤트만 전달 (Toast 표시 안 함)
|
|
144
143
|
|
|
145
144
|
val map = Arguments.createMap().apply {
|
|
@@ -154,7 +153,7 @@ class AdchainOfferwallViewManager : SimpleViewManager<AdchainOfferwallView>() {
|
|
|
154
153
|
requestType: String,
|
|
155
154
|
params: Map<String, Any?>
|
|
156
155
|
): Map<String, Any?>? {
|
|
157
|
-
|
|
156
|
+
AdchainRNLog.d(TAG, "onDataRequest received - id: $requestId, type: $requestType")
|
|
158
157
|
|
|
159
158
|
// Send event to React Native
|
|
160
159
|
val map = Arguments.createMap().apply {
|
|
@@ -171,41 +170,40 @@ class AdchainOfferwallViewManager : SimpleViewManager<AdchainOfferwallView>() {
|
|
|
171
170
|
while (System.currentTimeMillis() - startTime < timeout) {
|
|
172
171
|
val response = pendingDataResponses.remove(requestId)
|
|
173
172
|
if (response != null) {
|
|
174
|
-
|
|
173
|
+
AdchainRNLog.d(TAG, "Data response received for request: $requestId")
|
|
175
174
|
return response
|
|
176
175
|
}
|
|
177
176
|
Thread.sleep(10)
|
|
178
177
|
}
|
|
179
178
|
|
|
180
|
-
|
|
179
|
+
AdchainRNLog.w(TAG, "Data request timeout: $requestId")
|
|
181
180
|
return null
|
|
182
181
|
}
|
|
183
182
|
})
|
|
184
183
|
|
|
185
184
|
// Simply call the native method with placementId
|
|
186
185
|
// Native SDK handles URL fetching internally
|
|
187
|
-
|
|
186
|
+
AdchainRNLog.d(TAG, "Calling view.loadOfferwall(placementId)...")
|
|
188
187
|
view.loadOfferwall(placementId)
|
|
189
|
-
|
|
188
|
+
AdchainRNLog.d(TAG, "view.loadOfferwall() call completed")
|
|
190
189
|
|
|
191
190
|
} catch (e: Exception) {
|
|
192
|
-
|
|
193
|
-
e.printStackTrace()
|
|
191
|
+
AdchainRNLog.e(TAG, "Exception in loadOfferwall", e)
|
|
194
192
|
sendErrorEvent(view, "Failed to load offerwall: ${e.message}")
|
|
193
|
+
AdchainRNTelemetry.report("loadOfferwall failed", e)
|
|
195
194
|
}
|
|
196
195
|
}
|
|
197
196
|
|
|
198
197
|
private fun sendEvent(view: AdchainOfferwallView, eventName: String, params: WritableMap) {
|
|
199
|
-
|
|
198
|
+
AdchainRNLog.d(TAG, "sendEvent called - eventName: $eventName")
|
|
200
199
|
val reactContext = view.context as ReactContext
|
|
201
200
|
try {
|
|
202
201
|
reactContext
|
|
203
202
|
.getJSModule(com.facebook.react.uimanager.events.RCTEventEmitter::class.java)
|
|
204
203
|
.receiveEvent(view.id, eventName, params)
|
|
205
|
-
|
|
204
|
+
AdchainRNLog.d(TAG, "sendEvent completed successfully")
|
|
206
205
|
} catch (e: Exception) {
|
|
207
|
-
|
|
208
|
-
e.printStackTrace()
|
|
206
|
+
AdchainRNLog.e(TAG, "sendEvent failed", e)
|
|
209
207
|
}
|
|
210
208
|
}
|
|
211
209
|
|
|
@@ -247,7 +245,7 @@ class AdchainOfferwallViewManager : SimpleViewManager<AdchainOfferwallView>() {
|
|
|
247
245
|
is List<*> -> {
|
|
248
246
|
writableMap.putArray(key, convertListToWritableArray(value))
|
|
249
247
|
}
|
|
250
|
-
else ->
|
|
248
|
+
else -> AdchainRNLog.w(TAG, "Unsupported value type for key: $key")
|
|
251
249
|
}
|
|
252
250
|
}
|
|
253
251
|
return writableMap
|
|
@@ -269,7 +267,7 @@ class AdchainOfferwallViewManager : SimpleViewManager<AdchainOfferwallView>() {
|
|
|
269
267
|
is List<*> -> {
|
|
270
268
|
writableArray.pushArray(convertListToWritableArray(item))
|
|
271
269
|
}
|
|
272
|
-
else ->
|
|
270
|
+
else -> AdchainRNLog.w(TAG, "Unsupported item type in list")
|
|
273
271
|
}
|
|
274
272
|
}
|
|
275
273
|
return writableArray
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
package com.adchain.exposdk
|
|
2
|
+
|
|
3
|
+
import android.util.Log
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Thin logging utility for the AdChain React Native bridge.
|
|
7
|
+
*
|
|
8
|
+
* This is intentionally a *thin* wrapper around [android.util.Log] — it is the
|
|
9
|
+
* bridge's own logging chokepoint, independent of the core SDK's `AdchainLogger`.
|
|
10
|
+
* It provides only:
|
|
11
|
+
* 1. console gating via [logLevel] (defaults to [LogLevel.WARNING] for production), and
|
|
12
|
+
* 2. a fixed `"AdchainRN-"` TAG prefix so bridge logs are unambiguous in logcat
|
|
13
|
+
* (e.g. tag "Sdk" => logcat tag "AdchainRN-Sdk").
|
|
14
|
+
*
|
|
15
|
+
* It deliberately does NOT carry the PII scrub or telemetry seams that the core
|
|
16
|
+
* `AdchainLogger` has — keeping it thin. Data-exposure values must be omitted at
|
|
17
|
+
* the call site instead.
|
|
18
|
+
*/
|
|
19
|
+
object AdchainRNLog {
|
|
20
|
+
private const val TAG_PREFIX = "AdchainRN-"
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Current log level — defaults to WARNING for production safety.
|
|
24
|
+
*/
|
|
25
|
+
@JvmStatic
|
|
26
|
+
var logLevel: LogLevel = LogLevel.WARNING
|
|
27
|
+
|
|
28
|
+
private fun prefixed(tag: String): String = TAG_PREFIX + tag
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Log an error message with optional throwable.
|
|
32
|
+
*/
|
|
33
|
+
@JvmStatic
|
|
34
|
+
fun e(tag: String, message: String, throwable: Throwable? = null) {
|
|
35
|
+
if (logLevel.value >= LogLevel.ERROR.value) {
|
|
36
|
+
if (throwable != null) {
|
|
37
|
+
Log.e(prefixed(tag), message, throwable)
|
|
38
|
+
} else {
|
|
39
|
+
Log.e(prefixed(tag), message)
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Log a warning message.
|
|
46
|
+
*/
|
|
47
|
+
@JvmStatic
|
|
48
|
+
fun w(tag: String, message: String) {
|
|
49
|
+
if (logLevel.value >= LogLevel.WARNING.value) {
|
|
50
|
+
Log.w(prefixed(tag), message)
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Log an info message.
|
|
56
|
+
*/
|
|
57
|
+
@JvmStatic
|
|
58
|
+
fun i(tag: String, message: String) {
|
|
59
|
+
if (logLevel.value >= LogLevel.INFO.value) {
|
|
60
|
+
Log.i(prefixed(tag), message)
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Log a debug message.
|
|
66
|
+
*/
|
|
67
|
+
@JvmStatic
|
|
68
|
+
fun d(tag: String, message: String) {
|
|
69
|
+
if (logLevel.value >= LogLevel.DEBUG.value) {
|
|
70
|
+
Log.d(prefixed(tag), message)
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Log a verbose message.
|
|
76
|
+
*/
|
|
77
|
+
@JvmStatic
|
|
78
|
+
fun v(tag: String, message: String) {
|
|
79
|
+
if (logLevel.value >= LogLevel.VERBOSE.value) {
|
|
80
|
+
Log.v(prefixed(tag), message)
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Log levels for the React Native bridge logger.
|
|
87
|
+
*/
|
|
88
|
+
enum class LogLevel(val value: Int) {
|
|
89
|
+
/** No logs will be printed */
|
|
90
|
+
NONE(0),
|
|
91
|
+
/** Only errors will be printed */
|
|
92
|
+
ERROR(1),
|
|
93
|
+
/** Errors and warnings will be printed (Default) */
|
|
94
|
+
WARNING(2),
|
|
95
|
+
/** Errors, warnings, and info messages will be printed */
|
|
96
|
+
INFO(3),
|
|
97
|
+
/** All except verbose messages will be printed */
|
|
98
|
+
DEBUG(4),
|
|
99
|
+
/** All messages will be printed */
|
|
100
|
+
VERBOSE(5)
|
|
101
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
package com.adchain.exposdk
|
|
2
|
+
|
|
3
|
+
import java.lang.reflect.Method
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Telemetry bridge for the AdChain React Native layer.
|
|
7
|
+
*
|
|
8
|
+
* Forwards exceptions that the RN bridge *catches and swallows* onto the core SDK's
|
|
9
|
+
* self-contained telemetry rail (`sdk_error`, category `sdk_diagnostic`) so bridge-side
|
|
10
|
+
* failures land next to native ones — tagged `layer = "rn"`.
|
|
11
|
+
*
|
|
12
|
+
* The core hook (`com.adchain.sdk.telemetry.SdkTelemetry.reportSdkError`) is resolved via
|
|
13
|
+
* **reflection** (lazy, once, cached). This keeps the RN bridge free of any compile-time
|
|
14
|
+
* dependency on that symbol: older core pins that lack the method simply make every call a
|
|
15
|
+
* permanent no-op. There is no third-party observability SDK here — this only relays into
|
|
16
|
+
* first-party (`com.adchain.*`) code, per `OBSERVABILITY-ADR.md`.
|
|
17
|
+
*
|
|
18
|
+
* Fail-safe (highest priority): no path here may ever propagate a throwable to the caller.
|
|
19
|
+
* Every call into [report] is fully guarded; a failure to relay is silently dropped.
|
|
20
|
+
*/
|
|
21
|
+
object AdchainRNTelemetry {
|
|
22
|
+
|
|
23
|
+
/** Layer tag carried in the diagnostic event so RN-origin errors are distinguishable. */
|
|
24
|
+
private const val LAYER_RN = "rn"
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Lazily-resolved, cached reflection handle to the core hook
|
|
28
|
+
* `SdkTelemetry.reportSdkError(String, Throwable, String)` — `@JvmStatic`, so it is
|
|
29
|
+
* invoked with a `null` receiver. Resolves to `null` (permanent no-op) when the core
|
|
30
|
+
* class/method is absent on the current pin.
|
|
31
|
+
*/
|
|
32
|
+
private val reportMethod: Method? by lazy { resolveReportMethod() }
|
|
33
|
+
|
|
34
|
+
private fun resolveReportMethod(): Method? {
|
|
35
|
+
return try {
|
|
36
|
+
Class.forName("com.adchain.sdk.telemetry.SdkTelemetry")
|
|
37
|
+
.getMethod(
|
|
38
|
+
"reportSdkError",
|
|
39
|
+
String::class.java,
|
|
40
|
+
Throwable::class.java,
|
|
41
|
+
String::class.java
|
|
42
|
+
)
|
|
43
|
+
} catch (t: Throwable) {
|
|
44
|
+
// Class or method missing on this core pin → permanent no-op.
|
|
45
|
+
null
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Relay a caught bridge exception onto the core diagnostic rail with `layer = "rn"`.
|
|
51
|
+
*
|
|
52
|
+
* Network failures are excluded (they reflect the user's connectivity, not an SDK
|
|
53
|
+
* malfunction). The core scrubs the throwable/message for PII, so call sites must not
|
|
54
|
+
* pass PII in [message].
|
|
55
|
+
*/
|
|
56
|
+
@JvmStatic
|
|
57
|
+
fun report(message: String, throwable: Throwable?) {
|
|
58
|
+
try {
|
|
59
|
+
// Network failures are not SDK malfunctions — drop them (mirrors core).
|
|
60
|
+
if (isNetworkThrowable(throwable)) return
|
|
61
|
+
reportMethod?.invoke(null, message, throwable, LAYER_RN)
|
|
62
|
+
} catch (t: Throwable) {
|
|
63
|
+
// fail-safe: never let telemetry relay disturb the bridge.
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* True when the throwable (or any cause in its chain) is a [java.io.IOException] — a
|
|
69
|
+
* network/transport failure rather than an SDK malfunction. Bounded, cycle-guarded
|
|
70
|
+
* cause-chain walk (mirrors core `SdkTelemetry.isNetworkThrowable`).
|
|
71
|
+
*/
|
|
72
|
+
private fun isNetworkThrowable(throwable: Throwable?): Boolean {
|
|
73
|
+
var current: Throwable? = throwable
|
|
74
|
+
var depth = 0
|
|
75
|
+
val seen = java.util.Collections.newSetFromMap(java.util.IdentityHashMap<Throwable, Boolean>())
|
|
76
|
+
while (current != null && depth < 16 && seen.add(current)) {
|
|
77
|
+
if (current is java.io.IOException) return true
|
|
78
|
+
current = try { current.cause } catch (t: Throwable) { null }
|
|
79
|
+
depth++
|
|
80
|
+
}
|
|
81
|
+
return false
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -87,6 +87,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
|
|
|
87
87
|
|
|
88
88
|
} catch (t: Throwable) {
|
|
89
89
|
promise.reject("INIT_ERROR", t.message, t)
|
|
90
|
+
AdchainRNTelemetry.report("initialize failed", t)
|
|
90
91
|
}
|
|
91
92
|
}
|
|
92
93
|
|
|
@@ -151,6 +152,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
|
|
|
151
152
|
})
|
|
152
153
|
} catch (t: Throwable) {
|
|
153
154
|
promise.reject("LOGIN_ERROR", t.message, t)
|
|
155
|
+
AdchainRNTelemetry.report("login failed", t)
|
|
154
156
|
}
|
|
155
157
|
}
|
|
156
158
|
|
|
@@ -161,6 +163,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
|
|
|
161
163
|
promise.resolve(createResponse(true, "Logout successful"))
|
|
162
164
|
} catch (t: Throwable) {
|
|
163
165
|
promise.reject("LOGOUT_ERROR", t.message, t)
|
|
166
|
+
AdchainRNTelemetry.report("logout failed", t)
|
|
164
167
|
}
|
|
165
168
|
}
|
|
166
169
|
|
|
@@ -170,6 +173,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
|
|
|
170
173
|
promise.resolve(AdchainSdk.isLoggedIn)
|
|
171
174
|
} catch (t: Throwable) {
|
|
172
175
|
promise.reject("ERROR", t.message, t)
|
|
176
|
+
AdchainRNTelemetry.report("isLoggedIn failed", t)
|
|
173
177
|
}
|
|
174
178
|
}
|
|
175
179
|
|
|
@@ -189,6 +193,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
|
|
|
189
193
|
}
|
|
190
194
|
} catch (t: Throwable) {
|
|
191
195
|
promise.reject("ERROR", t.message, t)
|
|
196
|
+
AdchainRNTelemetry.report("getCurrentUser failed", t)
|
|
192
197
|
}
|
|
193
198
|
}
|
|
194
199
|
|
|
@@ -236,6 +241,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
|
|
|
236
241
|
)
|
|
237
242
|
} catch (t: Throwable) {
|
|
238
243
|
promise.reject("QUIZ_ERROR", t.message, t)
|
|
244
|
+
AdchainRNTelemetry.report("loadQuizList failed", t)
|
|
239
245
|
}
|
|
240
246
|
}
|
|
241
247
|
|
|
@@ -272,6 +278,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
|
|
|
272
278
|
promise.resolve(createResponse(true, "Quiz clicked"))
|
|
273
279
|
} catch (t: Throwable) {
|
|
274
280
|
promise.reject("QUIZ_ERROR", t.message, t)
|
|
281
|
+
AdchainRNTelemetry.report("clickQuiz failed", t)
|
|
275
282
|
}
|
|
276
283
|
}
|
|
277
284
|
|
|
@@ -416,6 +423,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
|
|
|
416
423
|
)
|
|
417
424
|
} catch (t: Throwable) {
|
|
418
425
|
promise.reject("MISSION_ERROR", t.message, t)
|
|
426
|
+
AdchainRNTelemetry.report("loadMissionList failed", t)
|
|
419
427
|
}
|
|
420
428
|
}
|
|
421
429
|
|
|
@@ -477,6 +485,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
|
|
|
477
485
|
promise.resolve(createResponse(true, "Mission clicked"))
|
|
478
486
|
} catch (t: Throwable) {
|
|
479
487
|
promise.reject("MISSION_ERROR", t.message, t)
|
|
488
|
+
AdchainRNTelemetry.report("clickMission failed", t)
|
|
480
489
|
}
|
|
481
490
|
}
|
|
482
491
|
|
|
@@ -491,6 +500,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
|
|
|
491
500
|
promise.resolve(createResponse(true, "Reward claimed"))
|
|
492
501
|
} catch (t: Throwable) {
|
|
493
502
|
promise.reject("MISSION_ERROR", t.message, t)
|
|
503
|
+
AdchainRNTelemetry.report("claimReward failed", t)
|
|
494
504
|
}
|
|
495
505
|
}
|
|
496
506
|
|
|
@@ -502,6 +512,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
|
|
|
502
512
|
promise.resolve(AdchainSdk.isInitialized())
|
|
503
513
|
} catch (t: Throwable) {
|
|
504
514
|
promise.reject("ERROR", t.message, t)
|
|
515
|
+
AdchainRNTelemetry.report("isInitialized failed", t)
|
|
505
516
|
}
|
|
506
517
|
}
|
|
507
518
|
|
|
@@ -512,6 +523,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
|
|
|
512
523
|
promise.resolve(userId)
|
|
513
524
|
} catch (t: Throwable) {
|
|
514
525
|
promise.reject("ERROR", t.message, t)
|
|
526
|
+
AdchainRNTelemetry.report("getUserId failed", t)
|
|
515
527
|
}
|
|
516
528
|
}
|
|
517
529
|
|
|
@@ -525,6 +537,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
|
|
|
525
537
|
promise.resolve(ifa)
|
|
526
538
|
} catch (t: Throwable) {
|
|
527
539
|
promise.reject("ERROR", t.message, t)
|
|
540
|
+
AdchainRNTelemetry.report("getIFA failed", t)
|
|
528
541
|
}
|
|
529
542
|
}
|
|
530
543
|
|
|
@@ -553,6 +566,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
|
|
|
553
566
|
}
|
|
554
567
|
} catch (t: Throwable) {
|
|
555
568
|
promise.reject("BANNER_ERROR", t.message, t)
|
|
569
|
+
AdchainRNTelemetry.report("getBannerInfo failed", t)
|
|
556
570
|
}
|
|
557
571
|
}
|
|
558
572
|
|
|
@@ -562,17 +576,27 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
|
|
|
562
576
|
fun openOfferwall(placementId: String?, promise: Promise) {
|
|
563
577
|
try {
|
|
564
578
|
reactContext.currentActivity?.let { activity ->
|
|
579
|
+
val finalPlacementId = placementId ?: ""
|
|
565
580
|
val callback = object : OfferwallCallback {
|
|
566
581
|
override fun onOpened() {
|
|
567
582
|
promise.resolve(createResponse(true, "Offerwall opened"))
|
|
568
583
|
}
|
|
569
584
|
|
|
570
585
|
override fun onClosed() {
|
|
571
|
-
|
|
586
|
+
reactContext
|
|
587
|
+
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
|
|
588
|
+
.emit("onOfferwallClosed", Arguments.createMap().apply {
|
|
589
|
+
putString("placementId", finalPlacementId)
|
|
590
|
+
})
|
|
572
591
|
}
|
|
573
592
|
|
|
574
593
|
override fun onError(message: String) {
|
|
575
|
-
|
|
594
|
+
reactContext
|
|
595
|
+
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
|
|
596
|
+
.emit("onOfferwallError", Arguments.createMap().apply {
|
|
597
|
+
putString("placementId", finalPlacementId)
|
|
598
|
+
putString("message", message)
|
|
599
|
+
})
|
|
576
600
|
}
|
|
577
601
|
|
|
578
602
|
override fun onRewardEarned(amount: Int) {
|
|
@@ -583,12 +607,18 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
|
|
|
583
607
|
// Event callback for custom events
|
|
584
608
|
val eventCallback = object : OfferwallEventCallback {
|
|
585
609
|
override fun onCustomEvent(eventType: String, payload: Map<String, Any?>) {
|
|
586
|
-
|
|
587
|
-
//
|
|
610
|
+
AdchainRNLog.d("Sdk", "[WebView → App] Custom Event: type=$eventType")
|
|
611
|
+
// 웹뷰 customEvent를 JS 리스너로 전달 (onOfferwallClosed emit과 동일 방식)
|
|
612
|
+
reactContext
|
|
613
|
+
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
|
|
614
|
+
.emit("onOfferwallCustomEvent", Arguments.createMap().apply {
|
|
615
|
+
putString("eventType", eventType)
|
|
616
|
+
putMap("payload", Arguments.makeNativeMap(payload))
|
|
617
|
+
})
|
|
588
618
|
}
|
|
589
619
|
|
|
590
620
|
override fun onDataRequest(requestId: String, requestType: String, params: Map<String, Any?>): Map<String, Any?>? {
|
|
591
|
-
|
|
621
|
+
AdchainRNLog.d("Sdk", "[WebView → App] Data Request: type=$requestType")
|
|
592
622
|
|
|
593
623
|
// Return mock data based on request type
|
|
594
624
|
val response = when (requestType) {
|
|
@@ -598,16 +628,16 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
|
|
|
598
628
|
else -> null
|
|
599
629
|
}
|
|
600
630
|
|
|
601
|
-
|
|
631
|
+
AdchainRNLog.d("Sdk", "[App → WebView] Data Response sent")
|
|
602
632
|
return response
|
|
603
633
|
}
|
|
604
634
|
}
|
|
605
635
|
|
|
606
|
-
val finalPlacementId = placementId ?: ""
|
|
607
636
|
AdchainSdk.openOfferwall(activity, finalPlacementId, callback, eventCallback)
|
|
608
637
|
} ?: promise.reject("OFFERWALL_ERROR", "Current activity is null")
|
|
609
638
|
} catch (t: Throwable) {
|
|
610
639
|
promise.reject("OFFERWALL_ERROR", t.message, t)
|
|
640
|
+
AdchainRNTelemetry.report("openOfferwall failed", t)
|
|
611
641
|
}
|
|
612
642
|
}
|
|
613
643
|
|
|
@@ -636,12 +666,18 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
|
|
|
636
666
|
// Event callback for custom events
|
|
637
667
|
val eventCallback = object : OfferwallEventCallback {
|
|
638
668
|
override fun onCustomEvent(eventType: String, payload: Map<String, Any?>) {
|
|
639
|
-
|
|
640
|
-
//
|
|
669
|
+
AdchainRNLog.d("Sdk", "[WebView → App] Custom Event: type=$eventType")
|
|
670
|
+
// 웹뷰 customEvent를 JS 리스너로 전달 (onOfferwallClosed emit과 동일 방식)
|
|
671
|
+
reactContext
|
|
672
|
+
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
|
|
673
|
+
.emit("onOfferwallCustomEvent", Arguments.createMap().apply {
|
|
674
|
+
putString("eventType", eventType)
|
|
675
|
+
putMap("payload", Arguments.makeNativeMap(payload))
|
|
676
|
+
})
|
|
641
677
|
}
|
|
642
678
|
|
|
643
679
|
override fun onDataRequest(requestId: String, requestType: String, params: Map<String, Any?>): Map<String, Any?>? {
|
|
644
|
-
|
|
680
|
+
AdchainRNLog.d("Sdk", "[WebView → App] Data Request: type=$requestType")
|
|
645
681
|
|
|
646
682
|
// Return mock data based on request type
|
|
647
683
|
val response = when (requestType) {
|
|
@@ -651,7 +687,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
|
|
|
651
687
|
else -> null
|
|
652
688
|
}
|
|
653
689
|
|
|
654
|
-
|
|
690
|
+
AdchainRNLog.d("Sdk", "[App → WebView] Data Response sent")
|
|
655
691
|
return response
|
|
656
692
|
}
|
|
657
693
|
}
|
|
@@ -661,6 +697,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
|
|
|
661
697
|
} ?: promise.reject("OFFERWALL_ERROR", "Current activity is null")
|
|
662
698
|
} catch (t: Throwable) {
|
|
663
699
|
promise.reject("OFFERWALL_ERROR", t.message, t)
|
|
700
|
+
AdchainRNTelemetry.report("openOfferwallWithUrl failed", t)
|
|
664
701
|
}
|
|
665
702
|
}
|
|
666
703
|
|
|
@@ -679,6 +716,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
|
|
|
679
716
|
} ?: promise.reject("BROWSER_ERROR", "Current activity is null")
|
|
680
717
|
} catch (t: Throwable) {
|
|
681
718
|
promise.reject("BROWSER_ERROR", t.message, t)
|
|
719
|
+
AdchainRNTelemetry.report("openExternalBrowser failed", t)
|
|
682
720
|
}
|
|
683
721
|
}
|
|
684
722
|
|
|
@@ -709,6 +747,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
|
|
|
709
747
|
} ?: promise.reject("ADJOE_ERROR", "Current activity is null")
|
|
710
748
|
} catch (t: Throwable) {
|
|
711
749
|
promise.reject("ADJOE_ERROR", t.message, t)
|
|
750
|
+
AdchainRNTelemetry.report("openAdjoeOfferwall failed", t)
|
|
712
751
|
}
|
|
713
752
|
}
|
|
714
753
|
|
|
@@ -738,6 +777,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
|
|
|
738
777
|
} ?: promise.reject("NESTADS_ERROR", "Current activity is null")
|
|
739
778
|
} catch (t: Throwable) {
|
|
740
779
|
promise.reject("NESTADS_ERROR", t.message, t)
|
|
780
|
+
AdchainRNTelemetry.report("openOfferwallNestAds failed", t)
|
|
741
781
|
}
|
|
742
782
|
}
|
|
743
783
|
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
//
|
|
2
|
+
// AdchainRNLog.swift
|
|
3
|
+
// AdchainSdk React Native bridge
|
|
4
|
+
//
|
|
5
|
+
// Thin logging utility for the AdChain React Native bridge.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
|
|
10
|
+
/// Log level for the React Native bridge logger.
|
|
11
|
+
enum RNLogLevel: Int, Comparable {
|
|
12
|
+
case none = 0
|
|
13
|
+
case error = 1
|
|
14
|
+
case warning = 2
|
|
15
|
+
case info = 3
|
|
16
|
+
case debug = 4
|
|
17
|
+
case verbose = 5
|
|
18
|
+
|
|
19
|
+
static func < (lhs: RNLogLevel, rhs: RNLogLevel) -> Bool {
|
|
20
|
+
return lhs.rawValue < rhs.rawValue
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/// Thin logger for the AdChain React Native bridge.
|
|
25
|
+
///
|
|
26
|
+
/// This is intentionally a *thin* wrapper around `print` — it is the bridge's own
|
|
27
|
+
/// logging chokepoint, independent of the core SDK's `AdchainLogger`. It provides
|
|
28
|
+
/// only:
|
|
29
|
+
/// 1. console gating via `logLevel` (defaults to `.warning` for production), and
|
|
30
|
+
/// 2. a fixed `[AdchainRN-<tag>]` prefix so bridge logs are unambiguous in the
|
|
31
|
+
/// console (e.g. tag "Sdk" => "[AdchainRN-Sdk]").
|
|
32
|
+
///
|
|
33
|
+
/// It deliberately does NOT carry the PII scrub or telemetry seams that the core
|
|
34
|
+
/// `AdchainLogger` has — keeping it thin. Data-exposure values must be omitted at
|
|
35
|
+
/// the call site instead.
|
|
36
|
+
enum AdchainRNLog {
|
|
37
|
+
/// Current log level — defaults to WARNING for production safety.
|
|
38
|
+
static var logLevel: RNLogLevel = .warning
|
|
39
|
+
|
|
40
|
+
/// Log error message.
|
|
41
|
+
static func e(_ tag: String, _ message: String) {
|
|
42
|
+
emit(.error, tag: tag, message: message)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/// Log warning message.
|
|
46
|
+
static func w(_ tag: String, _ message: String) {
|
|
47
|
+
emit(.warning, tag: tag, message: message)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/// Log info message.
|
|
51
|
+
static func i(_ tag: String, _ message: String) {
|
|
52
|
+
emit(.info, tag: tag, message: message)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/// Log debug message.
|
|
56
|
+
static func d(_ tag: String, _ message: String) {
|
|
57
|
+
emit(.debug, tag: tag, message: message)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/// Log verbose message.
|
|
61
|
+
static func v(_ tag: String, _ message: String) {
|
|
62
|
+
emit(.verbose, tag: tag, message: message)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
private static func emit(_ level: RNLogLevel, tag: String, message: String) {
|
|
66
|
+
guard logLevel >= level else { return }
|
|
67
|
+
print("[AdchainRN-\(tag)] \(message)")
|
|
68
|
+
}
|
|
69
|
+
}
|
package/ios/AdchainSdk.swift
CHANGED
|
@@ -35,7 +35,7 @@ class AdchainSdkModule: RCTEventEmitter {
|
|
|
35
35
|
@objc override static func requiresMainQueueSetup() -> Bool { true }
|
|
36
36
|
|
|
37
37
|
override func supportedEvents() -> [String]! {
|
|
38
|
-
return ["onQuizCompleted", "onMissionCompleted", "onMissionProgressed", "onMissionRefreshed"] // Quiz, Mission 이벤트 지원
|
|
38
|
+
return ["onQuizCompleted", "onMissionCompleted", "onMissionProgressed", "onMissionRefreshed", "onOfferwallClosed", "onOfferwallError", "onOfferwallCustomEvent"] // Quiz, Mission, Offerwall 이벤트 지원
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
// MARK: - 1. SDK 초기화
|
|
@@ -561,9 +561,13 @@ class AdchainSdkModule: RCTEventEmitter {
|
|
|
561
561
|
class OfferwallCallbackImpl: NSObject, OfferwallCallback {
|
|
562
562
|
let resolver: RCTPromiseResolveBlock
|
|
563
563
|
var hasResolved = false
|
|
564
|
+
weak var module: AdchainSdkModule?
|
|
565
|
+
let pid: String
|
|
564
566
|
|
|
565
|
-
init(resolver: @escaping RCTPromiseResolveBlock) {
|
|
567
|
+
init(resolver: @escaping RCTPromiseResolveBlock, module: AdchainSdkModule?, pid: String) {
|
|
566
568
|
self.resolver = resolver
|
|
569
|
+
self.module = module
|
|
570
|
+
self.pid = pid
|
|
567
571
|
}
|
|
568
572
|
|
|
569
573
|
func onOpened() {
|
|
@@ -577,11 +581,11 @@ class AdchainSdkModule: RCTEventEmitter {
|
|
|
577
581
|
}
|
|
578
582
|
|
|
579
583
|
func onClosed() {
|
|
580
|
-
|
|
584
|
+
module?.sendEvent(withName: "onOfferwallClosed", body: ["placementId": pid])
|
|
581
585
|
}
|
|
582
586
|
|
|
583
587
|
func onError(_ message: String) {
|
|
584
|
-
|
|
588
|
+
module?.sendEvent(withName: "onOfferwallError", body: ["placementId": pid, "message": message])
|
|
585
589
|
}
|
|
586
590
|
|
|
587
591
|
func onRewardEarned(_ amount: Int) {
|
|
@@ -590,13 +594,20 @@ class AdchainSdkModule: RCTEventEmitter {
|
|
|
590
594
|
}
|
|
591
595
|
|
|
592
596
|
class OfferwallEventCallbackImpl: NSObject, OfferwallEventCallback {
|
|
597
|
+
weak var module: AdchainSdkModule?
|
|
598
|
+
|
|
599
|
+
init(module: AdchainSdkModule?) {
|
|
600
|
+
self.module = module
|
|
601
|
+
}
|
|
602
|
+
|
|
593
603
|
func onCustomEvent(eventType: String, payload: [String : Any]) {
|
|
594
|
-
|
|
595
|
-
//
|
|
604
|
+
AdchainRNLog.d("Sdk", "[WebView → App] Custom Event: type=\(eventType)")
|
|
605
|
+
// 웹뷰 customEvent를 JS 리스너로 전달 (onOfferwallClosed emit과 동일 방식)
|
|
606
|
+
module?.sendEvent(withName: "onOfferwallCustomEvent", body: ["eventType": eventType, "payload": payload])
|
|
596
607
|
}
|
|
597
608
|
|
|
598
609
|
func onDataRequest(requestId: String, requestType: String, params: [String : Any]) -> [String : Any]? {
|
|
599
|
-
|
|
610
|
+
AdchainRNLog.d("Sdk", "[WebView → App] Data Request: type=\(requestType)")
|
|
600
611
|
|
|
601
612
|
// Return mock data based on request type
|
|
602
613
|
let response: [String: Any]?
|
|
@@ -611,16 +622,16 @@ class AdchainSdkModule: RCTEventEmitter {
|
|
|
611
622
|
response = nil
|
|
612
623
|
}
|
|
613
624
|
|
|
614
|
-
|
|
625
|
+
AdchainRNLog.d("Sdk", "[App → WebView] Data Response sent")
|
|
615
626
|
return response
|
|
616
627
|
}
|
|
617
628
|
}
|
|
618
629
|
|
|
619
630
|
DispatchQueue.main.async { [weak self] in
|
|
620
631
|
if let topVC = self?.getTopViewController() {
|
|
621
|
-
let callback = OfferwallCallbackImpl(resolver: resolver)
|
|
622
|
-
let eventCallback = OfferwallEventCallbackImpl()
|
|
623
632
|
let finalPlacementId = (placementId as String?) ?? ""
|
|
633
|
+
let callback = OfferwallCallbackImpl(resolver: resolver, module: self, pid: finalPlacementId)
|
|
634
|
+
let eventCallback = OfferwallEventCallbackImpl(module: self)
|
|
624
635
|
AdchainSdk.shared.openOfferwall(
|
|
625
636
|
presentingViewController: topVC,
|
|
626
637
|
placementId: finalPlacementId,
|
|
@@ -669,13 +680,20 @@ class AdchainSdkModule: RCTEventEmitter {
|
|
|
669
680
|
}
|
|
670
681
|
|
|
671
682
|
class OfferwallEventCallbackImpl: NSObject, OfferwallEventCallback {
|
|
683
|
+
weak var module: AdchainSdkModule?
|
|
684
|
+
|
|
685
|
+
init(module: AdchainSdkModule?) {
|
|
686
|
+
self.module = module
|
|
687
|
+
}
|
|
688
|
+
|
|
672
689
|
func onCustomEvent(eventType: String, payload: [String : Any]) {
|
|
673
|
-
|
|
674
|
-
//
|
|
690
|
+
AdchainRNLog.d("Sdk", "[WebView → App] Custom Event: type=\(eventType)")
|
|
691
|
+
// 웹뷰 customEvent를 JS 리스너로 전달 (onOfferwallClosed emit과 동일 방식)
|
|
692
|
+
module?.sendEvent(withName: "onOfferwallCustomEvent", body: ["eventType": eventType, "payload": payload])
|
|
675
693
|
}
|
|
676
694
|
|
|
677
695
|
func onDataRequest(requestId: String, requestType: String, params: [String : Any]) -> [String : Any]? {
|
|
678
|
-
|
|
696
|
+
AdchainRNLog.d("Sdk", "[WebView → App] Data Request: type=\(requestType)")
|
|
679
697
|
|
|
680
698
|
// Return mock data based on request type
|
|
681
699
|
let response: [String: Any]?
|
|
@@ -690,7 +708,7 @@ class AdchainSdkModule: RCTEventEmitter {
|
|
|
690
708
|
response = nil
|
|
691
709
|
}
|
|
692
710
|
|
|
693
|
-
|
|
711
|
+
AdchainRNLog.d("Sdk", "[App → WebView] Data Response sent")
|
|
694
712
|
return response
|
|
695
713
|
}
|
|
696
714
|
}
|
|
@@ -698,7 +716,7 @@ class AdchainSdkModule: RCTEventEmitter {
|
|
|
698
716
|
DispatchQueue.main.async { [weak self] in
|
|
699
717
|
if let topVC = self?.getTopViewController() {
|
|
700
718
|
let callback = OfferwallCallbackImpl(resolver: resolver)
|
|
701
|
-
let eventCallback = OfferwallEventCallbackImpl()
|
|
719
|
+
let eventCallback = OfferwallEventCallbackImpl(module: self)
|
|
702
720
|
let finalPlacementId = (placementId as String?) ?? ""
|
|
703
721
|
AdchainSdk.shared.openOfferwallWithUrl(
|
|
704
722
|
url as String,
|
package/lib/module/index.js
CHANGED
|
@@ -191,6 +191,15 @@ export function addMissionProgressedListener(callback) {
|
|
|
191
191
|
export function addMissionRefreshedListener(callback) {
|
|
192
192
|
return adchainEventEmitter.addListener('onMissionRefreshed', callback);
|
|
193
193
|
}
|
|
194
|
+
export function addOfferwallClosedListener(callback) {
|
|
195
|
+
return adchainEventEmitter.addListener('onOfferwallClosed', callback);
|
|
196
|
+
}
|
|
197
|
+
export function addOfferwallErrorListener(callback) {
|
|
198
|
+
return adchainEventEmitter.addListener('onOfferwallError', callback);
|
|
199
|
+
}
|
|
200
|
+
export function addOfferwallCustomEventListener(callback) {
|
|
201
|
+
return adchainEventEmitter.addListener('onOfferwallCustomEvent', e => callback(e?.eventType, e?.payload));
|
|
202
|
+
}
|
|
194
203
|
|
|
195
204
|
// ===== Export =====
|
|
196
205
|
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeModules","Platform","NativeEventEmitter","hasExpoNative","ExponentConstants","AdchainOfferwallView","LINKING_ERROR","select","ios","default","AdchainSdk","Proxy","get","Error","adchainEventEmitter","AdchainSDK","initialize","config","options","environment","timeout","appKey","appSecret","autoInitialize","OS","Constants","require","e","expoConfig","adchainAndroidAppKey","adchainAndroidAppSecret","adchainIosAppKey","adchainIosAppSecret","adchainEnvironment","adchainTimeout","extra","isIOS","console","log","error","login","user","userInfo","gender","birthYear","customProperties","userId","logout","isLoggedIn","getCurrentUser","loadQuizList","unitId","clickQuiz","quizId","loadMissionList","clickMission","missionId","claimReward","openOfferwall","placementId","openOfferwallWithUrl","url","openExternalBrowser","openAdjoeOfferwall","openOfferwallNestAds","isInitialized","getUserId","getIFA","getBannerInfo","addQuizCompletedListener","callback","addListener","addMissionCompletedListener","addMissionProgressedListener","addMissionRefreshedListener","sdk"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,QAAQ,EAAEC,kBAAkB,QAAQ,cAAc;;AAE1E;AACA;AACA;AACA;AACA,MAAMC,aAAa,GAAG,CAAC,MAAM;EAC3B,IAAI;IACF,OAAO,CAAC,CAACH,aAAa,CAACI,iBAAiB;EAC1C,CAAC,CAAC,MAAM;IACN,OAAO,KAAK;EACd;AACF,CAAC,EAAE,CAAC;;AAEJ;AACA;AACA;AACA;AACA;;AAEA;AACA,SAASC,oBAAoB,QAAQ,2BAAwB;AAG7D,MAAMC,aAAa,GACjB,sEAAsE,GACtEL,QAAQ,CAACM,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,UAAU,GAAGV,aAAa,CAACU,UAAU,GACvCV,aAAa,CAACU,UAAU,GACxB,IAAIC,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACP,aAAa,CAAC;EAChC;AACF,CACF,CAAC;;AAEL;AACA,MAAMQ,mBAAmB,GAAG,IAAIZ,kBAAkB,CAACQ,UAAU,CAAC;;AAE9D;;
|
|
1
|
+
{"version":3,"names":["NativeModules","Platform","NativeEventEmitter","hasExpoNative","ExponentConstants","AdchainOfferwallView","LINKING_ERROR","select","ios","default","AdchainSdk","Proxy","get","Error","adchainEventEmitter","AdchainSDK","initialize","config","options","environment","timeout","appKey","appSecret","autoInitialize","OS","Constants","require","e","expoConfig","adchainAndroidAppKey","adchainAndroidAppSecret","adchainIosAppKey","adchainIosAppSecret","adchainEnvironment","adchainTimeout","extra","isIOS","console","log","error","login","user","userInfo","gender","birthYear","customProperties","userId","logout","isLoggedIn","getCurrentUser","loadQuizList","unitId","clickQuiz","quizId","loadMissionList","clickMission","missionId","claimReward","openOfferwall","placementId","openOfferwallWithUrl","url","openExternalBrowser","openAdjoeOfferwall","openOfferwallNestAds","isInitialized","getUserId","getIFA","getBannerInfo","addQuizCompletedListener","callback","addListener","addMissionCompletedListener","addMissionProgressedListener","addMissionRefreshedListener","addOfferwallClosedListener","addOfferwallErrorListener","addOfferwallCustomEventListener","eventType","payload","sdk"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -10,6 +10,7 @@ export interface AdchainUser {
|
|
|
10
10
|
userId: string;
|
|
11
11
|
gender?: 'MALE' | 'FEMALE' | 'OTHER' | 'M' | 'F';
|
|
12
12
|
birthYear?: number;
|
|
13
|
+
/** @deprecated 현재 어디에도 전달되지 않습니다(무효과). 향후 제거 예정 — 사용하지 마세요. */
|
|
13
14
|
customProperties?: Record<string, string>;
|
|
14
15
|
}
|
|
15
16
|
export interface Quiz {
|
|
@@ -86,6 +87,14 @@ export declare function addMissionProgressedListener(callback: (event: {
|
|
|
86
87
|
export declare function addMissionRefreshedListener(callback: (event: {
|
|
87
88
|
unitId: string;
|
|
88
89
|
}) => void): import("react-native").EmitterSubscription;
|
|
90
|
+
export declare function addOfferwallClosedListener(callback: (event: {
|
|
91
|
+
placementId?: string;
|
|
92
|
+
}) => void): import("react-native").EmitterSubscription;
|
|
93
|
+
export declare function addOfferwallErrorListener(callback: (event: {
|
|
94
|
+
placementId?: string;
|
|
95
|
+
message?: string;
|
|
96
|
+
}) => void): import("react-native").EmitterSubscription;
|
|
97
|
+
export declare function addOfferwallCustomEventListener(callback: (eventType: string, payload: any) => void): import("react-native").EmitterSubscription;
|
|
89
98
|
declare const sdk: AdchainSDK;
|
|
90
99
|
export default sdk;
|
|
91
100
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAqBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAwBxE,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,aAAa,CAAC;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,GAAG,GAAG,GAAG,CAAC;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,MAAM,EAAE,IAAI,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,cAAM,UAAU;IAER,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;IAW3D,cAAc,IAAI,OAAO,CAAC,eAAe,CAAC;IA4F1C,KAAK,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;IAWlD,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC;IAIlC,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAI9B,cAAc,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAK7C,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAInD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAKnE,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAI7D,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC;IAIrB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAKrD,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAK7D,oBAAoB,CACxB,GAAG,EAAE,MAAM,EACX,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,eAAe,CAAC;IAKrB,mBAAmB,CACvB,GAAG,EAAE,MAAM,EACX,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,eAAe,CAAC;IAKrB,kBAAkB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAKlE,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAKnE,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAIjC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAI5B,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAKzB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;CAGvD;AAID,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,KAAK,IAAI,8CAG9D;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,KAAK,IAAI,8CAGjE;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,KAAK,IAAI,8CAMjE;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,KAAK,IAAI,8CAG9C;AAID,QAAA,MAAM,GAAG,YAAmB,CAAC;AAC7B,eAAe,GAAG,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"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"}
|
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.52-rc.2
|
|
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.52-rc.2'
|
|
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.52-rc.2
|
|
45
|
+
pod 'AdChainSDK', :git => 'https://github.com/1selfworld-labs/adchain-sdk-ios-release.git', :tag => 'v1.0.52-rc.2'
|
|
46
46
|
`;
|
|
47
47
|
|
|
48
48
|
podfile = podfile.replace(
|
package/src/index.tsx
CHANGED
|
@@ -55,6 +55,7 @@ export interface AdchainUser {
|
|
|
55
55
|
userId: string;
|
|
56
56
|
gender?: 'MALE' | 'FEMALE' | 'OTHER' | 'M' | 'F';
|
|
57
57
|
birthYear?: number;
|
|
58
|
+
/** @deprecated 현재 어디에도 전달되지 않습니다(무효과). 향후 제거 예정 — 사용하지 마세요. */
|
|
58
59
|
customProperties?: Record<string, string>;
|
|
59
60
|
}
|
|
60
61
|
|
|
@@ -334,6 +335,26 @@ export function addMissionRefreshedListener(
|
|
|
334
335
|
return adchainEventEmitter.addListener('onMissionRefreshed', callback as any);
|
|
335
336
|
}
|
|
336
337
|
|
|
338
|
+
export function addOfferwallClosedListener(
|
|
339
|
+
callback: (event: { placementId?: string }) => void
|
|
340
|
+
) {
|
|
341
|
+
return adchainEventEmitter.addListener('onOfferwallClosed', callback as any);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
export function addOfferwallErrorListener(
|
|
345
|
+
callback: (event: { placementId?: string; message?: string }) => void
|
|
346
|
+
) {
|
|
347
|
+
return adchainEventEmitter.addListener('onOfferwallError', callback as any);
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
export function addOfferwallCustomEventListener(
|
|
351
|
+
callback: (eventType: string, payload: any) => void
|
|
352
|
+
) {
|
|
353
|
+
return adchainEventEmitter.addListener('onOfferwallCustomEvent', (e: any) =>
|
|
354
|
+
callback(e?.eventType, e?.payload)
|
|
355
|
+
);
|
|
356
|
+
}
|
|
357
|
+
|
|
337
358
|
// ===== Export =====
|
|
338
359
|
|
|
339
360
|
const sdk = new AdchainSDK();
|