@convivainc/conviva-react-native-appanalytics 0.1.0 → 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.
- package/CHANGELOG.md +3 -0
- package/README.md +2 -16
- package/RNConvivaAppAnalytics.podspec +24 -0
- package/android/build.gradle +55 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +6 -0
- package/android/gradle.properties +2 -0
- package/android/gradlew +172 -0
- package/android/gradlew.bat +84 -0
- package/android/src/main/AndroidManifest.xml +1 -0
- package/android/src/main/java/com/conviva/react/apptracker/RNConvivaTrackerModule.java +804 -0
- package/android/src/main/java/com/conviva/react/apptracker/RNConvivaTrackerPackage.java +29 -0
- package/android/src/main/java/com/conviva/react/apptracker/util/ConfigUtil.java +346 -0
- package/android/src/main/java/com/conviva/react/apptracker/util/EventUtil.java +339 -0
- package/android/src/main/java/com/conviva/react/apptracker/util/TrackerVersion.java +9 -0
- package/ios/RNConvivaAppAnalytics.h +34 -0
- package/ios/RNConvivaAppAnalytics.m +1022 -0
- package/ios/RNConvivaAppAnalytics.xcodeproj/project.pbxproj +325 -0
- package/ios/RNConvivaAppAnalytics.xcodeproj/xcshareddata/xcschemes/RNSnowplowTracker.xcscheme +76 -0
- package/ios/Util/NSDictionary+RNCAT_TypeMethods.h +33 -0
- package/ios/Util/NSDictionary+RNCAT_TypeMethods.m +40 -0
- package/ios/Util/RNConfigUtils.h +44 -0
- package/ios/Util/RNConfigUtils.m +209 -0
- package/ios/Util/RNTrackerVersion.h +27 -0
- package/ios/Util/RNTrackerVersion.m +27 -0
- package/ios/Util/RNUtilities.h +32 -0
- package/ios/Util/RNUtilities.m +68 -0
- package/package.json +1 -1
|
@@ -0,0 +1,804 @@
|
|
|
1
|
+
package com.conviva.react.apptracker;
|
|
2
|
+
|
|
3
|
+
import com.conviva.apptracker.ConvivaAppAnalytics;
|
|
4
|
+
import com.conviva.apptracker.configuration.Configuration;
|
|
5
|
+
import com.conviva.apptracker.configuration.EmitterConfiguration;
|
|
6
|
+
import com.conviva.apptracker.configuration.GdprConfiguration;
|
|
7
|
+
import com.conviva.apptracker.configuration.GlobalContextsConfiguration;
|
|
8
|
+
import com.conviva.apptracker.configuration.NetworkConfiguration;
|
|
9
|
+
import com.conviva.apptracker.configuration.RemoteConfiguration;
|
|
10
|
+
import com.conviva.apptracker.configuration.SessionConfiguration;
|
|
11
|
+
import com.conviva.apptracker.configuration.SubjectConfiguration;
|
|
12
|
+
import com.conviva.apptracker.configuration.TrackerConfiguration;
|
|
13
|
+
import com.conviva.apptracker.controller.TrackerController;
|
|
14
|
+
import com.conviva.apptracker.event.ConsentGranted;
|
|
15
|
+
import com.conviva.apptracker.event.ConsentWithdrawn;
|
|
16
|
+
import com.conviva.apptracker.event.DeepLinkReceived;
|
|
17
|
+
import com.conviva.apptracker.event.EcommerceTransaction;
|
|
18
|
+
import com.conviva.apptracker.event.MessageNotification;
|
|
19
|
+
import com.conviva.apptracker.event.PageView;
|
|
20
|
+
import com.conviva.apptracker.event.ScreenView;
|
|
21
|
+
import com.conviva.apptracker.event.SelfDescribing;
|
|
22
|
+
import com.conviva.apptracker.event.Structured;
|
|
23
|
+
import com.conviva.apptracker.event.Timing;
|
|
24
|
+
import com.conviva.apptracker.globalcontexts.GlobalContext;
|
|
25
|
+
import com.conviva.apptracker.internal.constants.TrackerConstants;
|
|
26
|
+
import com.conviva.apptracker.network.CollectorCookieJar;
|
|
27
|
+
import com.conviva.apptracker.network.HttpMethod;
|
|
28
|
+
import com.conviva.apptracker.payload.SelfDescribingJson;
|
|
29
|
+
import com.conviva.apptracker.util.Size;
|
|
30
|
+
import com.conviva.react.apptracker.util.ConfigUtil;
|
|
31
|
+
import com.conviva.react.apptracker.util.EventUtil;
|
|
32
|
+
import com.facebook.react.bridge.Promise;
|
|
33
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
34
|
+
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
|
35
|
+
import com.facebook.react.bridge.ReactMethod;
|
|
36
|
+
import com.facebook.react.bridge.ReadableArray;
|
|
37
|
+
import com.facebook.react.bridge.ReadableMap;
|
|
38
|
+
import com.facebook.react.bridge.ReadableMapKeySetIterator;
|
|
39
|
+
|
|
40
|
+
import org.json.simple.JSONValue;
|
|
41
|
+
|
|
42
|
+
import java.util.ArrayList;
|
|
43
|
+
import java.util.HashMap;
|
|
44
|
+
import java.util.HashSet;
|
|
45
|
+
import java.util.List;
|
|
46
|
+
import java.util.concurrent.TimeUnit;
|
|
47
|
+
|
|
48
|
+
import okhttp3.OkHttpClient;
|
|
49
|
+
import okhttp3.Request;
|
|
50
|
+
|
|
51
|
+
public class RNConvivaTrackerModule extends ReactContextBaseJavaModule {
|
|
52
|
+
|
|
53
|
+
private final ReactApplicationContext reactContext;
|
|
54
|
+
|
|
55
|
+
public RNConvivaTrackerModule(ReactApplicationContext reactContext) {
|
|
56
|
+
super(reactContext);
|
|
57
|
+
this.reactContext = reactContext;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
@Override
|
|
61
|
+
public String getName() {
|
|
62
|
+
return "RNConvivaTracker";
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
@ReactMethod
|
|
66
|
+
public void createTracker(ReadableMap argmap, Promise promise) {
|
|
67
|
+
try {
|
|
68
|
+
String appName = argmap.getString("appName");
|
|
69
|
+
String customerKey = argmap.getString("customerKey");
|
|
70
|
+
|
|
71
|
+
// Configurations
|
|
72
|
+
List<Configuration> controllers = new ArrayList<Configuration>();
|
|
73
|
+
|
|
74
|
+
// NetworkConfiguration
|
|
75
|
+
NetworkConfiguration networkConfiguration;
|
|
76
|
+
if (argmap.hasKey("networkConfig")) {
|
|
77
|
+
ReadableMap networkConfig = argmap.getMap("networkConfig");
|
|
78
|
+
String endpoint = TrackerConstants.CONVIVA_PRODUCTION_ENDPOINT;
|
|
79
|
+
if (networkConfig.hasKey("endpoint") && !networkConfig.isNull("endpoint")) {
|
|
80
|
+
endpoint = networkConfig.getString("endpoint");
|
|
81
|
+
}
|
|
82
|
+
if (networkConfig.hasKey("method") && !networkConfig.isNull("method")) {
|
|
83
|
+
String method = networkConfig.getString("method");
|
|
84
|
+
networkConfiguration = new NetworkConfiguration(endpoint, ("get".equalsIgnoreCase(method) ? HttpMethod.GET : HttpMethod.POST));
|
|
85
|
+
} else {
|
|
86
|
+
networkConfiguration = new NetworkConfiguration(networkConfig.getString("endpoint"));
|
|
87
|
+
}
|
|
88
|
+
if (networkConfig.hasKey("customPostPath") && !networkConfig.isNull("customPostPath")) {
|
|
89
|
+
String customPostPath = networkConfig.getString("customPostPath");
|
|
90
|
+
networkConfiguration.customPostPath = customPostPath;
|
|
91
|
+
} else {
|
|
92
|
+
networkConfiguration.customPostPath = (customerKey + "/" + TrackerConstants.CONVIVA_PROTOCOL_VERSION);
|
|
93
|
+
}
|
|
94
|
+
if (networkConfig.hasKey("requestHeaders") && !networkConfig.isNull("requestHeaders")) {
|
|
95
|
+
ReadableMap requestHeaders = networkConfig.getMap("requestHeaders");
|
|
96
|
+
if (requestHeaders != null) {
|
|
97
|
+
OkHttpClient client = new OkHttpClient.Builder().connectTimeout(15, TimeUnit.SECONDS).readTimeout(15, TimeUnit.SECONDS).cookieJar(new CollectorCookieJar(reactContext)).addInterceptor(chain -> {
|
|
98
|
+
Request.Builder requestBuilder = chain.request().newBuilder();
|
|
99
|
+
ReadableMapKeySetIterator it = requestHeaders.keySetIterator();
|
|
100
|
+
while (it.hasNextKey()) {
|
|
101
|
+
String key = it.nextKey();
|
|
102
|
+
String value = requestHeaders.getString(key);
|
|
103
|
+
if (value != null) {
|
|
104
|
+
requestBuilder.header(key, value);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return chain.proceed(requestBuilder.build());
|
|
108
|
+
}).build();
|
|
109
|
+
networkConfiguration.okHttpClient(client);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
controllers.add(networkConfiguration);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// TrackerConfiguration
|
|
116
|
+
// Need to create the TrackerConfiguration to update the postfix for the tracker version
|
|
117
|
+
ReadableMap trackerConfig = null;
|
|
118
|
+
if (argmap.hasKey("trackerConfig")) {
|
|
119
|
+
trackerConfig = argmap.getMap("trackerConfig");
|
|
120
|
+
}
|
|
121
|
+
TrackerConfiguration trackerConfiguration = ConfigUtil.mkTrackerConfiguration(trackerConfig, appName, this.reactContext);
|
|
122
|
+
controllers.add(trackerConfiguration);
|
|
123
|
+
|
|
124
|
+
// SessionConfiguration
|
|
125
|
+
if (argmap.hasKey("sessionConfig")) {
|
|
126
|
+
ReadableMap sessionConfig = argmap.getMap("sessionConfig");
|
|
127
|
+
SessionConfiguration sessionConfiguration = ConfigUtil.mkSessionConfiguration(sessionConfig);
|
|
128
|
+
controllers.add(sessionConfiguration);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// EmitterConfiguration
|
|
132
|
+
if (argmap.hasKey("emitterConfig")) {
|
|
133
|
+
ReadableMap emitterConfig = argmap.getMap("emitterConfig");
|
|
134
|
+
EmitterConfiguration emitterConfiguration = ConfigUtil.mkEmitterConfiguration(emitterConfig);
|
|
135
|
+
controllers.add(emitterConfiguration);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// SubjectConfiguration
|
|
139
|
+
if (argmap.hasKey("subjectConfig")) {
|
|
140
|
+
ReadableMap subjectConfig = argmap.getMap("subjectConfig");
|
|
141
|
+
SubjectConfiguration subjectConfiguration = ConfigUtil.mkSubjectConfiguration(subjectConfig);
|
|
142
|
+
controllers.add(subjectConfiguration);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// GdprConfiguration
|
|
146
|
+
if (argmap.hasKey("gdprConfig")) {
|
|
147
|
+
ReadableMap gdprConfig = argmap.getMap("gdprConfig");
|
|
148
|
+
GdprConfiguration gdprConfiguration = ConfigUtil.mkGdprConfiguration(gdprConfig);
|
|
149
|
+
controllers.add(gdprConfiguration);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// GCConfiguration
|
|
153
|
+
if (argmap.hasKey("gcConfig")) {
|
|
154
|
+
ReadableArray gcConfig = argmap.getArray("gcConfig");
|
|
155
|
+
GlobalContextsConfiguration gcConfiguration = ConfigUtil.mkGCConfiguration(gcConfig);
|
|
156
|
+
controllers.add(gcConfiguration);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
String remoteConfigUrl = RemoteConfiguration.DEFAULT_ENDPOINT;
|
|
160
|
+
if (argmap.hasKey("remoteConfiguration")) {
|
|
161
|
+
ReadableMap remoteConfig = argmap.getMap("remoteConfiguration");
|
|
162
|
+
if (remoteConfig.hasKey("endpoint")) {
|
|
163
|
+
remoteConfigUrl = remoteConfig.getString("endpoint");
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// create the tracker
|
|
168
|
+
ConvivaAppAnalytics.createTracker(this.reactContext, customerKey, appName, controllers.toArray(new Configuration[controllers.size()]));
|
|
169
|
+
|
|
170
|
+
promise.resolve(true);
|
|
171
|
+
|
|
172
|
+
} catch (Throwable t) {
|
|
173
|
+
promise.reject("ERROR", t.getMessage());
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
@ReactMethod
|
|
178
|
+
public void removeTracker(ReadableMap details, Promise promise) {
|
|
179
|
+
try {
|
|
180
|
+
String namespace = details.getString("tracker");
|
|
181
|
+
TrackerController trackerController = getTracker(namespace);
|
|
182
|
+
|
|
183
|
+
promise.resolve(ConvivaAppAnalytics.removeTracker(trackerController));
|
|
184
|
+
|
|
185
|
+
} catch (Throwable t) {
|
|
186
|
+
promise.reject("ERROR", t.getMessage());
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
@ReactMethod
|
|
191
|
+
public void removeAllTrackers(Promise promise) {
|
|
192
|
+
try {
|
|
193
|
+
ConvivaAppAnalytics.removeAllTrackers();
|
|
194
|
+
promise.resolve(true);
|
|
195
|
+
|
|
196
|
+
} catch (Throwable t) {
|
|
197
|
+
promise.reject("ERROR", t.getMessage());
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
@ReactMethod
|
|
202
|
+
public void trackSelfDescribingEvent(ReadableMap details, Promise promise) {
|
|
203
|
+
try {
|
|
204
|
+
String namespace = details.getString("tracker");
|
|
205
|
+
ReadableMap argmap = details.getMap("eventData");
|
|
206
|
+
ReadableArray contexts = details.getArray("contexts");
|
|
207
|
+
|
|
208
|
+
TrackerController trackerController = getTracker(namespace);
|
|
209
|
+
|
|
210
|
+
SelfDescribingJson sdj = EventUtil.createSelfDescribingJson(argmap);
|
|
211
|
+
SelfDescribing event = new SelfDescribing(sdj);
|
|
212
|
+
|
|
213
|
+
List<SelfDescribingJson> evCtxts = EventUtil.createContexts(contexts);
|
|
214
|
+
event.customContexts.addAll(evCtxts);
|
|
215
|
+
|
|
216
|
+
trackerController.track(event);
|
|
217
|
+
promise.resolve(true);
|
|
218
|
+
|
|
219
|
+
} catch (Throwable t) {
|
|
220
|
+
promise.reject("ERROR", t.getMessage());
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
@ReactMethod
|
|
225
|
+
public void trackStructuredEvent(ReadableMap details, Promise promise) {
|
|
226
|
+
try {
|
|
227
|
+
String namespace = details.getString("tracker");
|
|
228
|
+
ReadableMap argmap = details.getMap("eventData");
|
|
229
|
+
ReadableArray contexts = details.getArray("contexts");
|
|
230
|
+
|
|
231
|
+
TrackerController trackerController = getTracker(namespace);
|
|
232
|
+
|
|
233
|
+
Structured event = EventUtil.createStructuredEvent(argmap);
|
|
234
|
+
|
|
235
|
+
List<SelfDescribingJson> evCtxts = EventUtil.createContexts(contexts);
|
|
236
|
+
event.customContexts.addAll(evCtxts);
|
|
237
|
+
|
|
238
|
+
trackerController.track(event);
|
|
239
|
+
promise.resolve(true);
|
|
240
|
+
|
|
241
|
+
} catch (Throwable t) {
|
|
242
|
+
promise.reject("ERROR", t.getMessage());
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
@ReactMethod
|
|
247
|
+
public void trackScreenViewEvent(ReadableMap details, Promise promise) {
|
|
248
|
+
try {
|
|
249
|
+
String namespace = details.getString("tracker");
|
|
250
|
+
ReadableMap argmap = details.getMap("eventData");
|
|
251
|
+
ReadableArray contexts = details.getArray("contexts");
|
|
252
|
+
|
|
253
|
+
TrackerController trackerController = getTracker(namespace);
|
|
254
|
+
|
|
255
|
+
ScreenView event = EventUtil.createScreenViewEvent(argmap);
|
|
256
|
+
|
|
257
|
+
List<SelfDescribingJson> evCtxts = EventUtil.createContexts(contexts);
|
|
258
|
+
event.customContexts.addAll(evCtxts);
|
|
259
|
+
|
|
260
|
+
trackerController.track(event);
|
|
261
|
+
promise.resolve(true);
|
|
262
|
+
|
|
263
|
+
} catch (Throwable t) {
|
|
264
|
+
promise.reject("ERROR", t.getMessage());
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
@ReactMethod
|
|
269
|
+
public void trackPageView(ReadableMap details, Promise promise) {
|
|
270
|
+
try {
|
|
271
|
+
String namespace = details.getString("tracker");
|
|
272
|
+
ReadableMap argmap = details.getMap("eventData");
|
|
273
|
+
ReadableArray contexts = details.getArray("contexts");
|
|
274
|
+
|
|
275
|
+
TrackerController trackerController = getTracker(namespace);
|
|
276
|
+
|
|
277
|
+
PageView event = EventUtil.createPageViewEvent(argmap);
|
|
278
|
+
|
|
279
|
+
List<SelfDescribingJson> evCtxts = EventUtil.createContexts(contexts);
|
|
280
|
+
event.customContexts.addAll(evCtxts);
|
|
281
|
+
|
|
282
|
+
trackerController.track(event);
|
|
283
|
+
promise.resolve(true);
|
|
284
|
+
|
|
285
|
+
} catch (Throwable t) {
|
|
286
|
+
promise.reject("ERROR", t.getMessage());
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
@ReactMethod
|
|
291
|
+
public void trackTimingEvent(ReadableMap details, Promise promise) {
|
|
292
|
+
try {
|
|
293
|
+
String namespace = details.getString("tracker");
|
|
294
|
+
ReadableMap argmap = details.getMap("eventData");
|
|
295
|
+
ReadableArray contexts = details.getArray("contexts");
|
|
296
|
+
|
|
297
|
+
TrackerController trackerController = getTracker(namespace);
|
|
298
|
+
|
|
299
|
+
Timing event = EventUtil.createTimingEvent(argmap);
|
|
300
|
+
|
|
301
|
+
List<SelfDescribingJson> evCtxts = EventUtil.createContexts(contexts);
|
|
302
|
+
event.customContexts.addAll(evCtxts);
|
|
303
|
+
|
|
304
|
+
trackerController.track(event);
|
|
305
|
+
promise.resolve(true);
|
|
306
|
+
|
|
307
|
+
} catch (Throwable t) {
|
|
308
|
+
promise.reject("ERROR", t.getMessage());
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
@ReactMethod
|
|
313
|
+
public void trackConsentGrantedEvent(ReadableMap details, Promise promise) {
|
|
314
|
+
try {
|
|
315
|
+
String namespace = details.getString("tracker");
|
|
316
|
+
ReadableMap argmap = details.getMap("eventData");
|
|
317
|
+
ReadableArray contexts = details.getArray("contexts");
|
|
318
|
+
|
|
319
|
+
TrackerController trackerController = getTracker(namespace);
|
|
320
|
+
|
|
321
|
+
ConsentGranted event = EventUtil.createConsentGrantedEvent(argmap);
|
|
322
|
+
|
|
323
|
+
List<SelfDescribingJson> evCtxts = EventUtil.createContexts(contexts);
|
|
324
|
+
event.customContexts.addAll(evCtxts);
|
|
325
|
+
|
|
326
|
+
trackerController.track(event);
|
|
327
|
+
promise.resolve(true);
|
|
328
|
+
|
|
329
|
+
} catch (Throwable t) {
|
|
330
|
+
promise.reject("ERROR", t.getMessage());
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
@ReactMethod
|
|
335
|
+
public void trackConsentWithdrawnEvent(ReadableMap details, Promise promise) {
|
|
336
|
+
try {
|
|
337
|
+
String namespace = details.getString("tracker");
|
|
338
|
+
ReadableMap argmap = details.getMap("eventData");
|
|
339
|
+
ReadableArray contexts = details.getArray("contexts");
|
|
340
|
+
|
|
341
|
+
TrackerController trackerController = getTracker(namespace);
|
|
342
|
+
|
|
343
|
+
ConsentWithdrawn event = EventUtil.createConsentWithdrawnEvent(argmap);
|
|
344
|
+
|
|
345
|
+
List<SelfDescribingJson> evCtxts = EventUtil.createContexts(contexts);
|
|
346
|
+
event.customContexts.addAll(evCtxts);
|
|
347
|
+
|
|
348
|
+
trackerController.track(event);
|
|
349
|
+
promise.resolve(true);
|
|
350
|
+
|
|
351
|
+
} catch (Throwable t) {
|
|
352
|
+
promise.reject("ERROR", t.getMessage());
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
@ReactMethod
|
|
357
|
+
public void trackEcommerceTransactionEvent(ReadableMap details, Promise promise) {
|
|
358
|
+
try {
|
|
359
|
+
String namespace = details.getString("tracker");
|
|
360
|
+
ReadableMap argmap = details.getMap("eventData");
|
|
361
|
+
ReadableArray contexts = details.getArray("contexts");
|
|
362
|
+
|
|
363
|
+
TrackerController trackerController = getTracker(namespace);
|
|
364
|
+
|
|
365
|
+
EcommerceTransaction event = EventUtil.createEcommerceTransactionEvent(argmap);
|
|
366
|
+
|
|
367
|
+
List<SelfDescribingJson> evCtxts = EventUtil.createContexts(contexts);
|
|
368
|
+
event.customContexts.addAll(evCtxts);
|
|
369
|
+
|
|
370
|
+
trackerController.track(event);
|
|
371
|
+
promise.resolve(true);
|
|
372
|
+
|
|
373
|
+
} catch (Throwable t) {
|
|
374
|
+
promise.reject("ERROR", t.getMessage());
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
@ReactMethod
|
|
379
|
+
public void trackDeepLinkReceivedEvent(ReadableMap details, Promise promise) {
|
|
380
|
+
try {
|
|
381
|
+
String namespace = details.getString("tracker");
|
|
382
|
+
ReadableMap argmap = details.getMap("eventData");
|
|
383
|
+
ReadableArray contexts = details.getArray("contexts");
|
|
384
|
+
|
|
385
|
+
TrackerController trackerController = getTracker(namespace);
|
|
386
|
+
|
|
387
|
+
DeepLinkReceived event = EventUtil.createDeepLinkReceivedEvent(argmap);
|
|
388
|
+
|
|
389
|
+
List<SelfDescribingJson> evCtxts = EventUtil.createContexts(contexts);
|
|
390
|
+
event.customContexts.addAll(evCtxts);
|
|
391
|
+
|
|
392
|
+
trackerController.track(event);
|
|
393
|
+
promise.resolve(true);
|
|
394
|
+
|
|
395
|
+
} catch (Throwable t) {
|
|
396
|
+
promise.reject("ERROR", t.getMessage());
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
@ReactMethod
|
|
401
|
+
public void trackMessageNotificationEvent(ReadableMap details, Promise promise) {
|
|
402
|
+
try {
|
|
403
|
+
String namespace = details.getString("tracker");
|
|
404
|
+
ReadableMap argmap = details.getMap("eventData");
|
|
405
|
+
ReadableArray contexts = details.getArray("contexts");
|
|
406
|
+
|
|
407
|
+
TrackerController trackerController = getTracker(namespace);
|
|
408
|
+
|
|
409
|
+
MessageNotification event = EventUtil.createMessageNotificationEvent(argmap);
|
|
410
|
+
|
|
411
|
+
List<SelfDescribingJson> evCtxts = EventUtil.createContexts(contexts);
|
|
412
|
+
event.customContexts.addAll(evCtxts);
|
|
413
|
+
|
|
414
|
+
trackerController.track(event);
|
|
415
|
+
promise.resolve(true);
|
|
416
|
+
|
|
417
|
+
} catch (Throwable t) {
|
|
418
|
+
promise.reject("ERROR", t.getMessage());
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
@ReactMethod
|
|
423
|
+
public void trackCustomEvent(ReadableMap details, Promise promise) {
|
|
424
|
+
try {
|
|
425
|
+
String namespace = details.getString("tracker");
|
|
426
|
+
String eventName = details.getString("eventName");
|
|
427
|
+
ReadableMap argmap = details.getMap("eventData");
|
|
428
|
+
|
|
429
|
+
TrackerController trackerController = getTracker(namespace);
|
|
430
|
+
|
|
431
|
+
HashMap<String, Object> eventData = argmap.toHashMap();
|
|
432
|
+
|
|
433
|
+
trackerController.trackCustomEvent(eventName, JSONValue.toJSONString(eventData));
|
|
434
|
+
promise.resolve(true);
|
|
435
|
+
|
|
436
|
+
} catch (Throwable t) {
|
|
437
|
+
promise.reject("ERROR", t.getMessage());
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
@ReactMethod
|
|
442
|
+
public void setCustomTags(ReadableMap details, Promise promise) {
|
|
443
|
+
try {
|
|
444
|
+
String namespace = details.getString("tracker");
|
|
445
|
+
ReadableMap argmap = details.getMap("tags");
|
|
446
|
+
|
|
447
|
+
TrackerController trackerController = getTracker(namespace);
|
|
448
|
+
|
|
449
|
+
HashMap<String, Object> tags = argmap.toHashMap();
|
|
450
|
+
|
|
451
|
+
trackerController.setCustomTags(tags);
|
|
452
|
+
promise.resolve(true);
|
|
453
|
+
|
|
454
|
+
} catch (Throwable t) {
|
|
455
|
+
promise.reject("ERROR", t.getMessage());
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
@ReactMethod
|
|
460
|
+
public void clearCustomTags(ReadableMap details, Promise promise) {
|
|
461
|
+
try {
|
|
462
|
+
String namespace = details.getString("tracker");
|
|
463
|
+
ReadableArray argArray = details.getArray("tagKeys");
|
|
464
|
+
|
|
465
|
+
TrackerController trackerController = getTracker(namespace);
|
|
466
|
+
|
|
467
|
+
List<String> tagKeys = EventUtil.createStrings(argArray);
|
|
468
|
+
trackerController.clearCustomTags(new HashSet<>(tagKeys));
|
|
469
|
+
promise.resolve(true);
|
|
470
|
+
|
|
471
|
+
} catch (Throwable t) {
|
|
472
|
+
promise.reject("ERROR", t.getMessage());
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
@ReactMethod
|
|
477
|
+
public void clearAllCustomTags(ReadableMap details, Promise promise) {
|
|
478
|
+
try {
|
|
479
|
+
String namespace = details.getString("tracker");
|
|
480
|
+
TrackerController trackerController = getTracker(namespace);
|
|
481
|
+
|
|
482
|
+
trackerController.clearAllCustomTags();
|
|
483
|
+
promise.resolve(true);
|
|
484
|
+
|
|
485
|
+
} catch (Throwable t) {
|
|
486
|
+
promise.reject("ERROR", t.getMessage());
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
@ReactMethod
|
|
491
|
+
public void removeGlobalContexts(ReadableMap details, Promise promise) {
|
|
492
|
+
try {
|
|
493
|
+
String namespace = details.getString("tracker");
|
|
494
|
+
String tag = details.getString("removeTag");
|
|
495
|
+
|
|
496
|
+
TrackerController trackerController = getTracker(namespace);
|
|
497
|
+
|
|
498
|
+
trackerController.getGlobalContexts().remove(tag);
|
|
499
|
+
promise.resolve(true);
|
|
500
|
+
|
|
501
|
+
} catch (Throwable t) {
|
|
502
|
+
promise.reject("ERROR", t.getMessage());
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
@ReactMethod
|
|
507
|
+
public void addGlobalContexts(ReadableMap details, Promise promise) {
|
|
508
|
+
try {
|
|
509
|
+
String namespace = details.getString("tracker");
|
|
510
|
+
ReadableMap gcArg = details.getMap("addGlobalContext");
|
|
511
|
+
|
|
512
|
+
String tag = gcArg.getString("tag");
|
|
513
|
+
ReadableArray globalContexts = gcArg.getArray("globalContexts");
|
|
514
|
+
|
|
515
|
+
List<SelfDescribingJson> staticContexts = new ArrayList<>();
|
|
516
|
+
for (int i = 0; i < globalContexts.size(); i++) {
|
|
517
|
+
SelfDescribingJson gContext = EventUtil.createSelfDescribingJson(globalContexts.getMap(i));
|
|
518
|
+
staticContexts.add(gContext);
|
|
519
|
+
}
|
|
520
|
+
GlobalContext gcStatic = new GlobalContext(staticContexts);
|
|
521
|
+
|
|
522
|
+
TrackerController trackerController = getTracker(namespace);
|
|
523
|
+
|
|
524
|
+
trackerController.getGlobalContexts().add(tag, gcStatic);
|
|
525
|
+
promise.resolve(true);
|
|
526
|
+
|
|
527
|
+
} catch (Throwable t) {
|
|
528
|
+
promise.reject("ERROR", t.getMessage());
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
@ReactMethod
|
|
533
|
+
public void setUserId(ReadableMap details, Promise promise) {
|
|
534
|
+
try {
|
|
535
|
+
String namespace = details.getString("tracker");
|
|
536
|
+
TrackerController trackerController = getTracker(namespace);
|
|
537
|
+
|
|
538
|
+
if (details.isNull("userId")) {
|
|
539
|
+
trackerController.getSubject().setUserId(null);
|
|
540
|
+
} else {
|
|
541
|
+
trackerController.getSubject().setUserId(details.getString("userId"));
|
|
542
|
+
}
|
|
543
|
+
promise.resolve(true);
|
|
544
|
+
|
|
545
|
+
} catch (Throwable t) {
|
|
546
|
+
promise.reject("ERROR", t.getMessage());
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
@ReactMethod
|
|
551
|
+
public void setNetworkUserId(ReadableMap details, Promise promise) {
|
|
552
|
+
try {
|
|
553
|
+
String namespace = details.getString("tracker");
|
|
554
|
+
TrackerController trackerController = getTracker(namespace);
|
|
555
|
+
|
|
556
|
+
if (details.isNull("networkUserId")) {
|
|
557
|
+
trackerController.getSubject().setNetworkUserId(null);
|
|
558
|
+
} else {
|
|
559
|
+
trackerController.getSubject().setNetworkUserId(details.getString("networkUserId"));
|
|
560
|
+
}
|
|
561
|
+
promise.resolve(true);
|
|
562
|
+
|
|
563
|
+
} catch (Throwable t) {
|
|
564
|
+
promise.reject("ERROR", t.getMessage());
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
@ReactMethod
|
|
569
|
+
public void setDomainUserId(ReadableMap details, Promise promise) {
|
|
570
|
+
try {
|
|
571
|
+
String namespace = details.getString("tracker");
|
|
572
|
+
TrackerController trackerController = getTracker(namespace);
|
|
573
|
+
|
|
574
|
+
if (details.isNull("domainUserId")) {
|
|
575
|
+
trackerController.getSubject().setDomainUserId(null);
|
|
576
|
+
} else {
|
|
577
|
+
trackerController.getSubject().setDomainUserId(details.getString("domainUserId"));
|
|
578
|
+
}
|
|
579
|
+
promise.resolve(true);
|
|
580
|
+
|
|
581
|
+
} catch (Throwable t) {
|
|
582
|
+
promise.reject("ERROR", t.getMessage());
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
@ReactMethod
|
|
587
|
+
public void setIpAddress(ReadableMap details, Promise promise) {
|
|
588
|
+
try {
|
|
589
|
+
String namespace = details.getString("tracker");
|
|
590
|
+
TrackerController trackerController = getTracker(namespace);
|
|
591
|
+
|
|
592
|
+
if (details.isNull("ipAddress")) {
|
|
593
|
+
trackerController.getSubject().setIpAddress(null);
|
|
594
|
+
} else {
|
|
595
|
+
trackerController.getSubject().setIpAddress(details.getString("ipAddress"));
|
|
596
|
+
}
|
|
597
|
+
promise.resolve(true);
|
|
598
|
+
|
|
599
|
+
} catch (Throwable t) {
|
|
600
|
+
promise.reject("ERROR", t.getMessage());
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
@ReactMethod
|
|
605
|
+
public void setUseragent(ReadableMap details, Promise promise) {
|
|
606
|
+
try {
|
|
607
|
+
String namespace = details.getString("tracker");
|
|
608
|
+
TrackerController trackerController = getTracker(namespace);
|
|
609
|
+
|
|
610
|
+
if (details.isNull("useragent")) {
|
|
611
|
+
trackerController.getSubject().setUseragent(null);
|
|
612
|
+
} else {
|
|
613
|
+
trackerController.getSubject().setUseragent(details.getString("useragent"));
|
|
614
|
+
}
|
|
615
|
+
promise.resolve(true);
|
|
616
|
+
|
|
617
|
+
} catch (Throwable t) {
|
|
618
|
+
promise.reject("ERROR", t.getMessage());
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
@ReactMethod
|
|
623
|
+
public void setTimezone(ReadableMap details, Promise promise) {
|
|
624
|
+
try {
|
|
625
|
+
String namespace = details.getString("tracker");
|
|
626
|
+
TrackerController trackerController = getTracker(namespace);
|
|
627
|
+
|
|
628
|
+
if (details.isNull("timezone")) {
|
|
629
|
+
trackerController.getSubject().setTimezone(null);
|
|
630
|
+
} else {
|
|
631
|
+
trackerController.getSubject().setTimezone(details.getString("timezone"));
|
|
632
|
+
}
|
|
633
|
+
promise.resolve(true);
|
|
634
|
+
|
|
635
|
+
} catch (Throwable t) {
|
|
636
|
+
promise.reject("ERROR", t.getMessage());
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
@ReactMethod
|
|
641
|
+
public void setLanguage(ReadableMap details, Promise promise) {
|
|
642
|
+
try {
|
|
643
|
+
String namespace = details.getString("tracker");
|
|
644
|
+
TrackerController trackerController = getTracker(namespace);
|
|
645
|
+
|
|
646
|
+
if (details.isNull("language")) {
|
|
647
|
+
trackerController.getSubject().setLanguage(null);
|
|
648
|
+
} else {
|
|
649
|
+
trackerController.getSubject().setLanguage(details.getString("language"));
|
|
650
|
+
}
|
|
651
|
+
promise.resolve(true);
|
|
652
|
+
|
|
653
|
+
} catch (Throwable t) {
|
|
654
|
+
promise.reject("ERROR", t.getMessage());
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
@ReactMethod
|
|
659
|
+
public void setScreenResolution(ReadableMap details, Promise promise) {
|
|
660
|
+
try {
|
|
661
|
+
String namespace = details.getString("tracker");
|
|
662
|
+
TrackerController trackerController = getTracker(namespace);
|
|
663
|
+
|
|
664
|
+
if (details.isNull("screenResolution")) {
|
|
665
|
+
trackerController.getSubject().setScreenResolution(null);
|
|
666
|
+
} else {
|
|
667
|
+
ReadableArray screenRes = details.getArray("screenResolution");
|
|
668
|
+
int width = screenRes.getInt(0);
|
|
669
|
+
int height = screenRes.getInt(1);
|
|
670
|
+
Size screenR = new Size(width, height);
|
|
671
|
+
|
|
672
|
+
trackerController.getSubject().setScreenResolution(screenR);
|
|
673
|
+
}
|
|
674
|
+
promise.resolve(true);
|
|
675
|
+
|
|
676
|
+
} catch (Throwable t) {
|
|
677
|
+
promise.reject("ERROR", t.getMessage());
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
@ReactMethod
|
|
682
|
+
public void setScreenViewport(ReadableMap details, Promise promise) {
|
|
683
|
+
try {
|
|
684
|
+
String namespace = details.getString("tracker");
|
|
685
|
+
TrackerController trackerController = getTracker(namespace);
|
|
686
|
+
|
|
687
|
+
if (details.isNull("screenViewport")) {
|
|
688
|
+
trackerController.getSubject().setScreenViewPort(null);
|
|
689
|
+
} else {
|
|
690
|
+
ReadableArray screenView = details.getArray("screenViewport");
|
|
691
|
+
int width = screenView.getInt(0);
|
|
692
|
+
int height = screenView.getInt(1);
|
|
693
|
+
Size screenVP = new Size(width, height);
|
|
694
|
+
|
|
695
|
+
trackerController.getSubject().setScreenViewPort(screenVP);
|
|
696
|
+
}
|
|
697
|
+
promise.resolve(true);
|
|
698
|
+
|
|
699
|
+
} catch (Throwable t) {
|
|
700
|
+
promise.reject("ERROR", t.getMessage());
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
@ReactMethod
|
|
705
|
+
public void setColorDepth(ReadableMap details, Promise promise) {
|
|
706
|
+
try {
|
|
707
|
+
String namespace = details.getString("tracker");
|
|
708
|
+
TrackerController trackerController = getTracker(namespace);
|
|
709
|
+
|
|
710
|
+
if (details.isNull("colorDepth")) {
|
|
711
|
+
trackerController.getSubject().setColorDepth(null);
|
|
712
|
+
} else {
|
|
713
|
+
trackerController.getSubject().setColorDepth(details.getInt("colorDepth"));
|
|
714
|
+
}
|
|
715
|
+
promise.resolve(true);
|
|
716
|
+
|
|
717
|
+
} catch (Throwable t) {
|
|
718
|
+
promise.reject("ERROR", t.getMessage());
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
@ReactMethod
|
|
723
|
+
public void getSessionUserId(ReadableMap details, Promise promise) {
|
|
724
|
+
try {
|
|
725
|
+
String namespace = details.getString("tracker");
|
|
726
|
+
TrackerController trackerController = getTracker(namespace);
|
|
727
|
+
|
|
728
|
+
String suid = trackerController.getSession().getUserId();
|
|
729
|
+
promise.resolve(suid);
|
|
730
|
+
} catch (Throwable t) {
|
|
731
|
+
promise.reject("ERROR", t.getMessage());
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
@ReactMethod
|
|
736
|
+
public void getSessionId(ReadableMap details, Promise promise) {
|
|
737
|
+
try {
|
|
738
|
+
String namespace = details.getString("tracker");
|
|
739
|
+
TrackerController trackerController = getTracker(namespace);
|
|
740
|
+
|
|
741
|
+
String sid = trackerController.getSession().getSessionId();
|
|
742
|
+
promise.resolve(sid);
|
|
743
|
+
} catch (Throwable t) {
|
|
744
|
+
promise.reject("ERROR", t.getMessage());
|
|
745
|
+
}
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
@ReactMethod
|
|
749
|
+
public void getSessionIndex(ReadableMap details, Promise promise) {
|
|
750
|
+
try {
|
|
751
|
+
String namespace = details.getString("tracker");
|
|
752
|
+
TrackerController trackerController = getTracker(namespace);
|
|
753
|
+
|
|
754
|
+
int sidx = trackerController.getSession().getSessionIndex();
|
|
755
|
+
promise.resolve(sidx);
|
|
756
|
+
} catch (Throwable t) {
|
|
757
|
+
promise.reject("ERROR", t.getMessage());
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
@ReactMethod
|
|
762
|
+
public void getIsInBackground(ReadableMap details, Promise promise) {
|
|
763
|
+
try {
|
|
764
|
+
String namespace = details.getString("tracker");
|
|
765
|
+
TrackerController trackerController = getTracker(namespace);
|
|
766
|
+
|
|
767
|
+
boolean isInBg = trackerController.getSession().isInBackground();
|
|
768
|
+
promise.resolve(isInBg);
|
|
769
|
+
} catch (Throwable t) {
|
|
770
|
+
promise.reject("ERROR", t.getMessage());
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
@ReactMethod
|
|
775
|
+
public void getBackgroundIndex(ReadableMap details, Promise promise) {
|
|
776
|
+
try {
|
|
777
|
+
String namespace = details.getString("tracker");
|
|
778
|
+
TrackerController trackerController = getTracker(namespace);
|
|
779
|
+
|
|
780
|
+
int bgIdx = trackerController.getSession().getBackgroundIndex();
|
|
781
|
+
promise.resolve(bgIdx);
|
|
782
|
+
} catch (Throwable t) {
|
|
783
|
+
promise.reject("ERROR", t.getMessage());
|
|
784
|
+
}
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
@ReactMethod
|
|
788
|
+
public void getForegroundIndex(ReadableMap details, Promise promise) {
|
|
789
|
+
try {
|
|
790
|
+
String namespace = details.getString("tracker");
|
|
791
|
+
TrackerController trackerController = getTracker(namespace);
|
|
792
|
+
|
|
793
|
+
int fgIdx = trackerController.getSession().getForegroundIndex();
|
|
794
|
+
promise.resolve(fgIdx);
|
|
795
|
+
} catch (Throwable t) {
|
|
796
|
+
promise.reject("ERROR", t.getMessage());
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
private TrackerController getTracker(String namespace) {
|
|
801
|
+
return namespace == null ? ConvivaAppAnalytics.getDefaultTracker() : ConvivaAppAnalytics.getTracker(namespace);
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
}
|