@snowplow/react-native-tracker 0.2.0 → 1.1.0

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.
@@ -1,4 +1,3 @@
1
-
2
1
  package com.snowplowanalytics.react.tracker;
3
2
 
4
3
  import com.facebook.react.bridge.ReactApplicationContext;
@@ -8,21 +7,44 @@ import com.facebook.react.bridge.Promise;
8
7
 
9
8
  import com.facebook.react.bridge.ReadableArray;
10
9
  import com.facebook.react.bridge.ReadableMap;
10
+
11
+ import com.snowplowanalytics.snowplow.Snowplow;
12
+ import com.snowplowanalytics.snowplow.configuration.Configuration;
13
+ import com.snowplowanalytics.snowplow.configuration.EmitterConfiguration;
14
+ import com.snowplowanalytics.snowplow.configuration.GdprConfiguration;
15
+ import com.snowplowanalytics.snowplow.configuration.NetworkConfiguration;
16
+ import com.snowplowanalytics.snowplow.configuration.RemoteConfiguration;
17
+ import com.snowplowanalytics.snowplow.configuration.SessionConfiguration;
18
+ import com.snowplowanalytics.snowplow.configuration.TrackerConfiguration;
19
+ import com.snowplowanalytics.snowplow.configuration.SubjectConfiguration;
20
+ import com.snowplowanalytics.snowplow.configuration.GlobalContextsConfiguration;
21
+ import com.snowplowanalytics.snowplow.event.DeepLinkReceived;
22
+ import com.snowplowanalytics.snowplow.event.MessageNotification;
23
+ import com.snowplowanalytics.snowplow.globalcontexts.GlobalContext;
24
+ import com.snowplowanalytics.snowplow.controller.TrackerController;
25
+ import com.snowplowanalytics.snowplow.payload.SelfDescribingJson;
26
+ import com.snowplowanalytics.snowplow.event.SelfDescribing;
27
+ import com.snowplowanalytics.snowplow.event.ScreenView;
28
+ import com.snowplowanalytics.snowplow.event.Structured;
29
+ import com.snowplowanalytics.snowplow.event.PageView;
30
+ import com.snowplowanalytics.snowplow.event.Timing;
31
+ import com.snowplowanalytics.snowplow.event.ConsentGranted;
32
+ import com.snowplowanalytics.snowplow.event.ConsentWithdrawn;
33
+ import com.snowplowanalytics.snowplow.event.EcommerceTransactionItem;
34
+ import com.snowplowanalytics.snowplow.event.EcommerceTransaction;
35
+ import com.snowplowanalytics.snowplow.network.HttpMethod;
36
+ import com.snowplowanalytics.snowplow.internal.utils.Util;
37
+ import com.snowplowanalytics.snowplow.util.Size;
38
+
39
+ import java.util.List;
40
+ import java.util.ArrayList;
41
+
11
42
  import com.snowplowanalytics.react.util.EventUtil;
12
- import com.snowplowanalytics.snowplow.tracker.Emitter;
13
- import com.snowplowanalytics.snowplow.tracker.Tracker;
14
- import com.snowplowanalytics.snowplow.tracker.emitter.HttpMethod;
15
- import com.snowplowanalytics.snowplow.tracker.emitter.RequestSecurity;
16
- import com.snowplowanalytics.snowplow.tracker.events.SelfDescribing;
17
- import com.snowplowanalytics.snowplow.tracker.events.Structured;
18
- import com.snowplowanalytics.snowplow.tracker.events.ScreenView;
19
- import com.snowplowanalytics.snowplow.tracker.events.PageView;
43
+ import com.snowplowanalytics.react.util.ConfigUtil;
20
44
 
