@convivainc/conviva-react-native-appanalytics 0.1.0 → 0.1.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.
@@ -0,0 +1,1051 @@
1
+ //
2
+ // RNConvivaAppAnalytics.m
3
+ //
4
+ // Copyright (c) 2020-2023 Snowplow Analytics Ltd. All rights reserved.
5
+ //
6
+ // This program is licensed to you under the Apache License Version 2.0,
7
+ // and you may not use this file except in compliance with the Apache License
8
+ // Version 2.0. You may obtain a copy of the Apache License Version 2.0 at
9
+ // http://www.apache.org/licenses/LICENSE-2.0.
10
+ //
11
+ // Unless required by applicable law or agreed to in writing,
12
+ // software distributed under the Apache License Version 2.0 is distributed on
13
+ // an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
14
+ // express or implied. See the Apache License Version 2.0 for the specific
15
+ // language governing permissions and limitations there under.
16
+ //
17
+ // Copyright: Copyright (c) 2023 Snowplow Analytics Ltd
18
+ // License: Apache License Version 2.0
19
+ //
20
+
21
+ #import "RNConvivaAppAnalytics.h"
22
+ #import "RNConfigUtils.h"
23
+ #import "RNUtilities.h"
24
+ #import "NSDictionary+RNCAT_TypeMethods.h"
25
+
26
+ #import <ConvivaAppAnalytics/CATAppAnalytics.h>
27
+ #import <ConvivaAppAnalytics/CATNetworkConfiguration.h>
28
+ #import <ConvivaAppAnalytics/CATNetworkConnection.h>
29
+ #import <ConvivaAppAnalytics/CATTrackerConfiguration.h>
30
+ #import <ConvivaAppAnalytics/CATSessionConfiguration.h>
31
+ #import <ConvivaAppAnalytics/CATEmitterConfiguration.h>
32
+ #import <ConvivaAppAnalytics/CATSubjectConfiguration.h>
33
+ #import <ConvivaAppAnalytics/CATGDPRConfiguration.h>
34
+ #import <ConvivaAppAnalytics/CATGlobalContextsConfiguration.h>
35
+ #import <ConvivaAppAnalytics/CATGlobalContext.h>
36
+ #import <ConvivaAppAnalytics/CATSelfDescribingJson.h>
37
+ #import <ConvivaAppAnalytics/CATSelfDescribing.h>
38
+ #import <ConvivaAppAnalytics/CATScreenView.h>
39
+ #import <ConvivaAppAnalytics/CATPageView.h>
40
+ #import <ConvivaAppAnalytics/CATTiming.h>
41
+ #import <ConvivaAppAnalytics/CATConsentGranted.h>
42
+ #import <ConvivaAppAnalytics/CATConsentWithdrawn.h>
43
+ #import <ConvivaAppAnalytics/CATStructured.h>
44
+ #import <ConvivaAppAnalytics/CATEcommerceItem.h>
45
+ #import <ConvivaAppAnalytics/CATEcommerce.h>
46
+ #import <ConvivaAppAnalytics/CATDeepLinkReceived.h>
47
+ #import <ConvivaAppAnalytics/CATMessageNotification.h>
48
+
49
+
50
+ @implementation RNConvivaTracker
51
+
52
+ RCT_EXPORT_MODULE()
53
+
54
+ RCT_EXPORT_METHOD(createTracker:
55
+ (NSDictionary *)argmap
56
+ resolver:(RCTPromiseResolveBlock)resolve
57
+ rejecter:(RCTPromiseRejectBlock)reject) {
58
+
59
+ NSString *trackerNs = @"CAT";[argmap objectForKey:@"namespace"];
60
+ NSString *appName = [argmap objectForKey:@"appName"];
61
+ NSString *customerKey = [argmap objectForKey:@"customerKey"];
62
+ NSDictionary *networkConfig =[argmap objectForKey:@"networkConfig"];
63
+
64
+ CATNetworkConfiguration *networkConfiguration = nil;
65
+ if(nil != networkConfig){
66
+
67
+ // NetworkConfiguration
68
+ NSString *method = [networkConfig rncat_stringForKey:@"method" defaultValue:nil];
69
+ CATHttpMethod httpMethod = CATHttpMethodPost;
70
+
71
+ if(0 < [method length]){
72
+ httpMethod = [@"get" isEqualToString:method] ? CATHttpMethodGet : CATHttpMethodPost;
73
+ }
74
+
75
+ NSString *endpoint = networkConfig[@"endpoint"];
76
+
77
+ if(0 < [endpoint length]) {
78
+ networkConfiguration = [[CATNetworkConfiguration alloc] initWithEndpoint:networkConfig[@"endpoint"] method:httpMethod];
79
+ }
80
+
81
+ NSString *customPostPath = [networkConfig rncat_stringForKey:@"customPostPath" defaultValue:nil];
82
+ if (0 < [customPostPath length]) {
83
+ networkConfiguration.customPostPath = customPostPath;
84
+ }
85
+
86
+ NSObject *requestHeaders = [networkConfig objectForKey:@"requestHeaders"];
87
+ if (requestHeaders != nil && [requestHeaders isKindOfClass:NSDictionary.class]) {
88
+ networkConfiguration.requestHeaders = (NSDictionary *)requestHeaders;
89
+ }
90
+ }
91
+
92
+ // Configurations
93
+ NSMutableArray *controllers = [NSMutableArray array];
94
+
95
+ // TrackerConfiguration
96
+ NSObject *trackerArg = [argmap objectForKey:@"trackerConfig"];
97
+ if (trackerArg != nil && [trackerArg isKindOfClass:NSDictionary.class]) {
98
+ CATTrackerConfiguration *trackerConfiguration = [RNConfigUtils mkTrackerConfig:(NSDictionary *)trackerArg];
99
+ [controllers addObject:trackerConfiguration];
100
+ }
101
+ else{
102
+ CATTrackerConfiguration *trackerConfiguration = [RNConfigUtils mkDefaultTrackerConfig];
103
+ [controllers addObject:trackerConfiguration];
104
+ }
105
+
106
+ // SessionConfiguration
107
+ NSObject *sessionArg = [argmap objectForKey:@"sessionConfig"];
108
+ if (sessionArg != nil && [sessionArg isKindOfClass:NSDictionary.class]) {
109
+ CATSessionConfiguration *sessionConfiguration = [RNConfigUtils mkSessionConfig:(NSDictionary *)sessionArg];
110
+ [controllers addObject:sessionConfiguration];
111
+ }
112
+
113
+ // EmitterConfiguration
114
+ NSObject *emitterArg = [argmap objectForKey:@"emitterConfig"];
115
+ if (emitterArg !=nil && [emitterArg isKindOfClass:NSDictionary.class]) {
116
+ CATEmitterConfiguration *emitterConfiguration = [RNConfigUtils mkEmitterConfig:(NSDictionary *)emitterArg];
117
+ [controllers addObject:emitterConfiguration];
118
+ }
119
+
120
+ // SubjectConfiguration
121
+ NSObject *subjectArg = [argmap objectForKey:@"subjectConfig"];
122
+ if (subjectArg != nil && [subjectArg isKindOfClass:NSDictionary.class]) {
123
+ CATSubjectConfiguration *subjectConfiguration = [RNConfigUtils mkSubjectConfig:(NSDictionary *)subjectArg];
124
+ [controllers addObject:subjectConfiguration];
125
+ }
126
+
127
+ // GdprConfiguration
128
+ NSObject *gdprArg = [argmap objectForKey:@"gdprConfig"];
129
+ if (gdprArg != nil && [gdprArg isKindOfClass:NSDictionary.class]) {
130
+ CATGDPRConfiguration *gdprConfiguration = [RNConfigUtils mkGdprConfig:(NSDictionary *)gdprArg];
131
+ [controllers addObject:gdprConfiguration];
132
+ }
133
+
134
+ // GConfiguration
135
+ NSObject *gcArg = [argmap objectForKey:@"gcConfig"];
136
+ if (gcArg != nil && [gcArg isKindOfClass:NSArray.class]) {
137
+ CATGlobalContextsConfiguration *gcConfiguration = [RNConfigUtils mkGCConfig:(NSArray *)gcArg];
138
+ [controllers addObject:gcConfiguration];
139
+ }
140
+
141
+ id<CATTrackerController> tracker = nil;
142
+ if(nil != networkConfiguration){
143
+ tracker = [CATAppAnalytics createTrackerWithCustomerKey:customerKey
144
+ appName:appName
145
+ network:networkConfiguration
146
+ configurations:controllers];
147
+ }
148
+ else{
149
+ tracker = [CATAppAnalytics createTrackerWithCustomerKey:customerKey
150
+ appName:appName
151
+ configurations:controllers];
152
+ }
153
+
154
+ if (tracker) {
155
+ resolve(@YES);
156
+ } else {
157
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
158
+ reject(@"ERROR", @"tracker initialization failed", error);
159
+ }
160
+ }
161
+
162
+ RCT_EXPORT_METHOD(removeTracker: (NSDictionary *)details
163
+ resolver:(RCTPromiseResolveBlock)resolve
164
+ rejecter:(RCTPromiseRejectBlock)reject) {
165
+ NSString *namespace = [details objectForKey:@"tracker"];
166
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
167
+ BOOL removed = [CATAppAnalytics removeTracker:trackerController];
168
+ resolve(@(removed));
169
+ }
170
+
171
+ RCT_EXPORT_METHOD(removeAllTrackers: (RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
172
+ [CATAppAnalytics removeAllTrackers];
173
+ resolve(@YES);
174
+ }
175
+
176
+ RCT_EXPORT_METHOD(trackSelfDescribingEvent:
177
+ (NSDictionary *)details
178
+ resolver:(RCTPromiseResolveBlock)resolve
179
+ rejecter:(RCTPromiseRejectBlock)reject) {
180
+ NSString *namespace = [details objectForKey:@"tracker"];
181
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
182
+
183
+ if (trackerController != nil) {
184
+ NSDictionary *argmap = [details objectForKey:@"eventData"];
185
+ NSArray<NSDictionary *> *contexts = [details objectForKey:@"contexts"];
186
+
187
+ CATSelfDescribingJson *eventData = [[CATSelfDescribingJson alloc] initWithSchema:(NSString *)[argmap objectForKey:@"schema"]
188
+ andDictionary:(NSDictionary *)[argmap objectForKey:@"data"]];
189
+
190
+ CATSelfDescribing *event = [[CATSelfDescribing alloc] initWithEventData:eventData];
191
+ [event contexts:[RNUtilities mkSDJArray:contexts]];
192
+ [trackerController track:event];
193
+ resolve(@YES);
194
+ } else {
195
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
196
+ reject(@"ERROR", @"tracker with given namespace not found", error);
197
+ }
198
+ }
199
+
200
+ RCT_EXPORT_METHOD(trackStructuredEvent:
201
+ (NSDictionary *)details
202
+ resolver:(RCTPromiseResolveBlock)resolve
203
+ rejecter:(RCTPromiseRejectBlock)reject) {
204
+ NSString *namespace = [details objectForKey:@"tracker"];
205
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
206
+
207
+ if (trackerController != nil) {
208
+ NSDictionary *argmap = [details objectForKey:@"eventData"];
209
+ NSArray<NSDictionary *> *contexts = [details objectForKey:@"contexts"];
210
+
211
+ NSString *category = [argmap rncat_stringForKey:@"category" defaultValue:nil];
212
+ NSString *action = [argmap rncat_stringForKey:@"action" defaultValue:nil];
213
+ CATStructured *event = [[CATStructured alloc] initWithCategory:category
214
+ action:action];
215
+ NSString *label = [argmap rncat_stringForKey:@"label" defaultValue:nil];
216
+ if (label) {
217
+ event.label = label;
218
+ }
219
+ NSString *property = [argmap rncat_stringForKey:@"property" defaultValue:nil];
220
+ if (property) {
221
+ event.property = property;
222
+ }
223
+ NSNumber *value = [argmap rncat_numberForKey:@"value" defaultValue:nil];
224
+ if (label) {
225
+ event.value = value;
226
+ }
227
+
228
+ [event contexts:[RNUtilities mkSDJArray:contexts]];
229
+ [trackerController track:event];
230
+ resolve(@YES);
231
+ } else {
232
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
233
+ reject(@"ERROR", @"tracker with given namespace not found", error);
234
+ }
235
+ }
236
+
237
+ RCT_EXPORT_METHOD(trackScreenViewEvent:
238
+ (NSDictionary *)details
239
+ resolver:(RCTPromiseResolveBlock)resolve
240
+ rejecter:(RCTPromiseRejectBlock)reject) {
241
+ NSString *namespace = [details objectForKey:@"tracker"];
242
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
243
+
244
+ if (trackerController != nil) {
245
+ NSDictionary *argmap = [details objectForKey:@"eventData"];
246
+ NSArray<NSDictionary *> *contexts = [details objectForKey:@"contexts"];
247
+
248
+ NSString *screenName = [argmap rncat_stringForKey:@"name" defaultValue:nil];
249
+ NSString *screenId = [argmap rncat_stringForKey:@"id" defaultValue:nil];
250
+ NSUUID *screenUuid = [[NSUUID alloc] initWithUUIDString:screenId];
251
+ if (screenId != nil && screenUuid == nil) {
252
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
253
+ reject(@"ERROR", @"screenId has to be a valid UUID string", error);
254
+ }
255
+ CATScreenView *event = [[CATScreenView alloc] initWithName:screenName
256
+ screenId:screenUuid];
257
+
258
+ NSString *type = [argmap rncat_stringForKey:@"type" defaultValue:nil];
259
+ if (type) {
260
+ event.type = type;
261
+ }
262
+ NSString *previousName = [argmap rncat_stringForKey:@"previousName" defaultValue:nil];
263
+ if (previousName) {
264
+ event.previousName = previousName;
265
+ }
266
+ NSString *previousId = [argmap rncat_stringForKey:@"previousId" defaultValue:nil];
267
+ if (previousId) {
268
+ event.previousId = previousId;
269
+ }
270
+ NSString *previousType = [argmap rncat_stringForKey:@"previousType" defaultValue:nil];
271
+ if (previousType) {
272
+ event.previousType = previousType;
273
+ }
274
+ NSString *transitionType = [argmap rncat_stringForKey:@"transitionType" defaultValue:nil];
275
+ if (transitionType) {
276
+ event.transitionType = transitionType;
277
+ }
278
+
279
+ [event contexts:[RNUtilities mkSDJArray:contexts]];
280
+ [trackerController track:event];
281
+ resolve(@YES);
282
+ } else {
283
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
284
+ reject(@"ERROR", @"tracker with given namespace not found", error);
285
+ }
286
+ }
287
+
288
+ RCT_EXPORT_METHOD(trackPageView:
289
+ (NSDictionary *)details
290
+ resolver:(RCTPromiseResolveBlock)resolve
291
+ rejecter:(RCTPromiseRejectBlock)reject) {
292
+ NSString *namespace = [details objectForKey:@"tracker"];
293
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
294
+
295
+ if (trackerController != nil) {
296
+ NSDictionary *argmap = [details objectForKey:@"eventData"];
297
+ NSArray<NSDictionary *> *contexts = [details objectForKey:@"contexts"];
298
+
299
+ NSString *pageUrl = [argmap rncat_stringForKey:@"pageUrl" defaultValue:nil];
300
+ CATPageView *event = [[CATPageView alloc] initWithPageUrl:pageUrl];
301
+
302
+ NSString *pageTitle = [argmap rncat_stringForKey:@"pageTitle" defaultValue:nil];
303
+ if (pageTitle) {
304
+ event.pageTitle = pageTitle;
305
+ }
306
+ NSString *referrer = [argmap rncat_stringForKey:@"referrer" defaultValue:nil];
307
+ if (referrer) {
308
+ event.referrer = referrer;
309
+ }
310
+
311
+ [event contexts:[RNUtilities mkSDJArray:contexts]];
312
+ [trackerController track:event];
313
+ resolve(@YES);
314
+ } else {
315
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
316
+ reject(@"ERROR", @"tracker with given namespace not found", error);
317
+ }
318
+ }
319
+
320
+ RCT_EXPORT_METHOD(trackTimingEvent:
321
+ (NSDictionary *)details
322
+ resolver:(RCTPromiseResolveBlock)resolve
323
+ rejecter:(RCTPromiseRejectBlock)reject) {
324
+ NSString *namespace = [details objectForKey:@"tracker"];
325
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
326
+
327
+ if (trackerController != nil) {
328
+ NSDictionary *argmap = [details objectForKey:@"eventData"];
329
+ NSArray<NSDictionary *> *contexts = [details objectForKey:@"contexts"];
330
+
331
+ NSString *category = [argmap rncat_stringForKey:@"category" defaultValue:nil];
332
+ NSString *variable = [argmap rncat_stringForKey:@"variable" defaultValue:nil];
333
+ NSNumber *timing = [argmap rncat_numberForKey:@"timing" defaultValue:nil];
334
+ CATTiming *event = [[CATTiming alloc] initWithCategory:category
335
+ variable:variable
336
+ timing:timing];
337
+ NSString *label = [argmap rncat_stringForKey:@"label" defaultValue:nil];
338
+ if (label) {
339
+ event.label = label;
340
+ }
341
+
342
+ [event contexts:[RNUtilities mkSDJArray:contexts]];
343
+ [trackerController track:event];
344
+ resolve(@YES);
345
+ } else {
346
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
347
+ reject(@"ERROR", @"tracker with given namespace not found", error);
348
+ }
349
+ }
350
+
351
+ RCT_EXPORT_METHOD(trackConsentGrantedEvent:
352
+ (NSDictionary *)details
353
+ resolver:(RCTPromiseResolveBlock)resolve
354
+ rejecter:(RCTPromiseRejectBlock)reject) {
355
+ NSString *namespace = [details objectForKey:@"tracker"];
356
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
357
+
358
+ if (trackerController != nil) {
359
+ NSDictionary *argmap = [details objectForKey:@"eventData"];
360
+ NSArray<NSDictionary *> *contexts = [details objectForKey:@"contexts"];
361
+
362
+ NSString *expiry = [argmap rncat_stringForKey:@"expiry" defaultValue:nil];
363
+ NSString *documentId = [argmap rncat_stringForKey:@"documentId" defaultValue:nil];
364
+ NSString *version = [argmap rncat_stringForKey:@"version" defaultValue:nil];
365
+ CATConsentGranted *event = [[CATConsentGranted alloc] initWithExpiry:expiry
366
+ documentId:documentId
367
+ version:version];
368
+
369
+ NSString *name = [argmap rncat_stringForKey:@"name" defaultValue:nil];
370
+ if (name) {
371
+ event.name = name;
372
+ }
373
+ NSString *documentDescription = [argmap rncat_stringForKey:@"documentDescription" defaultValue:nil];
374
+ if (documentDescription) {
375
+ event.documentDescription = documentDescription;
376
+ }
377
+
378
+ [event contexts:[RNUtilities mkSDJArray:contexts]];
379
+ [trackerController track:event];
380
+ resolve(@YES);
381
+ } else {
382
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
383
+ reject(@"ERROR", @"tracker with given namespace not found", error);
384
+ }
385
+ }
386
+
387
+ RCT_EXPORT_METHOD(trackConsentWithdrawnEvent:
388
+ (NSDictionary *)details
389
+ resolver:(RCTPromiseResolveBlock)resolve
390
+ rejecter:(RCTPromiseRejectBlock)reject) {
391
+ NSString *namespace = [details objectForKey:@"tracker"];
392
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
393
+
394
+ if (trackerController != nil) {
395
+ NSDictionary *argmap = [details objectForKey:@"eventData"];
396
+ NSArray<NSDictionary *> *contexts = [details objectForKey:@"contexts"];
397
+
398
+ CATConsentWithdrawn *event = [CATConsentWithdrawn new];
399
+
400
+ BOOL all = [argmap rncat_boolForKey:@"all" defaultValue:nil];
401
+ event.all = all;
402
+ NSString *documentId = [argmap rncat_stringForKey:@"documentId" defaultValue:nil];
403
+ event.documentId = documentId;
404
+ NSString *version = [argmap rncat_stringForKey:@"version" defaultValue:nil];
405
+ event.version = version;
406
+ NSString *name = [argmap rncat_stringForKey:@"name" defaultValue:nil];
407
+ if (name) {
408
+ event.name = name;
409
+ }
410
+ NSString *documentDescription = [argmap rncat_stringForKey:@"documentDescription" defaultValue:nil];
411
+ if (documentDescription) {
412
+ event.documentDescription = documentDescription;
413
+ }
414
+
415
+ [event contexts:[RNUtilities mkSDJArray:contexts]];
416
+ [trackerController track:event];
417
+ resolve(@YES);
418
+ } else {
419
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
420
+ reject(@"ERROR", @"tracker with given namespace not found", error);
421
+ }
422
+ }
423
+
424
+ RCT_EXPORT_METHOD(trackEcommerceTransactionEvent:
425
+ (NSDictionary *)details
426
+ resolver:(RCTPromiseResolveBlock)resolve
427
+ rejecter:(RCTPromiseRejectBlock)reject) {
428
+ NSString *namespace = [details objectForKey:@"tracker"];
429
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
430
+
431
+ if (trackerController != nil) {
432
+ NSDictionary *argmap = [details objectForKey:@"eventData"];
433
+ NSArray<NSDictionary *> *contexts = [details objectForKey:@"contexts"];
434
+
435
+ NSString *orderId = [argmap rncat_stringForKey:@"orderId" defaultValue:nil];
436
+ NSNumber *totalValue = [argmap rncat_numberForKey:@"totalValue" defaultValue:nil];
437
+ NSArray *items = [argmap objectForKey:@"items"];
438
+
439
+ NSMutableArray *transItems = [NSMutableArray new];
440
+ for (NSDictionary* item in items) {
441
+ NSString *sku = [item rncat_stringForKey:@"sku" defaultValue:nil];
442
+ NSNumber *price = [item rncat_numberForKey:@"price" defaultValue:nil];
443
+ NSNumber *quantity = [item rncat_numberForKey:@"quantity" defaultValue:nil];
444
+ CATEcommerceItem *ecomItem = [[CATEcommerceItem alloc] initWithSku:sku
445
+ price:price
446
+ quantity:quantity];
447
+
448
+ NSString *name = [argmap rncat_stringForKey:@"name" defaultValue:nil];
449
+ if (name) {
450
+ ecomItem.name = name;
451
+ }
452
+ NSString *category = [argmap rncat_stringForKey:@"category" defaultValue:nil];
453
+ if (category) {
454
+ ecomItem.category = category;
455
+ }
456
+ NSString *currency = [argmap rncat_stringForKey:@"currency" defaultValue:nil];
457
+ if (currency) {
458
+ ecomItem.currency = currency;
459
+ }
460
+
461
+ [transItems addObject:ecomItem];
462
+ }
463
+
464
+ CATEcommerce *event = [[CATEcommerce alloc] initWithOrderId:orderId
465
+ totalValue:totalValue
466
+ items:(NSArray<CATEcommerceItem *> *)transItems];
467
+ [event contexts:[RNUtilities mkSDJArray:contexts]];
468
+ [trackerController track:event];
469
+ resolve(@YES);
470
+
471
+ } else {
472
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
473
+ reject(@"ERROR", @"tracker with given namespace not found", error);
474
+ }
475
+ }
476
+
477
+ RCT_EXPORT_METHOD(trackDeepLinkReceivedEvent:
478
+ (NSDictionary *)details
479
+ resolver:(RCTPromiseResolveBlock)resolve
480
+ rejecter:(RCTPromiseRejectBlock)reject) {
481
+ NSString *namespace = [details objectForKey:@"tracker"];
482
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
483
+
484
+ if (trackerController != nil) {
485
+ NSDictionary *argmap = [details objectForKey:@"eventData"];
486
+ NSArray<NSDictionary *> *contexts = [details objectForKey:@"contexts"];
487
+
488
+ NSString *url = [argmap rncat_stringForKey:@"url" defaultValue:nil];
489
+ CATDeepLinkReceived *event = [[CATDeepLinkReceived alloc] initWithUrl:url];
490
+
491
+ NSString *referrer = [argmap rncat_stringForKey:@"referrer" defaultValue:nil];
492
+ if (referrer) {
493
+ event.referrer = referrer;
494
+ }
495
+
496
+ [event contexts:[RNUtilities mkSDJArray:contexts]];
497
+ [trackerController track:event];
498
+ resolve(@YES);
499
+ } else {
500
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
501
+ reject(@"ERROR", @"tracker with given namespace not found", error);
502
+ }
503
+ }
504
+
505
+ RCT_EXPORT_METHOD(trackMessageNotificationEvent:
506
+ (NSDictionary *)details
507
+ resolver:(RCTPromiseResolveBlock)resolve
508
+ rejecter:(RCTPromiseRejectBlock)reject) {
509
+ NSString *namespace = [details objectForKey:@"tracker"];
510
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
511
+
512
+ if (trackerController != nil) {
513
+ NSDictionary *argmap = [details objectForKey:@"eventData"];
514
+ NSArray<NSDictionary *> *contexts = [details objectForKey:@"contexts"];
515
+
516
+ NSString *title = [argmap rncat_stringForKey:@"title" defaultValue:nil];
517
+ NSString *body = [argmap rncat_stringForKey:@"body" defaultValue:nil];
518
+ NSString *triggerStr = [argmap rncat_stringForKey:@"trigger" defaultValue:nil];
519
+ CATMessageNotificationTrigger trigger;
520
+ if ([triggerStr isEqualToString:@"push"]) {
521
+ trigger = CATMessageNotificationTriggerPush;
522
+ } else if ([triggerStr isEqualToString:@"location"]) {
523
+ trigger = CATMessageNotificationTriggerLocation;
524
+ } else if ([triggerStr isEqualToString:@"calendar"]) {
525
+ trigger = CATMessageNotificationTriggerCalendar;
526
+ } else if ([triggerStr isEqualToString:@"timeInterval"]) {
527
+ trigger = CATMessageNotificationTriggerTimeInterval;
528
+ } else {
529
+ trigger = CATMessageNotificationTriggerOther;
530
+ }
531
+ CATMessageNotification *event = [[CATMessageNotification alloc] initWithTitle: title
532
+ body: body
533
+ trigger: trigger];
534
+
535
+ NSString *action = [argmap rncat_stringForKey:@"action" defaultValue:nil];
536
+ if (action) {
537
+ event.action = action;
538
+ }
539
+ NSArray *attachmentsMap = [argmap objectForKey:@"attachments"];
540
+ if (attachmentsMap) {
541
+ NSMutableArray *attachments = [NSMutableArray new];
542
+ for (NSDictionary* attachmentMap in attachmentsMap) {
543
+ NSString *identifier = [attachmentMap rncat_stringForKey:@"identifier" defaultValue:nil];
544
+ NSString *type = [attachmentMap rncat_stringForKey:@"type" defaultValue:nil];
545
+ NSString *url = [attachmentMap rncat_stringForKey:@"url" defaultValue:nil];
546
+ CATMessageNotificationAttachment *attachment = [[CATMessageNotificationAttachment alloc] initWithIdentifier:identifier
547
+ type:type
548
+ url:url];
549
+ [attachments addObject:attachment];
550
+ }
551
+ event.attachments = attachments;
552
+ }
553
+ NSArray<NSString *> *bodyLocArgs = [argmap objectForKey:@"bodyLocArgs"];
554
+ if (bodyLocArgs) {
555
+ event.bodyLocArgs = bodyLocArgs;
556
+ }
557
+ NSString *bodyLocKey = [argmap rncat_stringForKey:@"bodyLocKey" defaultValue:nil];
558
+ if (bodyLocKey) {
559
+ event.bodyLocKey = bodyLocKey;
560
+ }
561
+ NSString *category = [argmap rncat_stringForKey:@"category" defaultValue:nil];
562
+ if (category) {
563
+ event.category = category;
564
+ }
565
+ NSNumber *contentAvailable = [argmap rncat_numberForKey:@"contentAvailable" defaultValue:nil];
566
+ if (contentAvailable != nil) {
567
+ event.contentAvailable = contentAvailable;
568
+ }
569
+ NSString *group = [argmap rncat_stringForKey:@"group" defaultValue:nil];
570
+ if (group) {
571
+ event.group = group;
572
+ }
573
+ NSString *icon = [argmap rncat_stringForKey:@"icon" defaultValue:nil];
574
+ if (icon) {
575
+ event.icon = icon;
576
+ }
577
+ NSNumber *notificationCount = [argmap rncat_numberForKey:@"notificationCount" defaultValue:nil];
578
+ if (notificationCount) {
579
+ event.notificationCount = notificationCount;
580
+ }
581
+ NSString *notificationTimestamp = [argmap rncat_stringForKey:@"notificationTimestamp" defaultValue:nil];
582
+ if (notificationTimestamp) {
583
+ event.notificationTimestamp = notificationTimestamp;
584
+ }
585
+ NSString *sound = [argmap rncat_stringForKey:@"sound" defaultValue:nil];
586
+ if (sound) {
587
+ event.sound = sound;
588
+ }
589
+ NSString *subtitle = [argmap rncat_stringForKey:@"subtitle" defaultValue:nil];
590
+ if (subtitle) {
591
+ event.subtitle = subtitle;
592
+ }
593
+ NSString *tag = [argmap rncat_stringForKey:@"tag" defaultValue:nil];
594
+ if (tag) {
595
+ event.tag = tag;
596
+ }
597
+ NSString *threadIdentifier = [argmap rncat_stringForKey:@"threadIdentifier" defaultValue:nil];
598
+ if (threadIdentifier) {
599
+ event.threadIdentifier = threadIdentifier;
600
+ }
601
+ NSArray<NSString *> *titleLocArgs = [argmap objectForKey:@"titleLocArgs"];
602
+ if (titleLocArgs) {
603
+ event.titleLocArgs = titleLocArgs;
604
+ }
605
+ NSString *titleLocKey = [argmap rncat_stringForKey:@"titleLocKey" defaultValue:nil];
606
+ if (titleLocKey) {
607
+ event.titleLocKey = titleLocKey;
608
+ }
609
+
610
+ [event contexts:[RNUtilities mkSDJArray:contexts]];
611
+ [trackerController track:event];
612
+ resolve(@YES);
613
+ } else {
614
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
615
+ reject(@"ERROR", @"tracker with given namespace not found", error);
616
+ }
617
+ }
618
+
619
+ RCT_EXPORT_METHOD(trackCustomEvent:
620
+ (NSDictionary *)details
621
+ resolver:(RCTPromiseResolveBlock)resolve
622
+ rejecter:(RCTPromiseRejectBlock)reject) {
623
+ NSString *namespace = [details objectForKey:@"tracker"];
624
+
625
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
626
+
627
+ if (trackerController != nil) {
628
+ NSString *eventName = [details objectForKey:@"eventName"];
629
+ NSString *eventData = [details objectForKey:@"eventData"];
630
+
631
+ if(0 < eventName.length){
632
+ [trackerController trackCustomEvent:eventName data:eventData];
633
+ }
634
+
635
+ resolve(@YES);
636
+ } else {
637
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
638
+ reject(@"ERROR", @"tracker with given namespace not found", error);
639
+ }
640
+ }
641
+
642
+ RCT_EXPORT_METHOD(setCustomTags:
643
+ (NSDictionary *)details
644
+ resolver:(RCTPromiseResolveBlock)resolve
645
+ rejecter:(RCTPromiseRejectBlock)reject) {
646
+ NSString *namespace = [details objectForKey:@"tracker"];
647
+
648
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
649
+
650
+ if (trackerController != nil) {
651
+ NSDictionary *tags = [details objectForKey:@"tags"];
652
+
653
+ if(0 < tags.count){
654
+ [trackerController setCustomTags:tags];
655
+ }
656
+
657
+ resolve(@YES);
658
+ } else {
659
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
660
+ reject(@"ERROR", @"tracker with given namespace not found", error);
661
+ }
662
+ }
663
+
664
+ RCT_EXPORT_METHOD(setCustomTagsWithCategory:
665
+ (NSDictionary *)details
666
+ resolver:(RCTPromiseResolveBlock)resolve
667
+ rejecter:(RCTPromiseRejectBlock)reject) {
668
+ NSString *namespace = [details objectForKey:@"tracker"];
669
+
670
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
671
+
672
+ if (trackerController != nil) {
673
+ NSString *category = [details objectForKey:@"category"];
674
+ NSDictionary *tags = [details objectForKey:@"tags"];
675
+
676
+ if(0 < category.length && 0 < tags.count){
677
+ [trackerController setCustomTags:category tags:tags];
678
+ }
679
+
680
+ resolve(@YES);
681
+ } else {
682
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
683
+ reject(@"ERROR", @"tracker with given namespace not found", error);
684
+ }
685
+ }
686
+
687
+ RCT_EXPORT_METHOD(clearCustomTags:
688
+ (NSDictionary *)details
689
+ resolver:(RCTPromiseResolveBlock)resolve
690
+ rejecter:(RCTPromiseRejectBlock)reject) {
691
+ NSString *namespace = [details objectForKey:@"tracker"];
692
+
693
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
694
+
695
+ if (trackerController != nil) {
696
+ NSArray *tags = [details objectForKey:@"tagKeys"];
697
+
698
+ if(0 < tags.count){
699
+ [trackerController clearCustomTags:tags];
700
+ }
701
+
702
+ resolve(@YES);
703
+ } else {
704
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
705
+ reject(@"ERROR", @"tracker with given namespace not found", error);
706
+ }
707
+ }
708
+
709
+ RCT_EXPORT_METHOD(clearAllCustomTags:
710
+ (NSDictionary *)details
711
+ resolver:(RCTPromiseResolveBlock)resolve
712
+ rejecter:(RCTPromiseRejectBlock)reject) {
713
+ NSString *namespace = [details objectForKey:@"tracker"];
714
+
715
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
716
+
717
+ if (trackerController != nil) {
718
+
719
+ [trackerController clearCustomTags];
720
+ resolve(@YES);
721
+ } else {
722
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
723
+ reject(@"ERROR", @"tracker with given namespace not found", error);
724
+ }
725
+ }
726
+
727
+ RCT_EXPORT_METHOD(removeGlobalContexts:
728
+ (NSDictionary *)details
729
+ resolver:(RCTPromiseResolveBlock)resolve
730
+ rejecter:(RCTPromiseRejectBlock)reject) {
731
+ NSString *namespace = [details objectForKey:@"tracker"];
732
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
733
+
734
+ if (trackerController != nil) {
735
+ NSString *tag = [details objectForKey:@"removeTag"];
736
+ [[trackerController globalContexts] removeWithTag:tag];
737
+ resolve(@YES);
738
+ } else {
739
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
740
+ reject(@"ERROR", @"tracker with given namespace not found", error);
741
+ }
742
+ }
743
+
744
+ RCT_EXPORT_METHOD(addGlobalContexts:
745
+ (NSDictionary *)details
746
+ resolver:(RCTPromiseResolveBlock)resolve
747
+ rejecter:(RCTPromiseRejectBlock)reject) {
748
+ NSString *namespace = [details objectForKey:@"tracker"];
749
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
750
+
751
+ if (trackerController != nil) {
752
+ NSDictionary *gcArg = [details objectForKey:@"addGlobalContext"];
753
+ NSString *tag = [gcArg objectForKey:@"tag"];
754
+ NSArray *globalContexts = [gcArg objectForKey:@"globalContexts"];
755
+
756
+ NSArray *staticContexts = [[RNUtilities mkSDJArray:globalContexts] mutableCopy];
757
+ CATGlobalContext *gcStatic = [[CATGlobalContext alloc] initWithStaticContexts:staticContexts];
758
+
759
+ [[trackerController globalContexts] addWithTag:tag contextGenerator:gcStatic];
760
+ resolve(@YES);
761
+ } else {
762
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
763
+ reject(@"ERROR", @"tracker with given namespace not found", error);
764
+ }
765
+ }
766
+
767
+ RCT_EXPORT_METHOD(setUserId:
768
+ (NSDictionary *)details
769
+ resolver:(RCTPromiseResolveBlock)resolve
770
+ rejecter:(RCTPromiseRejectBlock)reject) {
771
+ NSString *namespace = [details objectForKey:@"tracker"];
772
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
773
+
774
+ if (trackerController != nil) {
775
+ NSString *newUid = [details rncat_stringForKey:@"userId" defaultValue:nil];
776
+ [trackerController.subject setUserId:newUid];
777
+ resolve(@YES);
778
+ } else {
779
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
780
+ reject(@"ERROR", @"tracker with given namespace not found", error);
781
+ }
782
+ }
783
+
784
+ RCT_EXPORT_METHOD(setNetworkUserId:
785
+ (NSDictionary *)details
786
+ resolver:(RCTPromiseResolveBlock)resolve
787
+ rejecter:(RCTPromiseRejectBlock)reject) {
788
+ NSString *namespace = [details objectForKey:@"tracker"];
789
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
790
+
791
+ if (trackerController != nil) {
792
+ NSString *newNuid = [details rncat_stringForKey:@"networkUserId" defaultValue:nil];
793
+ [trackerController.subject setNetworkUserId:newNuid];
794
+ resolve(@YES);
795
+ } else {
796
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
797
+ reject(@"ERROR", @"tracker with given namespace not found", error);
798
+ }
799
+ }
800
+
801
+ RCT_EXPORT_METHOD(setDomainUserId:
802
+ (NSDictionary *)details
803
+ resolver:(RCTPromiseResolveBlock)resolve
804
+ rejecter:(RCTPromiseRejectBlock)reject) {
805
+ NSString *namespace = [details objectForKey:@"tracker"];
806
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
807
+
808
+ if (trackerController != nil) {
809
+ NSString *newDuid = [details rncat_stringForKey:@"domainUserId" defaultValue:nil];
810
+ [trackerController.subject setDomainUserId:newDuid];
811
+ resolve(@YES);
812
+ } else {
813
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
814
+ reject(@"ERROR", @"tracker with given namespace not found", error);
815
+ }
816
+ }
817
+
818
+ RCT_EXPORT_METHOD(setIpAddress:
819
+ (NSDictionary *)details
820
+ resolver:(RCTPromiseResolveBlock)resolve
821
+ rejecter:(RCTPromiseRejectBlock)reject) {
822
+ NSString *namespace = [details objectForKey:@"tracker"];
823
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
824
+
825
+ if (trackerController != nil) {
826
+ NSString *newIp = [details rncat_stringForKey:@"ipAddress" defaultValue:nil];
827
+ [trackerController.subject setIpAddress:newIp];
828
+ resolve(@YES);
829
+ } else {
830
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
831
+ reject(@"ERROR", @"tracker with given namespace not found", error);
832
+ }
833
+ }
834
+
835
+ RCT_EXPORT_METHOD(setUseragent:
836
+ (NSDictionary *)details
837
+ resolver:(RCTPromiseResolveBlock)resolve
838
+ rejecter:(RCTPromiseRejectBlock)reject) {
839
+ NSString *namespace = [details objectForKey:@"tracker"];
840
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
841
+
842
+ if (trackerController != nil) {
843
+ NSString *newUagent = [details rncat_stringForKey:@"useragent" defaultValue:nil];
844
+ [trackerController.subject setUseragent:newUagent];
845
+ resolve(@YES);
846
+ } else {
847
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
848
+ reject(@"ERROR", @"tracker with given namespace not found", error);
849
+ }
850
+ }
851
+
852
+ RCT_EXPORT_METHOD(setTimezone:
853
+ (NSDictionary *)details
854
+ resolver:(RCTPromiseResolveBlock)resolve
855
+ rejecter:(RCTPromiseRejectBlock)reject) {
856
+ NSString *namespace = [details objectForKey:@"tracker"];
857
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
858
+
859
+ if (trackerController != nil) {
860
+ NSString *newTz = [details rncat_stringForKey:@"timezone" defaultValue:nil];
861
+ [trackerController.subject setTimezone:newTz];
862
+ resolve(@YES);
863
+ } else {
864
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
865
+ reject(@"ERROR", @"tracker with given namespace not found", error);
866
+ }
867
+ }
868
+
869
+ RCT_EXPORT_METHOD(setLanguage:
870
+ (NSDictionary *)details
871
+ resolver:(RCTPromiseResolveBlock)resolve
872
+ rejecter:(RCTPromiseRejectBlock)reject) {
873
+ NSString *namespace = [details objectForKey:@"tracker"];
874
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
875
+
876
+ if (trackerController != nil) {
877
+ NSString *newLang = [details rncat_stringForKey:@"language" defaultValue:nil];
878
+ [trackerController.subject setLanguage:newLang];
879
+ resolve(@YES);
880
+ } else {
881
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
882
+ reject(@"ERROR", @"tracker with given namespace not found", error);
883
+ }
884
+ }
885
+
886
+ RCT_EXPORT_METHOD(setScreenResolution:
887
+ (NSDictionary *)details
888
+ resolver:(RCTPromiseResolveBlock)resolve
889
+ rejecter:(RCTPromiseRejectBlock)reject) {
890
+ NSString *namespace = [details objectForKey:@"tracker"];
891
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
892
+
893
+ if (trackerController != nil) {
894
+ NSObject *newRes = [details objectForKey:@"screenResolution"];
895
+ if (newRes == [NSNull null]) {
896
+ [trackerController.subject setScreenResolution:nil];
897
+ } else {
898
+ NSNumber *resWidth = [(NSArray *)newRes objectAtIndex:0];
899
+ NSNumber *resHeight = [(NSArray *)newRes objectAtIndex:1];
900
+ CISSize *resSize = [[CISSize alloc] initWithWidth:[resWidth integerValue] height:[resHeight integerValue]];
901
+ [trackerController.subject setScreenResolution:resSize];
902
+ }
903
+ resolve(@YES);
904
+ } else {
905
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
906
+ reject(@"ERROR", @"tracker with given namespace not found", error);
907
+ }
908
+ }
909
+
910
+ RCT_EXPORT_METHOD(setScreenViewport:
911
+ (NSDictionary *)details
912
+ resolver:(RCTPromiseResolveBlock)resolve
913
+ rejecter:(RCTPromiseRejectBlock)reject) {
914
+ NSString *namespace = [details objectForKey:@"tracker"];
915
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
916
+
917
+ if (trackerController != nil) {
918
+ NSObject *newView = [details objectForKey:@"screenViewport"];
919
+ if (newView == [NSNull null]) {
920
+ [trackerController.subject setScreenViewPort:nil];
921
+ } else {
922
+ NSNumber *vpWidth = [(NSArray *)newView objectAtIndex:0];
923
+ NSNumber *vpHeight = [(NSArray *)newView objectAtIndex:1];
924
+ CISSize *vpSize = [[CISSize alloc] initWithWidth:[vpWidth integerValue] height:[vpHeight integerValue]];
925
+ [trackerController.subject setScreenViewPort:vpSize];
926
+ }
927
+ resolve(@YES);
928
+ } else {
929
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
930
+ reject(@"ERROR", @"tracker with given namespace not found", error);
931
+ }
932
+ }
933
+
934
+ RCT_EXPORT_METHOD(setColorDepth:
935
+ (NSDictionary *)details
936
+ resolver:(RCTPromiseResolveBlock)resolve
937
+ rejecter:(RCTPromiseRejectBlock)reject) {
938
+ NSString *namespace = [details objectForKey:@"tracker"];
939
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
940
+
941
+ if (trackerController != nil) {
942
+ NSNumber *newColorD = [details rncat_numberForKey:@"colorDepth" defaultValue:nil];
943
+ [trackerController.subject setColorDepth:newColorD];
944
+ resolve(@YES);
945
+ } else {
946
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
947
+ reject(@"ERROR", @"tracker with given namespace not found", error);
948
+ }
949
+ }
950
+
951
+ RCT_EXPORT_METHOD(getSessionUserId:
952
+ (NSDictionary *)details
953
+ resolver:(RCTPromiseResolveBlock)resolve
954
+ rejecter:(RCTPromiseRejectBlock)reject) {
955
+ NSString *namespace = [details objectForKey:@"tracker"];
956
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
957
+
958
+ if (trackerController != nil) {
959
+ NSString *suid = [trackerController.session userId];
960
+ resolve(suid);
961
+ } else {
962
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
963
+ reject(@"ERROR", @"tracker with given namespace not found", error);
964
+ }
965
+ }
966
+
967
+ RCT_EXPORT_METHOD(getSessionId:
968
+ (NSDictionary *)details
969
+ resolver:(RCTPromiseResolveBlock)resolve
970
+ rejecter:(RCTPromiseRejectBlock)reject) {
971
+ NSString *namespace = [details objectForKey:@"tracker"];
972
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
973
+
974
+ if (trackerController != nil) {
975
+ NSString *sid = [trackerController.session sessionId];
976
+ resolve(sid);
977
+ } else {
978
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
979
+ reject(@"ERROR", @"tracker with given namespace not found", error);
980
+ }
981
+ }
982
+
983
+ RCT_EXPORT_METHOD(getSessionIndex:
984
+ (NSDictionary *)details
985
+ resolver:(RCTPromiseResolveBlock)resolve
986
+ rejecter:(RCTPromiseRejectBlock)reject) {
987
+ NSString *namespace = [details objectForKey:@"tracker"];
988
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
989
+
990
+ if (trackerController != nil) {
991
+ NSInteger sidx = [trackerController.session sessionIndex];
992
+ resolve(@(sidx));
993
+ } else {
994
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
995
+ reject(@"ERROR", @"tracker with given namespace not found", error);
996
+ }
997
+ }
998
+
999
+ RCT_EXPORT_METHOD(getIsInBackground:
1000
+ (NSDictionary *)details
1001
+ resolver:(RCTPromiseResolveBlock)resolve
1002
+ rejecter:(RCTPromiseRejectBlock)reject) {
1003
+ NSString *namespace = [details objectForKey:@"tracker"];
1004
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
1005
+
1006
+ if (trackerController != nil) {
1007
+ BOOL isInBg = [trackerController.session isInBackground];
1008
+ resolve(@(isInBg));
1009
+ } else {
1010
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
1011
+ reject(@"ERROR", @"tracker with given namespace not found", error);
1012
+ }
1013
+ }
1014
+
1015
+ RCT_EXPORT_METHOD(getBackgroundIndex:
1016
+ (NSDictionary *)details
1017
+ resolver:(RCTPromiseResolveBlock)resolve
1018
+ rejecter:(RCTPromiseRejectBlock)reject) {
1019
+ NSString *namespace = [details objectForKey:@"tracker"];
1020
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
1021
+
1022
+ if (trackerController != nil) {
1023
+ NSInteger bgIdx = [trackerController.session backgroundIndex];
1024
+ resolve(@(bgIdx));
1025
+ } else {
1026
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
1027
+ reject(@"ERROR", @"tracker with given namespace not found", error);
1028
+ }
1029
+ }
1030
+
1031
+ RCT_EXPORT_METHOD(getForegroundIndex:
1032
+ (NSDictionary *)details
1033
+ resolver:(RCTPromiseResolveBlock)resolve
1034
+ rejecter:(RCTPromiseRejectBlock)reject) {
1035
+ NSString *namespace = [details objectForKey:@"tracker"];
1036
+ id<CATTrackerController> trackerController = [self trackerByNamespace:namespace];
1037
+
1038
+ if (trackerController != nil) {
1039
+ NSInteger fgIdx = [trackerController.session foregroundIndex];
1040
+ resolve(@(fgIdx));
1041
+ } else {
1042
+ NSError* error = [NSError errorWithDomain:@"ConvivaAppAnalytics" code:200 userInfo:nil];
1043
+ reject(@"ERROR", @"tracker with given namespace not found", error);
1044
+ }
1045
+ }
1046
+
1047
+ - (nullable id<CATTrackerController>)trackerByNamespace:(NSString *)namespace {
1048
+ return [namespace isEqual:[NSNull null]] ? [CATAppAnalytics defaultTracker] : [CATAppAnalytics trackerByNamespace:namespace];
1049
+ }
1050
+
1051
+ @end