@convivainc/conviva-react-native-appanalytics 0.0.1 → 0.1.1

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