21
45
  public class RNSnowplowTrackerModule extends ReactContextBaseJavaModule {
22
46
 
23
47
  private final ReactApplicationContext reactContext;
24
- private Tracker tracker;
25
- private Emitter emitter;
26
48
 
27
49
  public RNSnowplowTrackerModule(ReactApplicationContext reactContext) {
28
50
  super(reactContext);
@@ -35,163 +57,663 @@ public class RNSnowplowTrackerModule extends ReactContextBaseJavaModule {
35
57
  }
36
58
 
37
59
  @ReactMethod
38
- public void initialize(ReadableMap options,
39
- Promise promise) {
60
+ public void createTracker(ReadableMap argmap,
61
+ Promise promise) {
62
+ try {
63
+ String trackerNs = argmap.getString("namespace");
64
+ ReadableMap networkConfig = argmap.getMap("networkConfig");
65
+
66
+ // NetworkConfiguration
67
+ NetworkConfiguration networkConfiguration;
68
+ if (networkConfig.hasKey("method") && !networkConfig.isNull("method")) {
69
+ String method = networkConfig.getString("method");
70
+ networkConfiguration = new NetworkConfiguration(
71
+ networkConfig.getString("endpoint"),
72
+ ("get".equalsIgnoreCase(method) ? HttpMethod.GET : HttpMethod.POST));
73
+ } else {
74
+ networkConfiguration = new NetworkConfiguration(networkConfig.getString("endpoint"));
75
+ }
76
+
77
+ // Configurations
78
+ List<Configuration> controllers = new ArrayList<Configuration>();
79
+
80
+ // TrackerConfiguration
81
+ if (argmap.hasKey("trackerConfig")) {
82
+ ReadableMap trackerConfig = argmap.getMap("trackerConfig");
83
+ TrackerConfiguration trackerConfiguration = ConfigUtil.mkTrackerConfiguration(trackerConfig, this.reactContext);
84
+ controllers.add(trackerConfiguration);
85
+ }
86
+
87
+ // SessionConfiguration
88
+ if (argmap.hasKey("sessionConfig")) {
89
+ ReadableMap sessionConfig = argmap.getMap("sessionConfig");
90
+ SessionConfiguration sessionConfiguration = ConfigUtil.mkSessionConfiguration(sessionConfig);
91
+ controllers.add(sessionConfiguration);
92
+ }
93
+
94
+ // EmitterConfiguration
95
+ if (argmap.hasKey("emitterConfig")) {
96
+ ReadableMap emitterConfig = argmap.getMap("emitterConfig");
97
+ EmitterConfiguration emitterConfiguration = ConfigUtil.mkEmitterConfiguration(emitterConfig);
98
+ controllers.add(emitterConfiguration);
99
+ }
40
100
 
41
- // throw if index.js has failed to pass a complete options object
42
- if (!(options.hasKey("endpoint") &&
43
- options.hasKey("namespace") &&
44
- options.hasKey("appId") &&
45
- options.hasKey("method") &&
46
- options.hasKey("protocol") &&
47
- options.hasKey("base64Encoded") &&
48
- options.hasKey("platformContext") &&
49
- options.hasKey("applicationContext") &&
50
- options.hasKey("lifecycleEvents") &&
51
- options.hasKey("screenContext") &&
52
- options.hasKey("sessionContext") &&
53
- options.hasKey("foregroundTimeout") &&
54
- options.hasKey("backgroundTimeout") &&
55
- options.hasKey("checkInterval") &&
56
- options.hasKey("installTracking"))) {
57
-
58
- promise.reject("ERROR", "SnowplowTracker: initialize() method - missing parameter with no default found");
59
- return;
60
- }
61
-
62
- this.emitter = new Emitter.EmitterBuilder(options.getString("endpoint"), this.reactContext)
63
- .method(options.getString("method").equalsIgnoreCase("post") ? HttpMethod.POST : HttpMethod.GET)
64
- .security(options.getString("protocol").equalsIgnoreCase("https") ? RequestSecurity.HTTPS : RequestSecurity.HTTP)
65
- .build();
66
-
67
- com.snowplowanalytics.snowplow.tracker.Subject subject = new com.snowplowanalytics.snowplow.tracker.Subject.SubjectBuilder()
68
- .build();
69
-
70
- this.tracker = Tracker.init(new Tracker
71
- .TrackerBuilder(this.emitter, options.getString("namespace"), options.getString("appId"), this.reactContext)
72
- .subject(subject)
73
- .base64(options.getBoolean("base64Encoded"))
74
- .mobileContext(options.getBoolean("platformContext"))
75
- .applicationContext(options.getBoolean("applicationContext"))
76
- .sessionContext(options.getBoolean("sessionContext"))
77
- .sessionCheckInterval(options.getInt("checkInterval"))
78
- .foregroundTimeout(options.getInt("foregroundTimeout"))
79
- .backgroundTimeout(options.getInt("backgroundTimeout"))
80
- .lifecycleEvents(options.getBoolean("lifecycleEvents"))
81
- .screenContext(options.getBoolean("screenContext"))
82
- .installTracking(options.getBoolean("installTracking"))
83
- .build()
84
- );
85
-
86
- if (this.tracker != null) {
87
- promise.resolve(true);
88
- } else {
89
- promise.reject("ERROR", "SnowplowTracker: initialize() method - tracker initialisation failed");
90
- return;
91
- }
92
- }
93
-
94
- @ReactMethod
95
- public void setSubjectData(ReadableMap options,
101
+ // SubjectConfiguration
102
+ if (argmap.hasKey("subjectConfig")) {
103
+ ReadableMap subjectConfig = argmap.getMap("subjectConfig");
104
+ SubjectConfiguration subjectConfiguration = ConfigUtil.mkSubjectConfiguration(subjectConfig);
105
+ controllers.add(subjectConfiguration);
106
+ }
107
+
108
+ // GdprConfiguration
109
+ if (argmap.hasKey("gdprConfig")) {
110
+ ReadableMap gdprConfig = argmap.getMap("gdprConfig");
111
+ GdprConfiguration gdprConfiguration = ConfigUtil.mkGdprConfiguration(gdprConfig);
112
+ controllers.add(gdprConfiguration);
113
+ }
114
+
115
+ // GCConfiguration
116
+ if (argmap.hasKey("gcConfig")) {
117
+ ReadableArray gcConfig = argmap.getArray("gcConfig");
118
+ GlobalContextsConfiguration gcConfiguration = ConfigUtil.mkGCConfiguration(gcConfig);
119
+ controllers.add(gcConfiguration);
120
+ }
121
+
122
+ // create the tracker
123
+ Snowplow.createTracker(this.reactContext,
124
+ trackerNs,
125
+ networkConfiguration,
126
+ controllers.toArray(new Configuration[controllers.size()]));
127
+
128
+ promise.resolve(true);
129
+
130
+ } catch(Throwable t) {
131
+ promise.reject("ERROR", t.getMessage());
132
+ }
133
+ }
134
+
135
+ @ReactMethod
136
+ public void removeTracker(ReadableMap details,
96
137
  Promise promise) {
138
+ try {
139
+ String namespace = details.getString("tracker");
140
+ TrackerController trackerController = Snowplow.getTracker(namespace);
141
+
142
+ promise.resolve(Snowplow.removeTracker(trackerController));
143
+
144
+ } catch(Throwable t) {
145
+ promise.reject("ERROR", t.getMessage());
146
+ }
147
+ }
148
+
149
+ @ReactMethod
150
+ public void removeAllTrackers(Promise promise) {
151
+ try {
152
+ Snowplow.removeAllTrackers();
153
+ promise.resolve(true);
154
+
155
+ } catch(Throwable t) {
156
+ promise.reject("ERROR", t.getMessage());
157
+ }
158
+ }
159
+
160
+ @ReactMethod
161
+ public void trackSelfDescribingEvent(ReadableMap details,
162
+ Promise promise) {
163
+ try {
164
+ String namespace = details.getString("tracker");
165
+ ReadableMap argmap = details.getMap("eventData");
166
+ ReadableArray contexts = details.getArray("contexts");
167
+
168
+ TrackerController trackerController = Snowplow.getTracker(namespace);
169
+
170
+ SelfDescribingJson sdj = EventUtil.createSelfDescribingJson(argmap);
171
+ SelfDescribing event = new SelfDescribing(sdj);
172
+
173
+ List<SelfDescribingJson> evCtxts = EventUtil.createContexts(contexts);
174
+ event.customContexts.addAll(evCtxts);
175
+
176
+ trackerController.track(event);
177
+ promise.resolve(true);
178
+
179
+ } catch(Throwable t) {
180
+ promise.reject("ERROR", t.getMessage());
181
+ }
182
+ }
183
+
184
+ @ReactMethod
185
+ public void trackStructuredEvent(ReadableMap details,
186
+ Promise promise) {
187
+ try {
188
+ String namespace = details.getString("tracker");
189
+ ReadableMap argmap = details.getMap("eventData");
190
+ ReadableArray contexts = details.getArray("contexts");
191
+
192
+ TrackerController trackerController = Snowplow.getTracker(namespace);
193
+
194
+ Structured event = EventUtil.createStructuredEvent(argmap);
195
+
196
+ List<SelfDescribingJson> evCtxts = EventUtil.createContexts(contexts);
197
+ event.customContexts.addAll(evCtxts);
198
+
199
+ trackerController.track(event);
200
+ promise.resolve(true);
201
+
202
+ } catch(Throwable t) {
203
+ promise.reject("ERROR", t.getMessage());
204
+ }
205
+ }
206
+
207
+ @ReactMethod
208
+ public void trackScreenViewEvent(ReadableMap details,
209
+ Promise promise) {
210
+ try {
211
+ String namespace = details.getString("tracker");
212
+ ReadableMap argmap = details.getMap("eventData");
213
+ ReadableArray contexts = details.getArray("contexts");
214
+
215
+ TrackerController trackerController = Snowplow.getTracker(namespace);
216
+
217
+ ScreenView event = EventUtil.createScreenViewEvent(argmap);
218
+
219
+ List<SelfDescribingJson> evCtxts = EventUtil.createContexts(contexts);
220
+ event.customContexts.addAll(evCtxts);
221
+
222
+ trackerController.track(event);
223
+ promise.resolve(true);
224
+
225
+ } catch(Throwable t) {
226
+ promise.reject("ERROR", t.getMessage());
227
+ }
228
+ }
229
+
230
+ @ReactMethod
231
+ public void trackPageViewEvent(ReadableMap details,
232
+ Promise promise) {
233
+ try {
234
+ String namespace = details.getString("tracker");
235
+ ReadableMap argmap = details.getMap("eventData");
236
+ ReadableArray contexts = details.getArray("contexts");
237
+
238
+ TrackerController trackerController = Snowplow.getTracker(namespace);
239
+
240
+ PageView event = EventUtil.createPageViewEvent(argmap);
241
+
242
+ List<SelfDescribingJson> evCtxts = EventUtil.createContexts(contexts);
243
+ event.customContexts.addAll(evCtxts);
244
+
245
+ trackerController.track(event);
246
+ promise.resolve(true);
247
+
248
+ } catch(Throwable t) {
249
+ promise.reject("ERROR", t.getMessage());
250
+ }
251
+ }
252
+
253
+ @ReactMethod
254
+ public void trackTimingEvent(ReadableMap details,
255
+ Promise promise) {
256
+ try {
257
+ String namespace = details.getString("tracker");
258
+ ReadableMap argmap = details.getMap("eventData");
259
+ ReadableArray contexts = details.getArray("contexts");
260
+
261
+ TrackerController trackerController = Snowplow.getTracker(namespace);
262
+
263
+ Timing event = EventUtil.createTimingEvent(argmap);
264
+
265
+ List<SelfDescribingJson> evCtxts = EventUtil.createContexts(contexts);
266
+ event.customContexts.addAll(evCtxts);
267
+
268
+ trackerController.track(event);
269
+ promise.resolve(true);
270
+
271
+ } catch(Throwable t) {
272
+ promise.reject("ERROR", t.getMessage());
273
+ }
274
+ }
275
+
276
+ @ReactMethod
277
+ public void trackConsentGrantedEvent(ReadableMap details,
278
+ Promise promise) {
279
+ try {
280
+ String namespace = details.getString("tracker");
281
+ ReadableMap argmap = details.getMap("eventData");
282
+ ReadableArray contexts = details.getArray("contexts");
283
+
284
+ TrackerController trackerController = Snowplow.getTracker(namespace);
285
+
286
+ ConsentGranted event = EventUtil.createConsentGrantedEvent(argmap);
287
+
288
+ List<SelfDescribingJson> evCtxts = EventUtil.createContexts(contexts);
289
+ event.customContexts.addAll(evCtxts);
290
+
291
+ trackerController.track(event);
292
+ promise.resolve(true);
293
+
294
+ } catch(Throwable t) {
295
+ promise.reject("ERROR", t.getMessage());
296
+ }
297
+ }
298
+
299
+ @ReactMethod
300
+ public void trackConsentWithdrawnEvent(ReadableMap details,
301
+ Promise promise) {
302
+ try {
303
+ String namespace = details.getString("tracker");
304
+ ReadableMap argmap = details.getMap("eventData");
305
+ ReadableArray contexts = details.getArray("contexts");
306
+
307
+ TrackerController trackerController = Snowplow.getTracker(namespace);
308
+
309
+ ConsentWithdrawn event = EventUtil.createConsentWithdrawnEvent(argmap);
310
+
311
+ List<SelfDescribingJson> evCtxts = EventUtil.createContexts(contexts);
312
+ event.customContexts.addAll(evCtxts);
313
+
314
+ trackerController.track(event);
315
+ promise.resolve(true);
316
+
317
+ } catch(Throwable t) {
318
+ promise.reject("ERROR", t.getMessage());
319
+ }
320
+ }
321
+
322
+ @ReactMethod
323
+ public void trackEcommerceTransactionEvent(ReadableMap details,
324
+ Promise promise) {
325
+ try {
326
+ String namespace = details.getString("tracker");
327
+ ReadableMap argmap = details.getMap("eventData");
328
+ ReadableArray contexts = details.getArray("contexts");
97
329
 
98
- if (options.hasKey("userId")) {
99
- tracker.instance().getSubject().setUserId(options.getString("userId"));
330
+ TrackerController trackerController = Snowplow.getTracker(namespace);
331
+
332
+ EcommerceTransaction event = EventUtil.createEcommerceTransactionEvent(argmap);
333
+
334
+ List<SelfDescribingJson> evCtxts = EventUtil.createContexts(contexts);
335
+ event.customContexts.addAll(evCtxts);
336
+
337
+ trackerController.track(event);
338
+ promise.resolve(true);
339
+
340
+ } catch(Throwable t) {
341
+ promise.reject("ERROR", t.getMessage());
342
+ }
343
+ }
344
+
345
+ @ReactMethod
346
+ public void trackDeepLinkReceivedEvent(ReadableMap details,
347
+ Promise promise) {
348
+ try {
349
+ String namespace = details.getString("tracker");
350
+ ReadableMap argmap = details.getMap("eventData");
351
+ ReadableArray contexts = details.getArray("contexts");
352
+
353
+ TrackerController trackerController = Snowplow.getTracker(namespace);
354
+
355
+ DeepLinkReceived event = EventUtil.createDeepLinkReceivedEvent(argmap);
356
+
357
+ List<SelfDescribingJson> evCtxts = EventUtil.createContexts(contexts);
358
+ event.customContexts.addAll(evCtxts);
359
+
360
+ trackerController.track(event);
361
+ promise.resolve(true);
362
+
363
+ } catch(Throwable t) {
364
+ promise.reject("ERROR", t.getMessage());
365
+ }
366
+ }
367
+
368
+ @ReactMethod
369
+ public void trackMessageNotificationEvent(ReadableMap details,
370
+ Promise promise) {
371
+ try {
372
+ String namespace = details.getString("tracker");
373
+ ReadableMap argmap = details.getMap("eventData");
374
+ ReadableArray contexts = details.getArray("contexts");
375
+
376
+ TrackerController trackerController = Snowplow.getTracker(namespace);
377
+
378
+ MessageNotification event = EventUtil.createMessageNotificationEvent(argmap);
379
+
380
+ List<SelfDescribingJson> evCtxts = EventUtil.createContexts(contexts);
381
+ event.customContexts.addAll(evCtxts);
382
+
383
+ trackerController.track(event);
384
+ promise.resolve(true);
385
+
386
+ } catch(Throwable t) {
387
+ promise.reject("ERROR", t.getMessage());
388
+ }
389
+ }
390
+
391
+ @ReactMethod
392
+ public void removeGlobalContexts(ReadableMap details,
393
+ Promise promise) {
394
+ try {
395
+ String namespace = details.getString("tracker");
396
+ String tag = details.getString("removeTag");
397
+
398
+ TrackerController trackerController = Snowplow.getTracker(namespace);
399
+
400
+ trackerController.getGlobalContexts().remove(tag);
401
+ promise.resolve(true);
402
+
403
+ } catch(Throwable t) {
404
+ promise.reject("ERROR", t.getMessage());
405
+ }
406
+ }
407
+
408
+ @ReactMethod
409
+ public void addGlobalContexts(ReadableMap details,
410
+ Promise promise) {
411
+ try {
412
+ String namespace = details.getString("tracker");
413
+ ReadableMap gcArg = details.getMap("addGlobalContext");
414
+
415
+ String tag = gcArg.getString("tag");
416
+ ReadableArray globalContexts = gcArg.getArray("globalContexts") ;
417
+
418
+ List<SelfDescribingJson> staticContexts = new ArrayList<>();
419
+ for (int i = 0; i < globalContexts.size(); i++) {
420
+ SelfDescribingJson gContext = EventUtil.createSelfDescribingJson(globalContexts.getMap(i));
421
+ staticContexts.add(gContext);
422
+ }
423
+ GlobalContext gcStatic = new GlobalContext(staticContexts);
424
+
425
+ TrackerController trackerController = Snowplow.getTracker(namespace);
426
+
427
+ trackerController.getGlobalContexts().add(tag, gcStatic);
428
+ promise.resolve(true);
429
+
430
+ } catch(Throwable t) {
431
+ promise.reject("ERROR", t.getMessage());
100
432
  }
433
+ }
434
+
435
+ @ReactMethod
436
+ public void setUserId(ReadableMap details,
437
+ Promise promise) {
438
+ try {
439
+ String namespace = details.getString("tracker");
440
+ TrackerController trackerController = Snowplow.getTracker(namespace);
441
+
442
+ if (details.isNull("userId")) {
443
+ trackerController.getSubject().setUserId(null);
444
+ } else {
445
+ trackerController.getSubject().setUserId(details.getString("userId"));
446
+ }
447
+ promise.resolve(true);
101
448
 
102
- if (options.hasKey("timezone")) {
103
- tracker.instance().getSubject().setTimezone(options.getString("timezone"));
449
+ } catch(Throwable t) {
450
+ promise.reject("ERROR", t.getMessage());
104
451
  }
452
+ }
453
+
454
+ @ReactMethod
455
+ public void setNetworkUserId(ReadableMap details,
456
+ Promise promise) {
457
+ try {
458
+ String namespace = details.getString("tracker");
459
+ TrackerController trackerController = Snowplow.getTracker(namespace);
460
+
461
+ if (details.isNull("networkUserId")) {
462
+ trackerController.getSubject().setNetworkUserId(null);
463
+ } else {
464
+ trackerController.getSubject().setNetworkUserId(details.getString("networkUserId"));
465
+ }
466
+ promise.resolve(true);
105
467
 
106
- if (options.hasKey("language")) {
107
- tracker.instance().getSubject().setLanguage(options.getString("language"));
468
+ } catch(Throwable t) {
469
+ promise.reject("ERROR", t.getMessage());
108
470
  }
471
+ }
109
472
 
110
- if (options.hasKey("ipAddress")) {
111
- tracker.instance().getSubject().setIpAddress(options.getString("ipAddress"));
473
+ @ReactMethod
474
+ public void setDomainUserId(ReadableMap details,
475
+ Promise promise) {
476
+ try {
477
+ String namespace = details.getString("tracker");
478
+ TrackerController trackerController = Snowplow.getTracker(namespace);
479
+
480
+ if (details.isNull("domainUserId")) {
481
+ trackerController.getSubject().setDomainUserId(null);
482
+ } else {
483
+ trackerController.getSubject().setDomainUserId(details.getString("domainUserId"));
484
+ }
485
+ promise.resolve(true);
486
+
487
+ } catch(Throwable t) {
488
+ promise.reject("ERROR", t.getMessage());
112
489
  }
490
+ }
113
491
 
114
- if (options.hasKey("useragent")) {
115
- tracker.instance().getSubject().setUseragent(options.getString("useragent"));
492
+ @ReactMethod
493
+ public void setIpAddress(ReadableMap details,
494
+ Promise promise) {
495
+ try {
496
+ String namespace = details.getString("tracker");
497
+ TrackerController trackerController = Snowplow.getTracker(namespace);
498
+
499
+ if (details.isNull("ipAddress")) {
500
+ trackerController.getSubject().setIpAddress(null);
501
+ } else {
502
+ trackerController.getSubject().setIpAddress(details.getString("ipAddress"));
503
+ }
504
+ promise.resolve(true);
505
+
506
+ } catch(Throwable t) {
507
+ promise.reject("ERROR", t.getMessage());
116
508
  }
509
+ }
510
+
511
+ @ReactMethod
512
+ public void setUseragent(ReadableMap details,
513
+ Promise promise) {
514
+ try {
515
+ String namespace = details.getString("tracker");
516
+ TrackerController trackerController = Snowplow.getTracker(namespace);
517
+
518
+ if (details.isNull("useragent")) {
519
+ trackerController.getSubject().setUseragent(null);
520
+ } else {
521
+ trackerController.getSubject().setUseragent(details.getString("useragent"));
522
+ }
523
+ promise.resolve(true);
117
524
 
118
- if (options.hasKey("networkUserId")) {
119
- tracker.instance().getSubject().setNetworkUserId(options.getString("networkUserId"));
525
+ } catch(Throwable t) {
526
+ promise.reject("ERROR", t.getMessage());
120
527
  }
528
+ }
529
+
530
+ @ReactMethod
531
+ public void setTimezone(ReadableMap details,
532
+ Promise promise) {
533
+ try {
534
+ String namespace = details.getString("tracker");
535
+ TrackerController trackerController = Snowplow.getTracker(namespace);
536
+
537
+ if (details.isNull("timezone")) {
538
+ trackerController.getSubject().setTimezone(null);
539
+ } else {
540
+ trackerController.getSubject().setTimezone(details.getString("timezone"));
541
+ }
542
+ promise.resolve(true);
121
543
 
122
- if (options.hasKey("domainUserId")) {
123
- tracker.instance().getSubject().setDomainUserId(options.getString("domainUserId"));
544
+ } catch(Throwable t) {
545
+ promise.reject("ERROR", t.getMessage());
124
546
  }
547
+ }
125
548
 
126
- // integer values will throw an exception if set to null explicitly
127
- if (options.hasKey("viewportWidth") && options.hasKey("viewportHeight")) {
128
- if (options.isNull("viewportWidth") || options.isNull("viewportHeight")) {
129
- promise.reject("ERROR", "SnowplowTracker: setSubjectData() method - viewportWidth and viewportHeight cannot be null");
549
+ @ReactMethod
550
+ public void setLanguage(ReadableMap details,
551
+ Promise promise) {
552
+ try {
553
+ String namespace = details.getString("tracker");
554
+ TrackerController trackerController = Snowplow.getTracker(namespace);
555
+
556
+ if (details.isNull("language")) {
557
+ trackerController.getSubject().setLanguage(null);
130
558
  } else {
131
- tracker.instance().getSubject().setViewPort(options.getInt("viewportWidth"), options.getInt("viewportHeight"));
559
+ trackerController.getSubject().setLanguage(details.getString("language"));
132
560
  }
561
+ promise.resolve(true);
562
+
563
+ } catch(Throwable t) {
564
+ promise.reject("ERROR", t.getMessage());
133
565
  }
566
+ }
134
567
 
135
- if (options.hasKey("screenWidth") && options.hasKey("screenHeight")) {
136
- if (options.isNull("screenWidth") || options.isNull("screenHeight")) {
137
- promise.reject("ERROR", "SnowplowTracker: setSubjectData() method - screenWidth and screenHeight cannot be null");
568
+ @ReactMethod
569
+ public void setScreenResolution(ReadableMap details,
570
+ Promise promise) {
571
+ try {
572
+ String namespace = details.getString("tracker");
573
+ TrackerController trackerController = Snowplow.getTracker(namespace);
574
+
575
+ if (details.isNull("screenResolution")) {
576
+ trackerController.getSubject().setScreenResolution(null);
138
577
  } else {
139
- tracker.instance().getSubject().setScreenResolution(options.getInt("screenWidth"), options.getInt("screenHeight"));
578
+ ReadableArray screenRes = details.getArray("screenResolution");
579
+ int width = screenRes.getInt(0);
580
+ int height = screenRes.getInt(1);
581
+ Size screenR = new Size(width, height);
582
+
583
+ trackerController.getSubject().setScreenResolution(screenR);
140
584
  }
585
+ promise.resolve(true);
586
+
587
+ } catch(Throwable t) {
588
+ promise.reject("ERROR", t.getMessage());
141
589
  }
590
+ }
142
591
 
143
- if (options.hasKey("colorDepth")) {
144
- if (options.isNull("colorDepth")) {
145
- promise.reject("ERROR", "SnowplowTracker: setSubjectData() method - colorDepth cannot be null");
592
+ @ReactMethod
593
+ public void setScreenViewport(ReadableMap details,
594
+ Promise promise) {
595
+ try {
596
+ String namespace = details.getString("tracker");
597
+ TrackerController trackerController = Snowplow.getTracker(namespace);
598
+
599
+ if (details.isNull("screenViewport")) {
600
+ trackerController.getSubject().setScreenViewPort(null);
146
601
  } else {
147
- tracker.instance().getSubject().setColorDepth(options.getInt("colorDepth"));
602
+ ReadableArray screenView = details.getArray("screenViewport");
603
+ int width = screenView.getInt(0);
604
+ int height = screenView.getInt(1);
605
+ Size screenVP = new Size(width, height);
606
+
607
+ trackerController.getSubject().setScreenViewPort(screenVP);
148
608
  }
609
+ promise.resolve(true);
610
+
611
+ } catch(Throwable t) {
612
+ promise.reject("ERROR", t.getMessage());
149
613
  }
150
614
  }
151
615
 
152
616
  @ReactMethod
153
- public void trackSelfDescribingEvent(ReadableMap event,
154
- ReadableArray contexts) {
617
+ public void setColorDepth(ReadableMap details,
618
+ Promise promise) {
619
+ try {
620
+ String namespace = details.getString("tracker");
621
+ TrackerController trackerController = Snowplow.getTracker(namespace);
622
+
623
+ if (details.isNull("colorDepth")) {
624
+ trackerController.getSubject().setColorDepth(null);
625
+ } else {
626
+ trackerController.getSubject().setColorDepth(details.getInt("colorDepth"));
627
+ }
628
+ promise.resolve(true);
155
629
 
156
- SelfDescribing trackerEvent = EventUtil.getSelfDescribingEvent(event, contexts);
157
- if (trackerEvent != null) {
158
- tracker.track(trackerEvent);
630
+ } catch(Throwable t) {
631
+ promise.reject("ERROR", t.getMessage());
159
632
  }
160
633
  }
161
634
 
162
635
  @ReactMethod
163
- public void trackStructuredEvent(ReadableMap details,
164
- ReadableArray contexts) {
636
+ public void getSessionUserId(ReadableMap details,
637
+ Promise promise) {
638
+ try {
639
+ String namespace = details.getString("tracker");
640
+ TrackerController trackerController = Snowplow.getTracker(namespace);
641
+
642
+ String suid = trackerController.getSession().getUserId();
643
+ promise.resolve(suid);
644
+ } catch(Throwable t) {
645
+ promise.reject("ERROR", t.getMessage());
646
+ }
647
+ }
165
648
 
166
- Structured trackerEvent = EventUtil.getStructuredEvent(
167
- details,
168
- contexts);
169
- if (trackerEvent != null) {
170
- tracker.track(trackerEvent);
649
+ @ReactMethod
650
+ public void getSessionId(ReadableMap details,
651
+ Promise promise) {
652
+ try {
653
+ String namespace = details.getString("tracker");
654
+ TrackerController trackerController = Snowplow.getTracker(namespace);
655
+
656
+ String sid = trackerController.getSession().getSessionId();
657
+ promise.resolve(sid);
658
+ } catch(Throwable t) {
659
+ promise.reject("ERROR", t.getMessage());
171
660
  }
172
661
  }
173
662
 
174
663
  @ReactMethod
175
- public void trackScreenViewEvent(ReadableMap details,
176
- ReadableArray contexts) {
664
+ public void getSessionIndex(ReadableMap details,
665
+ Promise promise) {
666
+ try {
667
+ String namespace = details.getString("tracker");
668
+ TrackerController trackerController = Snowplow.getTracker(namespace);
669
+
670
+ int sidx = trackerController.getSession().getSessionIndex();
671
+ promise.resolve(sidx);
672
+ } catch(Throwable t) {
673
+ promise.reject("ERROR", t.getMessage());
674
+ }
675
+ }
177
676
 
178
- ScreenView trackerEvent = EventUtil.getScreenViewEvent(
179
- details,
180
- contexts);
181
- if (trackerEvent != null) {
182
- tracker.track(trackerEvent);
677
+ @ReactMethod
678
+ public void getIsInBackground(ReadableMap details,
679
+ Promise promise) {
680
+ try {
681
+ String namespace = details.getString("tracker");
682
+ TrackerController trackerController = Snowplow.getTracker(namespace);
683
+
684
+ boolean isInBg = trackerController.getSession().isInBackground();
685
+ promise.resolve(isInBg);
686
+ } catch(Throwable t) {
687
+ promise.reject("ERROR", t.getMessage());
183
688
  }
184
689
  }
185
690
 
186
691
  @ReactMethod
187
- public void trackPageViewEvent(ReadableMap details,
188
- ReadableArray contexts) {
692
+ public void getBackgroundIndex(ReadableMap details,
693
+ Promise promise) {
694
+ try {
695
+ String namespace = details.getString("tracker");
696
+ TrackerController trackerController = Snowplow.getTracker(namespace);
697
+
698
+ int bgIdx = trackerController.getSession().getBackgroundIndex();
699
+ promise.resolve(bgIdx);
700
+ } catch(Throwable t) {
701
+ promise.reject("ERROR", t.getMessage());
702
+ }
703
+ }
189
704
 
190
- PageView trackerEvent = EventUtil.getPageViewEvent(
191
- details,
192
- contexts);
193
- if (trackerEvent != null) {
194
- tracker.track(trackerEvent);
705
+ @ReactMethod
706
+ public void getForegroundIndex(ReadableMap details,
707
+ Promise promise) {
708
+ try {
709
+ String namespace = details.getString("tracker");
710
+ TrackerController trackerController = Snowplow.getTracker(namespace);
711
+
712
+ int fgIdx = trackerController.getSession().getForegroundIndex();
713
+ promise.resolve(fgIdx);
714
+ } catch(Throwable t) {
715
+ promise.reject("ERROR", t.getMessage());
195
716
  }
196
717
  }
718
+
197
719
  }