react-native-sdk-pianoio 0.3.0 → 0.3.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/README.md +3 -3
- package/SdkPianoio.podspec +4 -16
- package/android/build.gradle +12 -19
- package/android/gradle.properties +17 -2
- package/android/src/main/java/com/sdkpianoio/SdkPianoioModule.kt +543 -7
- package/android/src/main/java/com/sdkpianoio/SdkPianoioPackage.kt +3 -3
- package/ios/ComposerPianoImpl.swift +247 -0
- package/ios/MyComposerDelegate.swift +79 -206
- package/ios/SdkPianoio.swift +150 -0
- package/ios/SdkPianoioBridge.m +81 -0
- package/ios/services/TokenService.swift +10 -7
- package/lib/commonjs/NativeSdkPianoio.ts +20 -22
- package/lib/commonjs/PianoComposer.js +36 -97
- package/lib/commonjs/PianoComposer.js.map +1 -1
- package/lib/commonjs/debug.js +23 -0
- package/lib/commonjs/debug.js.map +1 -0
- package/lib/commonjs/index.js +7 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/NativeSdkPianoio.ts +20 -22
- package/lib/module/PianoComposer.js +36 -97
- package/lib/module/PianoComposer.js.map +1 -1
- package/lib/module/debug.js +18 -0
- package/lib/module/debug.js.map +1 -0
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/commonjs/src/NativeSdkPianoio.d.ts +9 -20
- package/lib/typescript/commonjs/src/NativeSdkPianoio.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/PianoComposer.d.ts +25 -28
- package/lib/typescript/commonjs/src/PianoComposer.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/debug.d.ts +2 -0
- package/lib/typescript/commonjs/src/debug.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/index.d.ts +1 -0
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/NativeSdkPianoio.d.ts +9 -20
- package/lib/typescript/module/src/NativeSdkPianoio.d.ts.map +1 -1
- package/lib/typescript/module/src/PianoComposer.d.ts +25 -28
- package/lib/typescript/module/src/PianoComposer.d.ts.map +1 -1
- package/lib/typescript/module/src/debug.d.ts +2 -0
- package/lib/typescript/module/src/debug.d.ts.map +1 -0
- package/lib/typescript/module/src/index.d.ts +1 -0
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/package.json +30 -15
- package/src/NativeSdkPianoio.ts +20 -22
- package/src/PianoComposer.tsx +36 -116
- package/src/debug.ts +19 -0
- package/src/index.tsx +1 -0
- package/ios/ComposerPiano.swift +0 -304
- package/ios/SdkPianoio.h +0 -4
- package/ios/SdkPianoio.mm +0 -283
- package/ios/services/ComposerService.swift +0 -49
@@ -1,20 +1,556 @@
|
|
1
1
|
package com.sdkpianoio
|
2
2
|
|
3
|
+
import androidx.core.util.Consumer
|
3
4
|
import com.facebook.react.bridge.ReactApplicationContext
|
5
|
+
import com.facebook.react.bridge.ReactContextBaseJavaModule
|
6
|
+
import com.facebook.react.bridge.ReactMethod
|
7
|
+
import com.facebook.react.bridge.Promise
|
8
|
+
import com.facebook.react.bridge.ReadableArray
|
4
9
|
import com.facebook.react.module.annotations.ReactModule
|
5
10
|
|
11
|
+
import io.piano.android.composer.Composer
|
12
|
+
import io.piano.android.composer.Composer.Endpoint
|
13
|
+
import io.piano.android.composer.ExperienceInterceptor
|
14
|
+
import io.piano.android.composer.listeners.ExecuteExperienceListener
|
15
|
+
import io.piano.android.composer.listeners.ShowLoginListener
|
16
|
+
import io.piano.android.composer.model.ExperienceRequest
|
17
|
+
import io.piano.android.consents.PianoConsents
|
18
|
+
import java.util.function.Consumer
|
19
|
+
import com.facebook.react.bridge.Arguments
|
20
|
+
|
21
|
+
// importa altri listener se ti servono
|
22
|
+
|
6
23
|
@ReactModule(name = SdkPianoioModule.NAME)
|
7
|
-
class SdkPianoioModule(reactContext: ReactApplicationContext) :
|
8
|
-
|
24
|
+
class SdkPianoioModule(private val reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) { // <-- EXTEND ReactContextBaseJavaModule
|
25
|
+
|
26
|
+
private var composer: Composer? = null
|
9
27
|
|
10
|
-
|
28
|
+
// <-- ADD THIS REQUIRED METHOD
|
29
|
+
override fun getName(): String { // <--- MAKE THIS CHANGE
|
11
30
|
return NAME
|
12
31
|
}
|
13
32
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
33
|
+
@ReactMethod
|
34
|
+
fun initializeComposer(aid: String, promise: Promise) {
|
35
|
+
try {
|
36
|
+
val context = reactContext.currentActivity ?: reactContext.applicationContext;
|
37
|
+
|
38
|
+
Composer.init(
|
39
|
+
context,
|
40
|
+
aid,
|
41
|
+
Endpoint.SANDBOX, // Use Endpoint.SANDBOX instead of Composer.Endpoint.Companion
|
42
|
+
null
|
43
|
+
)
|
44
|
+
promise.resolve(true) // Resolve the promise on successful initialization
|
45
|
+
} catch (e: Exception) {
|
46
|
+
promise.reject("INIT_ERROR", "Errore inizializzazione Composer", e)
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
|
51
|
+
private val tags = mutableListOf<String>()
|
52
|
+
private var zoneId: String? = null
|
53
|
+
private var referrer: String? = null
|
54
|
+
private val customVariables = mutableMapOf<String, String>()
|
55
|
+
private var userToken: String? = null
|
56
|
+
private var url: String? = null
|
57
|
+
|
58
|
+
@ReactMethod
|
59
|
+
fun addComposerTag(tag: String, promise: Promise) {
|
60
|
+
try {
|
61
|
+
if (!tags.contains(tag)) {
|
62
|
+
tags.add(tag)
|
63
|
+
}
|
64
|
+
promise.resolve(null)
|
65
|
+
} catch (e: Exception) {
|
66
|
+
promise.reject("TAG_ERROR", "Errore aggiunta tag", e)
|
67
|
+
}
|
68
|
+
}
|
69
|
+
|
70
|
+
@ReactMethod
|
71
|
+
fun addComposerTags(tagsList: ReadableArray, promise: Promise) {
|
72
|
+
try {
|
73
|
+
for (i in 0 until tagsList.size()) {
|
74
|
+
val tag = tagsList.getString(i)
|
75
|
+
if (tag != null && !tags.contains(tag)) {
|
76
|
+
tags.add(tag)
|
77
|
+
}
|
78
|
+
}
|
79
|
+
promise.resolve(null)
|
80
|
+
} catch (e: Exception) {
|
81
|
+
promise.reject("TAGS_ERROR", "Errore aggiunta tags", e)
|
82
|
+
}
|
83
|
+
}
|
84
|
+
|
85
|
+
@ReactMethod
|
86
|
+
fun setComposerZoneId(zoneId: String, promise: Promise) {
|
87
|
+
try {
|
88
|
+
this.zoneId = zoneId
|
89
|
+
promise.resolve(null)
|
90
|
+
} catch (e: Exception) {
|
91
|
+
promise.reject("ZONEID_ERROR", "Errore impostazione zoneId", e)
|
92
|
+
}
|
93
|
+
}
|
94
|
+
|
95
|
+
@ReactMethod
|
96
|
+
fun setComposerReferrer(referrer: String, promise: Promise) {
|
97
|
+
try {
|
98
|
+
this.referrer = referrer
|
99
|
+
promise.resolve(null)
|
100
|
+
} catch (e: Exception) {
|
101
|
+
promise.reject("REFERRER_ERROR", "Errore impostazione referrer", e)
|
102
|
+
}
|
103
|
+
}
|
104
|
+
|
105
|
+
@ReactMethod
|
106
|
+
fun setComposerCustomVariable(name: String, value: String, promise: Promise) {
|
107
|
+
try {
|
108
|
+
customVariables[name] = value
|
109
|
+
promise.resolve(null)
|
110
|
+
} catch (e: Exception) {
|
111
|
+
promise.reject("CUSTOMVAR_ERROR", "Errore impostazione custom variable", e)
|
112
|
+
}
|
113
|
+
}
|
114
|
+
|
115
|
+
@ReactMethod
|
116
|
+
fun setComposerUserToken(token: String, promise: Promise) {
|
117
|
+
try {
|
118
|
+
userToken = token
|
119
|
+
promise.resolve(null)
|
120
|
+
} catch (e: Exception) {
|
121
|
+
promise.reject("TOKEN_ERROR", "Errore impostazione token", e)
|
122
|
+
}
|
123
|
+
}
|
124
|
+
|
125
|
+
@ReactMethod
|
126
|
+
fun setComposerUrl(url: String, promise: Promise) {
|
127
|
+
try {
|
128
|
+
this.url = url
|
129
|
+
promise.resolve(null)
|
130
|
+
} catch (e: Exception) {
|
131
|
+
promise.reject("URL_ERROR", "Errore impostazione URL", e)
|
132
|
+
}
|
133
|
+
}
|
134
|
+
|
135
|
+
@ReactMethod
|
136
|
+
fun getComposer(promise: Promise) {
|
137
|
+
try {
|
138
|
+
val context = reactContext.currentActivity ?: reactContext.applicationContext
|
139
|
+
composer = Composer.getInstance()
|
140
|
+
promise.resolve(true)
|
141
|
+
} catch (e: Exception) {
|
142
|
+
promise.reject("GET_COMPOSER_ERROR", "Errore ottenimento Composer", e)
|
143
|
+
}
|
144
|
+
}
|
145
|
+
|
146
|
+
// Replace your old executeExperience method with this one.
|
147
|
+
|
148
|
+
@ReactMethod
|
149
|
+
fun executeExperience(promise: Promise) {
|
150
|
+
// 1. Get the Composer instance, rejecting the promise if it's not initialized.
|
151
|
+
val composer = Composer.getInstance()
|
152
|
+
if (composer == null) {
|
153
|
+
promise.reject("NOT_INITIALIZED", "Piano Composer is not initialized.")
|
154
|
+
return
|
155
|
+
}
|
156
|
+
|
157
|
+
// 2. Build the request object from the stored properties.
|
158
|
+
// This part of your original code was correct.
|
159
|
+
val request = ExperienceRequest.Builder()
|
160
|
+
.debug(true)
|
161
|
+
.tags(tags)
|
162
|
+
.zone(zoneId)
|
163
|
+
.referer(referrer)
|
164
|
+
.customVariables(customVariables.mapValues { listOf(it.value) })
|
165
|
+
.url(url)
|
166
|
+
.userToken(userToken)
|
167
|
+
.build()
|
168
|
+
|
169
|
+
// 3. Create a listener to handle the asynchronous response from the Piano SDK.
|
170
|
+
val listener = ExecuteExperienceListener { events ->
|
171
|
+
// This code runs when the SDK gets a successful response.
|
172
|
+
try {
|
173
|
+
// We need to convert the list of Piano 'Event' objects
|
174
|
+
// into a WritableArray of WritableMaps that React Native can understand.
|
175
|
+
val eventsArray = Arguments.createArray()
|
176
|
+
|
177
|
+
for (event in events) {
|
178
|
+
val eventMap = Arguments.createMap()
|
179
|
+
eventMap.putString("eventType", event.eventType)
|
180
|
+
eventMap.putString("experienceId", event.experienceId)
|
181
|
+
// Add any other event data you need to this map.
|
182
|
+
// For example, for a 'showTemplate' event:
|
183
|
+
// if (event.eventData is ShowTemplateEventParams) {
|
184
|
+
// eventMap.putString("templateUrl", (event.eventData as ShowTemplateEventParams).templateUrl)
|
185
|
+
// }
|
186
|
+
eventsArray.pushMap(eventMap)
|
187
|
+
}
|
188
|
+
|
189
|
+
// 4. Resolve the promise with the array of events.
|
190
|
+
promise.resolve(eventsArray)
|
191
|
+
|
192
|
+
} catch (e: Exception) {
|
193
|
+
promise.reject("DATA_CONVERSION_ERROR", "Failed to convert event data.", e)
|
194
|
+
}
|
195
|
+
}
|
196
|
+
|
197
|
+
// 5. Create a listener for any errors.
|
198
|
+
val errorListener = Consumer<Exception> { e ->
|
199
|
+
promise.reject("EXECUTE_ERROR", "Piano SDK execution failed.", e)
|
200
|
+
}
|
201
|
+
|
202
|
+
// 6. Finally, execute the request with the composer, passing the request and listeners.
|
203
|
+
composer.getExperience(request, listener, errorListener)
|
204
|
+
}
|
205
|
+
|
206
|
+
@ReactMethod
|
207
|
+
fun executeComposer(promise: Promise) {
|
208
|
+
try {
|
209
|
+
val composer = Composer.getInstance()
|
210
|
+
if (composer == null) {
|
211
|
+
promise.reject("NOT_INITIALIZED", "Piano Composer is not initialized.")
|
212
|
+
return
|
213
|
+
}
|
214
|
+
|
215
|
+
// Execute the composer with current state
|
216
|
+
val request = ExperienceRequest.Builder()
|
217
|
+
.debug(true)
|
218
|
+
.tags(tags)
|
219
|
+
.zone(zoneId)
|
220
|
+
.referer(referrer)
|
221
|
+
.customVariables(customVariables.mapValues { listOf(it.value) })
|
222
|
+
.url(url)
|
223
|
+
.userToken(userToken)
|
224
|
+
.build()
|
225
|
+
|
226
|
+
val listener = ExecuteExperienceListener { events ->
|
227
|
+
promise.resolve(true)
|
228
|
+
}
|
229
|
+
|
230
|
+
val errorListener = Consumer<Exception> { e ->
|
231
|
+
promise.reject("EXECUTE_ERROR", "Piano SDK execution failed.", e)
|
232
|
+
}
|
233
|
+
|
234
|
+
composer.getExperience(request, listener, errorListener)
|
235
|
+
} catch (e: Exception) {
|
236
|
+
promise.reject("EXECUTE_ERROR", "Error executing composer", e)
|
237
|
+
}
|
238
|
+
}
|
239
|
+
|
240
|
+
@ReactMethod
|
241
|
+
fun showLogin(promise: Promise) {
|
242
|
+
try {
|
243
|
+
val composer = Composer.getInstance()
|
244
|
+
if (composer == null) {
|
245
|
+
promise.reject("NOT_INITIALIZED", "Piano Composer is not initialized.")
|
246
|
+
return
|
247
|
+
}
|
248
|
+
|
249
|
+
val listener = ShowLoginListener { loginResult ->
|
250
|
+
promise.resolve(loginResult)
|
251
|
+
}
|
252
|
+
|
253
|
+
composer.showLogin(listener)
|
254
|
+
} catch (e: Exception) {
|
255
|
+
promise.reject("LOGIN_ERROR", "Error showing login", e)
|
256
|
+
}
|
257
|
+
}
|
258
|
+
|
259
|
+
@ReactMethod
|
260
|
+
fun showTemplate(promise: Promise) {
|
261
|
+
try {
|
262
|
+
val composer = Composer.getInstance()
|
263
|
+
if (composer == null) {
|
264
|
+
promise.reject("NOT_INITIALIZED", "Piano Composer is not initialized.")
|
265
|
+
return
|
266
|
+
}
|
267
|
+
|
268
|
+
val request = ExperienceRequest.Builder()
|
269
|
+
.debug(true)
|
270
|
+
.tags(tags)
|
271
|
+
.zone(zoneId)
|
272
|
+
.referer(referrer)
|
273
|
+
.customVariables(customVariables.mapValues { listOf(it.value) })
|
274
|
+
.url(url)
|
275
|
+
.userToken(userToken)
|
276
|
+
.build()
|
277
|
+
|
278
|
+
val listener = ExecuteExperienceListener { events ->
|
279
|
+
promise.resolve(true)
|
280
|
+
}
|
281
|
+
|
282
|
+
val errorListener = Consumer<Exception> { e ->
|
283
|
+
promise.reject("TEMPLATE_ERROR", "Error showing template", e)
|
284
|
+
}
|
285
|
+
|
286
|
+
composer.getExperience(request, listener, errorListener)
|
287
|
+
} catch (e: Exception) {
|
288
|
+
promise.reject("TEMPLATE_ERROR", "Error showing template", e)
|
289
|
+
}
|
290
|
+
}
|
291
|
+
|
292
|
+
@ReactMethod
|
293
|
+
fun showForm(promise: Promise) {
|
294
|
+
try {
|
295
|
+
val composer = Composer.getInstance()
|
296
|
+
if (composer == null) {
|
297
|
+
promise.reject("NOT_INITIALIZED", "Piano Composer is not initialized.")
|
298
|
+
return
|
299
|
+
}
|
300
|
+
|
301
|
+
val request = ExperienceRequest.Builder()
|
302
|
+
.debug(true)
|
303
|
+
.tags(tags)
|
304
|
+
.zone(zoneId)
|
305
|
+
.referer(referrer)
|
306
|
+
.customVariables(customVariables.mapValues { listOf(it.value) })
|
307
|
+
.url(url)
|
308
|
+
.userToken(userToken)
|
309
|
+
.build()
|
310
|
+
|
311
|
+
val listener = ExecuteExperienceListener { events ->
|
312
|
+
promise.resolve(true)
|
313
|
+
}
|
314
|
+
|
315
|
+
val errorListener = Consumer<Exception> { e ->
|
316
|
+
promise.reject("FORM_ERROR", "Error showing form", e)
|
317
|
+
}
|
318
|
+
|
319
|
+
composer.getExperience(request, listener, errorListener)
|
320
|
+
} catch (e: Exception) {
|
321
|
+
promise.reject("FORM_ERROR", "Error showing form", e)
|
322
|
+
}
|
323
|
+
}
|
324
|
+
|
325
|
+
@ReactMethod
|
326
|
+
fun showRecommendations(promise: Promise) {
|
327
|
+
try {
|
328
|
+
val composer = Composer.getInstance()
|
329
|
+
if (composer == null) {
|
330
|
+
promise.reject("NOT_INITIALIZED", "Piano Composer is not initialized.")
|
331
|
+
return
|
332
|
+
}
|
333
|
+
|
334
|
+
val request = ExperienceRequest.Builder()
|
335
|
+
.debug(true)
|
336
|
+
.tags(tags)
|
337
|
+
.zone(zoneId)
|
338
|
+
.referer(referrer)
|
339
|
+
.customVariables(customVariables.mapValues { listOf(it.value) })
|
340
|
+
.url(url)
|
341
|
+
.userToken(userToken)
|
342
|
+
.build()
|
343
|
+
|
344
|
+
val listener = ExecuteExperienceListener { events ->
|
345
|
+
promise.resolve(true)
|
346
|
+
}
|
347
|
+
|
348
|
+
val errorListener = Consumer<Exception> { e ->
|
349
|
+
promise.reject("RECOMMENDATIONS_ERROR", "Error showing recommendations", e)
|
350
|
+
}
|
351
|
+
|
352
|
+
composer.getExperience(request, listener, errorListener)
|
353
|
+
} catch (e: Exception) {
|
354
|
+
promise.reject("RECOMMENDATIONS_ERROR", "Error showing recommendations", e)
|
355
|
+
}
|
356
|
+
}
|
357
|
+
|
358
|
+
@ReactMethod
|
359
|
+
fun nonSite(promise: Promise) {
|
360
|
+
try {
|
361
|
+
val composer = Composer.getInstance()
|
362
|
+
if (composer == null) {
|
363
|
+
promise.reject("NOT_INITIALIZED", "Piano Composer is not initialized.")
|
364
|
+
return
|
365
|
+
}
|
366
|
+
|
367
|
+
val request = ExperienceRequest.Builder()
|
368
|
+
.debug(true)
|
369
|
+
.tags(tags)
|
370
|
+
.zone(zoneId)
|
371
|
+
.referer(referrer)
|
372
|
+
.customVariables(customVariables.mapValues { listOf(it.value) })
|
373
|
+
.url(url)
|
374
|
+
.userToken(userToken)
|
375
|
+
.build()
|
376
|
+
|
377
|
+
val listener = ExecuteExperienceListener { events ->
|
378
|
+
promise.resolve(true)
|
379
|
+
}
|
380
|
+
|
381
|
+
val errorListener = Consumer<Exception> { e ->
|
382
|
+
promise.reject("NONSITE_ERROR", "Error executing nonSite", e)
|
383
|
+
}
|
384
|
+
|
385
|
+
composer.getExperience(request, listener, errorListener)
|
386
|
+
} catch (e: Exception) {
|
387
|
+
promise.reject("NONSITE_ERROR", "Error executing nonSite", e)
|
388
|
+
}
|
389
|
+
}
|
390
|
+
|
391
|
+
@ReactMethod
|
392
|
+
fun userSegmentTrue(promise: Promise) {
|
393
|
+
try {
|
394
|
+
val composer = Composer.getInstance()
|
395
|
+
if (composer == null) {
|
396
|
+
promise.reject("NOT_INITIALIZED", "Piano Composer is not initialized.")
|
397
|
+
return
|
398
|
+
}
|
399
|
+
|
400
|
+
val request = ExperienceRequest.Builder()
|
401
|
+
.debug(true)
|
402
|
+
.tags(tags)
|
403
|
+
.zone(zoneId)
|
404
|
+
.referer(referrer)
|
405
|
+
.customVariables(customVariables.mapValues { listOf(it.value) })
|
406
|
+
.url(url)
|
407
|
+
.userToken(userToken)
|
408
|
+
.build()
|
409
|
+
|
410
|
+
val listener = ExecuteExperienceListener { events ->
|
411
|
+
promise.resolve(true)
|
412
|
+
}
|
413
|
+
|
414
|
+
val errorListener = Consumer<Exception> { e ->
|
415
|
+
promise.reject("USERSEGMENT_ERROR", "Error executing userSegmentTrue", e)
|
416
|
+
}
|
417
|
+
|
418
|
+
composer.getExperience(request, listener, errorListener)
|
419
|
+
} catch (e: Exception) {
|
420
|
+
promise.reject("USERSEGMENT_ERROR", "Error executing userSegmentTrue", e)
|
421
|
+
}
|
422
|
+
}
|
423
|
+
|
424
|
+
@ReactMethod
|
425
|
+
fun userSegmentFalse(promise: Promise) {
|
426
|
+
try {
|
427
|
+
val composer = Composer.getInstance()
|
428
|
+
if (composer == null) {
|
429
|
+
promise.reject("NOT_INITIALIZED", "Piano Composer is not initialized.")
|
430
|
+
return
|
431
|
+
}
|
432
|
+
|
433
|
+
val request = ExperienceRequest.Builder()
|
434
|
+
.debug(true)
|
435
|
+
.tags(tags)
|
436
|
+
.zone(zoneId)
|
437
|
+
.referer(referrer)
|
438
|
+
.customVariables(customVariables.mapValues { listOf(it.value) })
|
439
|
+
.url(url)
|
440
|
+
.userToken(userToken)
|
441
|
+
.build()
|
442
|
+
|
443
|
+
val listener = ExecuteExperienceListener { events ->
|
444
|
+
promise.resolve(true)
|
445
|
+
}
|
446
|
+
|
447
|
+
val errorListener = Consumer<Exception> { e ->
|
448
|
+
promise.reject("USERSEGMENT_ERROR", "Error executing userSegmentFalse", e)
|
449
|
+
}
|
450
|
+
|
451
|
+
composer.getExperience(request, listener, errorListener)
|
452
|
+
} catch (e: Exception) {
|
453
|
+
promise.reject("USERSEGMENT_ERROR", "Error executing userSegmentFalse", e)
|
454
|
+
}
|
455
|
+
}
|
456
|
+
|
457
|
+
@ReactMethod
|
458
|
+
fun meterActive(promise: Promise) {
|
459
|
+
try {
|
460
|
+
val composer = Composer.getInstance()
|
461
|
+
if (composer == null) {
|
462
|
+
promise.reject("NOT_INITIALIZED", "Piano Composer is not initialized.")
|
463
|
+
return
|
464
|
+
}
|
465
|
+
|
466
|
+
val request = ExperienceRequest.Builder()
|
467
|
+
.debug(true)
|
468
|
+
.tags(tags)
|
469
|
+
.zone(zoneId)
|
470
|
+
.referer(referrer)
|
471
|
+
.customVariables(customVariables.mapValues { listOf(it.value) })
|
472
|
+
.url(url)
|
473
|
+
.userToken(userToken)
|
474
|
+
.build()
|
475
|
+
|
476
|
+
val listener = ExecuteExperienceListener { events ->
|
477
|
+
promise.resolve(true)
|
478
|
+
}
|
479
|
+
|
480
|
+
val errorListener = Consumer<Exception> { e ->
|
481
|
+
promise.reject("METER_ERROR", "Error executing meterActive", e)
|
482
|
+
}
|
483
|
+
|
484
|
+
composer.getExperience(request, listener, errorListener)
|
485
|
+
} catch (e: Exception) {
|
486
|
+
promise.reject("METER_ERROR", "Error executing meterActive", e)
|
487
|
+
}
|
488
|
+
}
|
489
|
+
|
490
|
+
@ReactMethod
|
491
|
+
fun meterExpired(promise: Promise) {
|
492
|
+
try {
|
493
|
+
val composer = Composer.getInstance()
|
494
|
+
if (composer == null) {
|
495
|
+
promise.reject("NOT_INITIALIZED", "Piano Composer is not initialized.")
|
496
|
+
return
|
497
|
+
}
|
498
|
+
|
499
|
+
val request = ExperienceRequest.Builder()
|
500
|
+
.debug(true)
|
501
|
+
.tags(tags)
|
502
|
+
.zone(zoneId)
|
503
|
+
.referer(referrer)
|
504
|
+
.customVariables(customVariables.mapValues { listOf(it.value) })
|
505
|
+
.url(url)
|
506
|
+
.userToken(userToken)
|
507
|
+
.build()
|
508
|
+
|
509
|
+
val listener = ExecuteExperienceListener { events ->
|
510
|
+
promise.resolve(true)
|
511
|
+
}
|
512
|
+
|
513
|
+
val errorListener = Consumer<Exception> { e ->
|
514
|
+
promise.reject("METER_ERROR", "Error executing meterExpired", e)
|
515
|
+
}
|
516
|
+
|
517
|
+
composer.getExperience(request, listener, errorListener)
|
518
|
+
} catch (e: Exception) {
|
519
|
+
promise.reject("METER_ERROR", "Error executing meterExpired", e)
|
520
|
+
}
|
521
|
+
}
|
522
|
+
|
523
|
+
@ReactMethod
|
524
|
+
fun composerExecutionCompleted(promise: Promise) {
|
525
|
+
try {
|
526
|
+
val composer = Composer.getInstance()
|
527
|
+
if (composer == null) {
|
528
|
+
promise.reject("NOT_INITIALIZED", "Piano Composer is not initialized.")
|
529
|
+
return
|
530
|
+
}
|
531
|
+
|
532
|
+
val request = ExperienceRequest.Builder()
|
533
|
+
.debug(true)
|
534
|
+
.tags(tags)
|
535
|
+
.zone(zoneId)
|
536
|
+
.referer(referrer)
|
537
|
+
.customVariables(customVariables.mapValues { listOf(it.value) })
|
538
|
+
.url(url)
|
539
|
+
.userToken(userToken)
|
540
|
+
.build()
|
541
|
+
|
542
|
+
val listener = ExecuteExperienceListener { events ->
|
543
|
+
promise.resolve(true)
|
544
|
+
}
|
545
|
+
|
546
|
+
val errorListener = Consumer<Exception> { e ->
|
547
|
+
promise.reject("COMPLETION_ERROR", "Error executing composerExecutionCompleted", e)
|
548
|
+
}
|
549
|
+
|
550
|
+
composer.getExperience(request, listener, errorListener)
|
551
|
+
} catch (e: Exception) {
|
552
|
+
promise.reject("COMPLETION_ERROR", "Error executing composerExecutionCompleted", e)
|
553
|
+
}
|
18
554
|
}
|
19
555
|
|
20
556
|
companion object {
|
@@ -18,15 +18,15 @@ class SdkPianoioPackage : BaseReactPackage() {
|
|
18
18
|
|
19
19
|
override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
|
20
20
|
return ReactModuleInfoProvider {
|
21
|
-
val moduleInfos: MutableMap<String, ReactModuleInfo> = HashMap()
|
22
|
-
moduleInfos
|
21
|
+
val moduleInfos: MutableMap<String, ReactModuleInfo> = HashMap<String, ReactModuleInfo>()
|
22
|
+
moduleInfos.put(SdkPianoioModule.NAME, ReactModuleInfo(
|
23
23
|
SdkPianoioModule.NAME,
|
24
24
|
SdkPianoioModule.NAME,
|
25
25
|
false, // canOverrideExistingModule
|
26
26
|
false, // needsEagerInit
|
27
27
|
false, // isCxxModule
|
28
28
|
true // isTurboModule
|
29
|
-
)
|
29
|
+
))
|
30
30
|
moduleInfos
|
31
31
|
}
|
32
32
|
}
|