@appmetrica/react-native-analytics 3.2.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/android/build.gradle +1 -1
  2. package/android/src/main/java/io/appmetrica/analytics/reactnative/AppMetricaModule.java +73 -7
  3. package/android/src/main/java/io/appmetrica/analytics/reactnative/AppMetricaPackage.java +1 -0
  4. package/android/src/main/java/io/appmetrica/analytics/reactnative/ExceptionSerializer.java +91 -0
  5. package/android/src/main/java/io/appmetrica/analytics/reactnative/ExternalAttributionSerializer.java +44 -0
  6. package/android/src/main/java/io/appmetrica/analytics/reactnative/ReactNativeDeferredDeeplinkListener.java +48 -0
  7. package/android/src/main/java/io/appmetrica/analytics/reactnative/ReactNativeDeferredDeeplinkParametersListener.java +53 -0
  8. package/android/src/main/java/io/appmetrica/analytics/reactnative/ReporterModule.java +130 -0
  9. package/android/src/main/java/io/appmetrica/analytics/reactnative/Utils.java +55 -1
  10. package/appmetrica-react-native-analytics.podspec +1 -1
  11. package/ios/AMARNAppMetrica.m +92 -4
  12. package/ios/AMARNAppMetricaUtils.h +1 -0
  13. package/ios/AMARNAppMetricaUtils.m +46 -0
  14. package/ios/AMARNExceptionSerializer.h +6 -0
  15. package/ios/AMARNExceptionSerializer.m +65 -0
  16. package/ios/AMARNExternalAttribution.h +4 -0
  17. package/ios/AMARNExternalAttribution.m +28 -0
  18. package/ios/AMARNReporter.h +6 -0
  19. package/ios/AMARNReporter.m +131 -0
  20. package/lib/commonjs/deferredDeeplink.js +2 -0
  21. package/lib/commonjs/deferredDeeplink.js.map +1 -0
  22. package/lib/commonjs/error.js +71 -0
  23. package/lib/commonjs/error.js.map +1 -0
  24. package/lib/commonjs/externalAttribution.js +46 -0
  25. package/lib/commonjs/externalAttribution.js.map +1 -0
  26. package/lib/commonjs/index.js +68 -1
  27. package/lib/commonjs/index.js.map +1 -1
  28. package/lib/commonjs/reporter.js +69 -0
  29. package/lib/commonjs/reporter.js.map +1 -0
  30. package/lib/module/deferredDeeplink.js +2 -0
  31. package/lib/module/deferredDeeplink.js.map +1 -0
  32. package/lib/module/error.js +63 -0
  33. package/lib/module/error.js.map +1 -0
  34. package/lib/module/externalAttribution.js +39 -0
  35. package/lib/module/externalAttribution.js.map +1 -0
  36. package/lib/module/index.js +46 -1
  37. package/lib/module/index.js.map +1 -1
  38. package/lib/module/reporter.js +62 -0
  39. package/lib/module/reporter.js.map +1 -0
  40. package/lib/typescript/src/deferredDeeplink.d.ts +10 -0
  41. package/lib/typescript/src/deferredDeeplink.d.ts.map +1 -0
  42. package/lib/typescript/src/error.d.ts +19 -0
  43. package/lib/typescript/src/error.d.ts.map +1 -0
  44. package/lib/typescript/src/externalAttribution.d.ts +15 -0
  45. package/lib/typescript/src/externalAttribution.d.ts.map +1 -0
  46. package/lib/typescript/src/index.d.ts +22 -1
  47. package/lib/typescript/src/index.d.ts.map +1 -1
  48. package/lib/typescript/src/reporter.d.ts +51 -0
  49. package/lib/typescript/src/reporter.d.ts.map +1 -0
  50. package/package.json +3 -1
  51. package/src/deferredDeeplink.ts +11 -0
  52. package/src/error.ts +87 -0
  53. package/src/externalAttribution.ts +56 -0
  54. package/src/index.ts +87 -4
  55. package/src/reporter.ts +126 -0
@@ -3,7 +3,9 @@
3
3
  #import "AMARNAppMetricaUtils.h"
4
4
  #import "AMARNStartupParamsUtils.h"
5
5
  #import "AMARNUserProfileSerializer.h"
6
+ #import "AMARNExternalAttribution.h"
6
7
  #import <AppMetricaCrashes/AppMetricaCrashes.h>
8
+ #import "AMARNExceptionSerializer.h"
7
9
 
8
10
  @implementation AMARNAppMetrica
9
11
 
@@ -37,9 +39,13 @@ RCT_EXPORT_METHOD(reportAppOpen:(NSString *)deeplink)
37
39
  [AMAAppMetrica trackOpeningURL:[NSURL URLWithString:deeplink]];
38
40
  }
39
41
 
40
- RCT_EXPORT_METHOD(reportError:(NSString *)identifier:(NSString *)message) {
41
- AMAError *error = [AMAError errorWithIdentifier:identifier message:message parameters:NULL];
42
- [[AMAAppMetricaCrashes crashes] reportError:error onFailure:nil];
42
+ RCT_EXPORT_METHOD(reportError:(NSString *)identifier:(NSString *)message:(NSDictionary *)_reason) {
43
+ [[[AMAAppMetricaCrashes crashes] pluginExtension] reportErrorWithIdentifier:identifier
44
+ message:message
45
+ details:amarn_exceptionForDictionary(_reason)
46
+ onFailure:^(NSError *error) {
47
+ NSLog(@"Failed to report error to AppMetrica: %@", [error localizedDescription]);
48
+ }];
43
49
  }
44
50
 
45
51
  RCT_EXPORT_METHOD(reportEvent:(NSString *)eventName:(NSDictionary *)attributes)
@@ -92,7 +98,7 @@ RCT_EXPORT_METHOD(setDataSendingEnabled:(BOOL)enabled)
92
98
 
93
99
  RCT_EXPORT_METHOD(reportECommerce:(NSDictionary *)ecommerceDict)
94
100
  {
95
- [AMAAppMetrica reportECommerce:[AMARNAppMetricaUtils ecommerceForDict:ecommerceDict] onFailure:nil];
101
+ [AMAAppMetrica reportECommerce:[AMARNAppMetricaUtils ecommerceForDict:ecommerceDict] onFailure:nil];
96
102
  }
97
103
 
98
104
  RCT_EXPORT_METHOD(setUserProfileID:(NSString *)userProfileID)
@@ -120,6 +126,88 @@ RCT_EXPORT_METHOD(putErrorEnvironmentValue:(NSString *)key:(NSString *)value)
120
126
  [[AMAAppMetricaCrashes crashes] setErrorEnvironmentValue:value forKey:key];
121
127
  }
122
128
 
129
+ RCT_EXPORT_METHOD(reportExternalAttribution:(NSDictionary *)externalAttributionsDict)
130
+ {
131
+
132
+ NSString *sourceStr = externalAttributionsDict[@"source"];
133
+ AMAAttributionSource source = amarn_getExternalAttributionSource(sourceStr);
134
+ if (source == nil) {
135
+ NSLog(@"Failed to report external attribution to AppMetrica. Unknown source %@", sourceStr);
136
+ return;
137
+ }
138
+
139
+ NSDictionary *value = externalAttributionsDict[@"value"];
140
+
141
+ [AMAAppMetrica reportExternalAttribution:value source:source onFailure:^(NSError *error) {
142
+ NSLog(@"Failed to report external attribution to AppMetrica: %@", [error localizedDescription]);
143
+ }];
144
+ }
145
+
146
+ RCT_EXPORT_METHOD(reportErrorWithoutIdentifier:(NSString *)message:(NSDictionary *)error)
147
+ {
148
+ AMAPluginErrorDetails *details = amarn_exceptionForDictionary(error);
149
+ if (details.backtrace.count == 0) {
150
+ [[[AMAAppMetricaCrashes crashes] pluginExtension] reportErrorWithIdentifier:@"Errors without stacktrace"
151
+ message:message
152
+ details:details
153
+ onFailure:^(NSError *error) {
154
+ NSLog(@"Failed to report error to AppMetrica: %@", [error localizedDescription]);
155
+ }];
156
+ } else {
157
+ [[[AMAAppMetricaCrashes crashes] pluginExtension] reportError:details message:message onFailure:^(NSError *error) {
158
+ NSLog(@"Failed to report error to AppMetrica: %@", [error localizedDescription]);
159
+ }];
160
+ }
161
+ }
162
+
163
+ RCT_EXPORT_METHOD(reportUnhandledException:(NSDictionary *)error)
164
+ {
165
+ [[[AMAAppMetricaCrashes crashes] pluginExtension] reportUnhandledException:amarn_exceptionForDictionary(error)
166
+ onFailure:^(NSError *error) {
167
+ NSLog(@"Failed to report unhandled exception to AppMetrica: %@", [error localizedDescription]);
168
+ }];
169
+ }
170
+
171
+ RCT_EXPORT_METHOD(putAppEnvironmentValue:(NSString *)key:(NSString *)value)
172
+ {
173
+ [AMAAppMetrica setAppEnvironmentValue:value forKey:key];
174
+ }
175
+
176
+ RCT_EXPORT_METHOD(clearAppEnvironment)
177
+ {
178
+ [AMAAppMetrica clearAppEnvironment];
179
+ }
180
+
181
+ RCT_EXPORT_METHOD(activateReporter:(NSDictionary *)configDict)
182
+ {
183
+ [AMAAppMetrica activateReporterWithConfiguration:[AMARNAppMetricaUtils reporterConfigurationForDictionary:configDict]];
184
+ }
185
+
186
+ RCT_EXPORT_METHOD(touchReporter:(NSString *)apiKey)
187
+ {
188
+ [AMAAppMetrica reporterForAPIKey:apiKey];
189
+ }
190
+
191
+ RCT_EXPORT_METHOD(getDeviceId:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
192
+ {
193
+ resolve([AMAAppMetrica deviceID]);
194
+ }
195
+
196
+ RCT_EXPORT_METHOD(getUuid:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
197
+ {
198
+ resolve([AMAAppMetrica UUID]);
199
+ }
200
+
201
+ RCT_EXPORT_METHOD(requestDeferredDeeplink:(RCTResponseSenderBlock)onFailure:(RCTResponseSenderBlock)onSuccess)
202
+ {
203
+ // It does nothing for iOS
204
+ }
205
+
206
+ RCT_EXPORT_METHOD(requestDeferredDeeplinkParameters:(RCTResponseSenderBlock)onFailure:(RCTResponseSenderBlock)onSuccess)
207
+ {
208
+ // It does nothing for iOS
209
+ }
210
+
123
211
  - (NSObject *)wrap:(NSObject *)value
124
212
  {
125
213
  if (value == nil) {
@@ -22,5 +22,6 @@
22
22
  + (AMAAdType)toAdType:(NSString *)type;
23
23
  + (NSDictionary *)convertRevenueInfoPayload:(NSString *)payload;
24
24
  + (AMAUserProfile *)userProfileForDict:(NSDictionary *)userProfileDict;
25
+ + (AMAMutableReporterConfiguration *)reporterConfigurationForDictionary:(NSDictionary *)configDict;
25
26
 
26
27
  @end
@@ -43,6 +43,18 @@
43
43
  if (configDict[@"userProfileID"] != nil) {
44
44
  configuration.userProfileID = configDict[@"userProfileID"];
45
45
  }
46
+ if (configDict[@"appEnvironment"] != nil) {
47
+ NSDictionary *appEnvironmentMap = configDict[@"appEnvironment"];
48
+ for (NSString *key in appEnvironmentMap) {
49
+ [AMAAppMetrica setAppEnvironmentValue:appEnvironmentMap[key] forKey:key];
50
+ }
51
+ }
52
+ if (configDict[@"maxReportsCount"] != nil) {
53
+ configuration.maxReportsCount = [configDict[@"maxReportsCount"] unsignedIntegerValue];
54
+ }
55
+ if (configDict[@"dispatchPeriodSeconds"] != nil) {
56
+ configuration.dispatchPeriod = [configDict[@"dispatchPeriodSeconds"] unsignedIntegerValue];
57
+ }
46
58
 
47
59
  return configuration;
48
60
  }
@@ -379,4 +391,38 @@
379
391
  return amarn_deserializeUserProfile(userProfileDict);
380
392
  }
381
393
 
394
+ + (AMAMutableReporterConfiguration *)reporterConfigurationForDictionary:(NSDictionary *)configDict
395
+ {
396
+ NSString *apiKey = configDict[@"apiKey"];
397
+ AMAMutableReporterConfiguration *configuration = [[AMAMutableReporterConfiguration alloc] initWithAPIKey:apiKey];
398
+ if (configDict[@"logs"] != nil) {
399
+ configuration.logsEnabled = [configDict[@"logs"] boolValue];
400
+ }
401
+ if (configDict[@"maxReportsInDatabaseCount"] != nil) {
402
+ configuration.maxReportsInDatabaseCount = [configDict[@"maxReportsInDatabaseCount"] unsignedIntegerValue];
403
+ }
404
+ if (configDict[@"sessionTimeout"] != nil) {
405
+ configuration.sessionTimeout = [configDict[@"sessionTimeout"] unsignedIntegerValue];
406
+ }
407
+ if (configDict[@"dataSendingEnabled"] != nil) {
408
+ configuration.dataSendingEnabled = [configDict[@"dataSendingEnabled"] boolValue];
409
+ }
410
+ if (configDict[@"appEnvironment"] != nil) {
411
+ NSDictionary *appEnvironmentMap = configDict[@"appEnvironment"];
412
+ for (NSString *key in appEnvironmentMap) {
413
+ [AMAAppMetrica setAppEnvironmentValue:appEnvironmentMap[key] forKey:key];
414
+ }
415
+ }
416
+ if (configDict[@"userProfileID"] != nil) {
417
+ configuration.userProfileID = configDict[@"userProfileID"];
418
+ }
419
+ if (configDict[@"dispatchPeriodSeconds"] != nil) {
420
+ configuration.dispatchPeriod = [configDict[@"dispatchPeriodSeconds"] unsignedIntegerValue];
421
+ }
422
+ if (configDict[@"maxReportsCount"] != nil) {
423
+ configuration.maxReportsCount = [configDict[@"maxReportsCount"] unsignedIntegerValue];
424
+ }
425
+ return configuration;
426
+ }
427
+
382
428
  @end
@@ -0,0 +1,6 @@
1
+
2
+ #import <AppMetricaCrashes/AppMetricaCrashes.h>
3
+
4
+ @class AMARNExceptionSerializer;
5
+
6
+ AMAPluginErrorDetails *amarn_exceptionForDictionary(NSDictionary * configDict);
@@ -0,0 +1,65 @@
1
+
2
+ #import "AMARNExceptionSerializer.h"
3
+
4
+ NSNumber *amarn_parseNumber(NSString *string)
5
+ {
6
+ NSNumberFormatter *format = [[NSNumberFormatter alloc] init];
7
+ format.numberStyle = NSNumberFormatterDecimalStyle;
8
+ NSNumber *myNumber = [format numberFromString:string];
9
+ return myNumber;
10
+ }
11
+
12
+ AMAStackTraceElement *amarn_deserializeTraceItem(NSDictionary *traceDict)
13
+ {
14
+ AMAStackTraceElement *item = [[AMAStackTraceElement alloc] init];
15
+ if (traceDict[@"fileName"] != nil) {
16
+ item.fileName = traceDict[@"fileName"];
17
+ }
18
+ if (traceDict[@"className"] != nil) {
19
+ item.className = traceDict[@"className"];
20
+ }
21
+ if (traceDict[@"methodName"] != nil) {
22
+ item.methodName = traceDict[@"methodName"];
23
+ }
24
+ if (traceDict[@"line"] != nil) {
25
+ item.line = amarn_parseNumber(traceDict[@"line"]);
26
+ }
27
+ if (traceDict[@"column"] != nil) {
28
+ item.column = amarn_parseNumber(traceDict[@"column"]);
29
+ }
30
+ return item;
31
+ }
32
+
33
+ NSArray<AMAStackTraceElement *> *amarn_deserializeStackTrace(NSArray *frames)
34
+ {
35
+ NSMutableArray<AMAStackTraceElement *> *items = [[NSMutableArray alloc] init];
36
+ for (NSDictionary *frameDict in frames) {
37
+ [items addObject:amarn_deserializeTraceItem(frameDict)];
38
+ }
39
+ return items;
40
+ }
41
+
42
+ AMAPluginErrorDetails *amarn_exceptionForDictionary(NSDictionary *configDict)
43
+ {
44
+ if (configDict == nil) {
45
+ return nil;
46
+ }
47
+ AMAPluginErrorDetails *error = [[AMAPluginErrorDetails alloc] init];
48
+ error.platform = kAMAPlatformReactNative;
49
+ if (configDict[@"errorName"] != nil) {
50
+ error.exceptionClass = configDict[@"errorName"];
51
+ }
52
+ if (configDict[@"message"] != nil) {
53
+ error.message = configDict[@"message"];
54
+ }
55
+ if (configDict[@"stackTrace"] != nil) {
56
+ error.backtrace = amarn_deserializeStackTrace(configDict[@"stackTrace"]);
57
+ }
58
+ if (configDict[@"virtualMachineVersion"] != nil) {
59
+ error.virtualMachineVersion = configDict[@"virtualMachineVersion"];
60
+ }
61
+ if (configDict[@"pluginEnvironment"] != nil) {
62
+ error.pluginEnvironment = configDict[@"pluginEnvironment"];
63
+ }
64
+ return error;
65
+ }
@@ -0,0 +1,4 @@
1
+
2
+ #include "AppMetricaCore/AppMetricaCore.h"
3
+
4
+ AMAAttributionSource amarn_getExternalAttributionSource(NSString *source);
@@ -0,0 +1,28 @@
1
+
2
+ #include "AMARNExternalAttribution.h"
3
+
4
+ AMAAttributionSource amarn_getExternalAttributionSource(NSString *sourceStr)
5
+ {
6
+ if (sourceStr == nil) return nil;
7
+
8
+ if ([sourceStr isEqualToString:@"AppsFlyer"]) {
9
+ return kAMAAttributionSourceAppsflyer;
10
+ }
11
+ if ([sourceStr isEqualToString:@"Adjust"]) {
12
+ return kAMAAttributionSourceAdjust;
13
+ }
14
+ if ([sourceStr isEqualToString:@"Kochava"]) {
15
+ return kAMAAttributionSourceKochava;
16
+ }
17
+ if ([sourceStr isEqualToString:@"Tenjin"]) {
18
+ return kAMAAttributionSourceTenjin;
19
+ }
20
+ if ([sourceStr isEqualToString:@"Airbridge"]) {
21
+ return kAMAAttributionSourceAirbridge;
22
+ }
23
+ if ([sourceStr isEqualToString:@"Singular"]) {
24
+ return kAMAAttributionSourceSingular;
25
+ }
26
+
27
+ return nil;
28
+ }
@@ -0,0 +1,6 @@
1
+
2
+ #import <React/RCTBridgeModule.h>
3
+
4
+ @interface AMARNReporter : NSObject <RCTBridgeModule>
5
+
6
+ @end
@@ -0,0 +1,131 @@
1
+
2
+ #import "AMARNReporter.h"
3
+ #import "AMARNAppMetricaUtils.h"
4
+ #import <AppMetricaCore/AppMetricaCore.h>
5
+ #import <AppMetricaCrashes/AppMetricaCrashes.h>
6
+ #import "AMARNUserProfileSerializer.h"
7
+ #import "AMARNExceptionSerializer.h"
8
+
9
+ @implementation AMARNReporter
10
+
11
+ RCT_EXPORT_MODULE(AppMetricaReporter)
12
+
13
+ RCT_EXPORT_METHOD(reportError:(NSString *)apiKey:(NSString *)identifier:(NSString *)message:(NSDictionary *)_reason)
14
+ {
15
+ id<AMAAppMetricaCrashReporting> reporter = [[AMAAppMetricaCrashes crashes] reporterForAPIKey:apiKey];
16
+ [[reporter pluginExtension] reportErrorWithIdentifier:identifier
17
+ message:message
18
+ details:amarn_exceptionForDictionary(_reason)
19
+ onFailure:^(NSError *error) {
20
+ NSLog(@"Failed to report error to AppMetrica: %@", [error localizedDescription]);
21
+ }];
22
+ }
23
+
24
+ RCT_EXPORT_METHOD(reportErrorWithoutIdentifier:(NSString *)apiKey:(NSString *)message:(NSDictionary *)error)
25
+ {
26
+ id<AMAAppMetricaCrashReporting> reporter = [[AMAAppMetricaCrashes crashes] reporterForAPIKey:apiKey];
27
+ AMAPluginErrorDetails *details = amarn_exceptionForDictionary(error);
28
+ if (details.backtrace.count == 0) {
29
+ [[reporter pluginExtension] reportErrorWithIdentifier:@"Errors without stacktrace"
30
+ message:message
31
+ details:details
32
+ onFailure:^(NSError *error) {
33
+ NSLog(@"Failed to report error to AppMetrica: %@", [error localizedDescription]);
34
+ }];
35
+ } else {
36
+ [[reporter pluginExtension] reportError:details message:message onFailure:^(NSError *error) {
37
+ NSLog(@"Failed to report error to AppMetrica: %@", [error localizedDescription]);
38
+ }];
39
+ }
40
+ }
41
+
42
+ RCT_EXPORT_METHOD(reportUnhandledException:(NSString *)apiKey:(NSDictionary *)error)
43
+ {
44
+ id<AMAAppMetricaCrashReporting> reporter = [[AMAAppMetricaCrashes crashes] reporterForAPIKey:apiKey];
45
+ [[reporter pluginExtension] reportUnhandledException:amarn_exceptionForDictionary(error)
46
+ onFailure:^(NSError *error) {
47
+ NSLog(@"Failed to report unhandled exception to AppMetrica: %@", [error localizedDescription]);
48
+ }];
49
+ }
50
+
51
+ RCT_EXPORT_METHOD(reportEvent:(NSString *)apiKey:(NSString *)eventName:(NSDictionary *)attributes)
52
+ {
53
+ id<AMAAppMetricaReporting> reporter = [AMAAppMetrica reporterForAPIKey:apiKey];
54
+ if (attributes == nil) {
55
+ [reporter reportEvent:eventName onFailure:^(NSError *error) {
56
+ NSLog(@"error: %@", [error localizedDescription]);
57
+ }];
58
+ } else {
59
+ [reporter reportEvent:eventName parameters:attributes onFailure:^(NSError *error) {
60
+ NSLog(@"error: %@", [error localizedDescription]);
61
+ }];
62
+ }
63
+ }
64
+
65
+ RCT_EXPORT_METHOD(pauseSession:(NSString *)apiKey)
66
+ {
67
+ id<AMAAppMetricaReporting> reporter = [AMAAppMetrica reporterForAPIKey:apiKey];
68
+ [reporter pauseSession];
69
+ }
70
+
71
+ RCT_EXPORT_METHOD(resumeSession:(NSString *)apiKey)
72
+ {
73
+ id<AMAAppMetricaReporting> reporter = [AMAAppMetrica reporterForAPIKey:apiKey];
74
+ [reporter resumeSession];
75
+ }
76
+
77
+ RCT_EXPORT_METHOD(sendEventsBuffer:(NSString *)apiKey)
78
+ {
79
+ id<AMAAppMetricaReporting> reporter = [AMAAppMetrica reporterForAPIKey:apiKey];
80
+ [reporter sendEventsBuffer];
81
+ }
82
+
83
+ RCT_EXPORT_METHOD(putAppEnvironmentValue:(NSString *)apiKey:(NSString *)key:(NSString *)value)
84
+ {
85
+ id<AMAAppMetricaReporting> reporter = [AMAAppMetrica reporterForAPIKey:apiKey];
86
+ [reporter setAppEnvironmentValue:value forKey:key];
87
+ }
88
+
89
+ RCT_EXPORT_METHOD(clearAppEnvironment:(NSString *)apiKey)
90
+ {
91
+ id<AMAAppMetricaReporting> reporter = [AMAAppMetrica reporterForAPIKey:apiKey];
92
+ [reporter clearAppEnvironment];
93
+ }
94
+
95
+ RCT_EXPORT_METHOD(setUserProfileID:(NSString *)apiKey:(NSString *)userProfileID)
96
+ {
97
+ id<AMAAppMetricaReporting> reporter = [AMAAppMetrica reporterForAPIKey:apiKey];
98
+ [reporter setUserProfileID:userProfileID];
99
+ }
100
+
101
+ RCT_EXPORT_METHOD(setDataSendingEnabled:(NSString *)apiKey:(BOOL)enabled)
102
+ {
103
+ id<AMAAppMetricaReporting> reporter = [AMAAppMetrica reporterForAPIKey:apiKey];
104
+ [reporter setDataSendingEnabled:enabled];
105
+ }
106
+
107
+ RCT_EXPORT_METHOD(reportUserProfile:(NSString *)apiKey:(NSDictionary *)userProfileDict)
108
+ {
109
+ id<AMAAppMetricaReporting> reporter = [AMAAppMetrica reporterForAPIKey:apiKey];
110
+ [reporter reportUserProfile:[AMARNAppMetricaUtils userProfileForDict:userProfileDict] onFailure:nil];
111
+ }
112
+
113
+ RCT_EXPORT_METHOD(reportRevenue:(NSString *)apiKey:(NSDictionary *)revenueDict)
114
+ {
115
+ id<AMAAppMetricaReporting> reporter = [AMAAppMetrica reporterForAPIKey:apiKey];
116
+ [reporter reportRevenue:[AMARNAppMetricaUtils revenueForDict:revenueDict] onFailure:nil];
117
+ }
118
+
119
+ RCT_EXPORT_METHOD(reportAdRevenue:(NSString *)apiKey:(NSDictionary *)revenueDict)
120
+ {
121
+ id<AMAAppMetricaReporting> reporter = [AMAAppMetrica reporterForAPIKey:apiKey];
122
+ [reporter reportAdRevenue:[AMARNAppMetricaUtils adRevenueForDict:revenueDict] onFailure:nil];
123
+ }
124
+
125
+ RCT_EXPORT_METHOD(reportECommerce:(NSString *)apiKey:(NSDictionary *)ecommerceDict)
126
+ {
127
+ id<AMAAppMetricaReporting> reporter = [AMAAppMetrica reporterForAPIKey:apiKey];
128
+ [reporter reportECommerce:[AMARNAppMetricaUtils ecommerceForDict:ecommerceDict] onFailure:nil];
129
+ }
130
+
131
+ @end
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=deferredDeeplink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../src","sources":["deferredDeeplink.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.AppMetricaError = void 0;
7
+ var _reactNative = require("react-native");
8
+ var _react = _interopRequireDefault(require("react"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ const traceRegex = /^\s*at (.*?) ?\((.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i;
11
+ function parseTraceLine(line) {
12
+ const parts = traceRegex.exec(line);
13
+ if (parts === null) {
14
+ return undefined;
15
+ }
16
+ return {
17
+ fileName: parts[2],
18
+ methodName: parts[1],
19
+ column: parts[3],
20
+ line: parts[4]
21
+ };
22
+ }
23
+ function getRNVersion() {
24
+ const versions = _reactNative.Platform.constants.reactNativeVersion;
25
+ return versions.major + '.' + versions.minor + '.' + versions.patch;
26
+ }
27
+ function getReactVersion() {
28
+ return _react.default.version;
29
+ }
30
+ function getPluginEnvironment() {
31
+ return {
32
+ reactVersion: getReactVersion()
33
+ };
34
+ }
35
+ function parseStackTrace(stackTrace) {
36
+ if (stackTrace === undefined) {
37
+ return undefined;
38
+ }
39
+ try {
40
+ const lines = stackTrace.split('\n');
41
+ const array = [];
42
+ lines === null || lines === void 0 || lines.forEach(line => {
43
+ const item = parseTraceLine(line);
44
+ if (item !== undefined) {
45
+ array.push(item);
46
+ }
47
+ });
48
+ return array;
49
+ } catch (e) {
50
+ console.log(e);
51
+ return undefined;
52
+ }
53
+ }
54
+ class AppMetricaError {
55
+ constructor(errorName, message) {
56
+ this.errorName = errorName;
57
+ this.message = message;
58
+ this.pluginEnvironment = getPluginEnvironment();
59
+ this.virtualMachineVersion = getRNVersion();
60
+ }
61
+ static withError(error) {
62
+ const newError = new AppMetricaError(error.name, error.message);
63
+ newError.stackTrace = parseStackTrace(error.stack);
64
+ return newError;
65
+ }
66
+ static withObject(error) {
67
+ return new AppMetricaError(undefined, JSON.stringify(error));
68
+ }
69
+ }
70
+ exports.AppMetricaError = AppMetricaError;
71
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","_react","_interopRequireDefault","e","__esModule","default","traceRegex","parseTraceLine","line","parts","exec","undefined","fileName","methodName","column","getRNVersion","versions","Platform","constants","reactNativeVersion","major","minor","patch","getReactVersion","React","version","getPluginEnvironment","reactVersion","parseStackTrace","stackTrace","lines","split","array","forEach","item","push","console","log","AppMetricaError","constructor","errorName","message","pluginEnvironment","virtualMachineVersion","withError","error","newError","name","stack","withObject","JSON","stringify","exports"],"sourceRoot":"../../src","sources":["error.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAC,sBAAA,CAAAF,OAAA;AAA0B,SAAAE,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE1B,MAAMG,UAAU,GAAG,qDAAqD;AAExE,SAASC,cAAcA,CAACC,IAAY,EAA8B;EAChE,MAAMC,KAAK,GAAGH,UAAU,CAACI,IAAI,CAACF,IAAI,CAAC;EACnC,IAAIC,KAAK,KAAK,IAAI,EAAE;IAClB,OAAOE,SAAS;EAClB;EACA,OAAO;IACLC,QAAQ,EAAEH,KAAK,CAAC,CAAC,CAAC;IAClBI,UAAU,EAAEJ,KAAK,CAAC,CAAC,CAAC;IACpBK,MAAM,EAAEL,KAAK,CAAC,CAAC,CAAC;IAChBD,IAAI,EAAEC,KAAK,CAAC,CAAC;EACf,CAAC;AACH;AAEA,SAASM,YAAYA,CAAA,EAAW;EAC9B,MAAMC,QAAQ,GAAGC,qBAAQ,CAACC,SAAS,CAACC,kBAAkB;EACtD,OAAOH,QAAQ,CAACI,KAAK,GAAG,GAAG,GAAGJ,QAAQ,CAACK,KAAK,GAAG,GAAG,GAAGL,QAAQ,CAACM,KAAK;AACrE;AAEA,SAASC,eAAeA,CAAA,EAAW;EACjC,OAAOC,cAAK,CAACC,OAAO;AACtB;AAEA,SAASC,oBAAoBA,CAAA,EAAuC;EAClE,OAAO;IACLC,YAAY,EAAEJ,eAAe,CAAC;EAChC,CAAC;AACH;AAEA,SAASK,eAAeA,CACtBC,UAAmB,EACgB;EACnC,IAAIA,UAAU,KAAKlB,SAAS,EAAE;IAC5B,OAAOA,SAAS;EAClB;EACA,IAAI;IACF,MAAMmB,KAAK,GAAGD,UAAU,CAACE,KAAK,CAAC,IAAI,CAAC;IACpC,MAAMC,KAA4B,GAAG,EAAE;IACvCF,KAAK,aAALA,KAAK,eAALA,KAAK,CAAEG,OAAO,CAAEzB,IAAY,IAAK;MAC/B,MAAM0B,IAAI,GAAG3B,cAAc,CAACC,IAAI,CAAC;MACjC,IAAI0B,IAAI,KAAKvB,SAAS,EAAE;QACtBqB,KAAK,CAACG,IAAI,CAACD,IAAI,CAAC;MAClB;IACF,CAAC,CAAC;IACF,OAAOF,KAAK;EACd,CAAC,CAAC,OAAM7B,CAAC,EAAE;IACTiC,OAAO,CAACC,GAAG,CAAClC,CAAC,CAAC;IACd,OAAOQ,SAAS;EAClB;AACF;AAUO,MAAM2B,eAAe,CAAC;EAO3BC,WAAWA,CAACC,SAAkB,EAAEC,OAAgB,EAAE;IAChD,IAAI,CAACD,SAAS,GAAGA,SAAS;IAC1B,IAAI,CAACC,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,iBAAiB,GAAGhB,oBAAoB,CAAC,CAAC;IAC/C,IAAI,CAACiB,qBAAqB,GAAG5B,YAAY,CAAC,CAAC;EAC7C;EAEA,OAAO6B,SAASA,CAACC,KAAY,EAAmB;IAC9C,MAAMC,QAAQ,GAAG,IAAIR,eAAe,CAACO,KAAK,CAACE,IAAI,EAAEF,KAAK,CAACJ,OAAO,CAAC;IAC/DK,QAAQ,CAACjB,UAAU,GAAGD,eAAe,CAACiB,KAAK,CAACG,KAAK,CAAC;IAClD,OAAOF,QAAQ;EACjB;EAEA,OAAOG,UAAUA,CAACJ,KAAc,EAAmB;IACjD,OAAO,IAAIP,eAAe,CAAC3B,SAAS,EAAEuC,IAAI,CAACC,SAAS,CAACN,KAAK,CAAC,CAAC;EAC9D;AACF;AAACO,OAAA,CAAAd,eAAA,GAAAA,eAAA","ignoreList":[]}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ExternalAttributions = void 0;
7
+ class ExternalAttributions {
8
+ static adjust(data) {
9
+ return {
10
+ source: 'Adjust',
11
+ value: data
12
+ };
13
+ }
14
+ static airbridge(data) {
15
+ return {
16
+ source: 'Airbridge',
17
+ value: data
18
+ };
19
+ }
20
+ static appsflyer(data) {
21
+ return {
22
+ source: 'AppsFlyer',
23
+ value: data.data
24
+ };
25
+ }
26
+ static kochava(data) {
27
+ return {
28
+ source: 'Kochava',
29
+ value: data.raw
30
+ };
31
+ }
32
+ static singular(data) {
33
+ return {
34
+ source: 'Singular',
35
+ value: Object.fromEntries(data)
36
+ };
37
+ }
38
+ static tenjin(data) {
39
+ return {
40
+ source: 'Tenjin',
41
+ value: data
42
+ };
43
+ }
44
+ }
45
+ exports.ExternalAttributions = ExternalAttributions;
46
+ //# sourceMappingURL=externalAttribution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ExternalAttributions","adjust","data","source","value","airbridge","appsflyer","kochava","raw","singular","Object","fromEntries","tenjin","exports"],"sourceRoot":"../../src","sources":["externalAttribution.ts"],"mappings":";;;;;;AAaO,MAAMA,oBAAoB,CAAC;EAChC,OAAOC,MAAMA,CAACC,IAAyB,EAAuB;IAC5D,OAAO;MACLC,MAAM,EAAE,QAAQ;MAChBC,KAAK,EAAEF;IACT,CAAC;EACH;EAEA,OAAOG,SAASA,CAACH,IAAyB,EAAuB;IAC/D,OAAO;MACLC,MAAM,EAAE,WAAW;MACnBC,KAAK,EAAEF;IACT,CAAC;EACH;EAEA,OAAOI,SAASA,CAACJ,IAAyB,EAAuB;IAC/D,OAAO;MACLC,MAAM,EAAE,WAAW;MACnBC,KAAK,EAAEF,IAAI,CAACA;IACd,CAAC;EACH;EAEA,OAAOK,OAAOA,CAACL,IAAyB,EAAuB;IAC7D,OAAO;MACLC,MAAM,EAAE,SAAS;MACjBC,KAAK,EAAEF,IAAI,CAACM;IACd,CAAC;EACH;EAEA,OAAOC,QAAQA,CAACP,IAAyB,EAAuB;IAC9D,OAAO;MACLC,MAAM,EAAE,UAAU;MAClBC,KAAK,EAAEM,MAAM,CAACC,WAAW,CAACT,IAAI;IAChC,CAAC;EACH;EAEA,OAAOU,MAAMA,CAACV,IAAyB,EAAuB;IAC5D,OAAO;MACLC,MAAM,EAAE,QAAQ;MAChBC,KAAK,EAAEF;IACT,CAAC;EACH;AACF;AAACW,OAAA,CAAAb,oBAAA,GAAAA,oBAAA","ignoreList":[]}
@@ -11,6 +11,8 @@ var _exportNames = {
11
11
  exports.default = exports.UUID_KEY = exports.DEVICE_ID_KEY = exports.DEVICE_ID_HASH_KEY = void 0;
12
12
  var _reactNative = require("react-native");
13
13
  var _utils = require("./utils");
14
+ var _error = require("./error");
15
+ var _reporter = require("./reporter");
14
16
  var _ecommerce = require("./ecommerce");
15
17
  Object.keys(_ecommerce).forEach(function (key) {
16
18
  if (key === "default" || key === "__esModule") return;
@@ -47,6 +49,30 @@ Object.keys(_userProfile).forEach(function (key) {
47
49
  }
48
50
  });
49
51
  });
52
+ var _externalAttribution = require("./externalAttribution");
53
+ Object.keys(_externalAttribution).forEach(function (key) {
54
+ if (key === "default" || key === "__esModule") return;
55
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
56
+ if (key in exports && exports[key] === _externalAttribution[key]) return;
57
+ Object.defineProperty(exports, key, {
58
+ enumerable: true,
59
+ get: function () {
60
+ return _externalAttribution[key];
61
+ }
62
+ });
63
+ });
64
+ var _deferredDeeplink = require("./deferredDeeplink");
65
+ Object.keys(_deferredDeeplink).forEach(function (key) {
66
+ if (key === "default" || key === "__esModule") return;
67
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
68
+ if (key in exports && exports[key] === _deferredDeeplink[key]) return;
69
+ Object.defineProperty(exports, key, {
70
+ enumerable: true,
71
+ get: function () {
72
+ return _deferredDeeplink[key];
73
+ }
74
+ });
75
+ });
50
76
  const LINKING_ERROR = `The package '@appmetrica/react-native-analytics' doesn't seem to be linked. Make sure: \n\n` + _reactNative.Platform.select({
51
77
  ios: "- You have run 'pod install'\n",
52
78
  default: ''
@@ -74,6 +100,7 @@ const DEVICE_ID_HASH_KEY = exports.DEVICE_ID_HASH_KEY = 'appmetrica_device_id_ha
74
100
  const DEVICE_ID_KEY = exports.DEVICE_ID_KEY = 'appmetrica_device_id';
75
101
  const UUID_KEY = exports.UUID_KEY = 'appmetrica_uuid';
76
102
  class AppMetrica {
103
+ static reporters = new Map();
77
104
  static activate(config) {
78
105
  if (!activated) {
79
106
  AppMetricaNative.activate(config);
@@ -98,7 +125,13 @@ class AppMetrica {
98
125
  AppMetricaNative.reportAppOpen(deeplink);
99
126
  }
100
127
  static reportError(identifier, message, _reason) {
101
- AppMetricaNative.reportError(identifier, message);
128
+ AppMetricaNative.reportError(identifier, message, _reason instanceof Error ? _error.AppMetricaError.withError(_reason) : _error.AppMetricaError.withObject(_reason));
129
+ }
130
+ static reportUnhandledException(error) {
131
+ AppMetricaNative.reportUnhandledException(_error.AppMetricaError.withError(error));
132
+ }
133
+ static reportErrorWithoutIdentifier(message, error) {
134
+ AppMetricaNative.reportErrorWithoutIdentifier(message, _error.AppMetricaError.withError(error));
102
135
  }
103
136
  static reportEvent(eventName, attributes) {
104
137
  AppMetricaNative.reportEvent(eventName, attributes);
@@ -139,6 +172,40 @@ class AppMetrica {
139
172
  static putErrorEnvironmentValue(key, value) {
140
173
  AppMetricaNative.putErrorEnvironmentValue(key, value);
141
174
  }
175
+ static reportExternalAttribution(attribution) {
176
+ AppMetricaNative.reportExternalAttribution(attribution);
177
+ }
178
+ static putAppEnvironmentValue(key, value) {
179
+ AppMetricaNative.putAppEnvironmentValue(key, value);
180
+ }
181
+ static clearAppEnvironment() {
182
+ AppMetricaNative.clearAppEnvironment();
183
+ }
184
+ static getReporter(apiKey) {
185
+ if (AppMetrica.reporters.has(apiKey)) {
186
+ return AppMetrica.reporters.get(apiKey);
187
+ } else {
188
+ AppMetricaNative.touchReporter(apiKey);
189
+ const reporter = new _reporter.Reporter(apiKey);
190
+ AppMetrica.reporters.set(apiKey, reporter);
191
+ return reporter;
192
+ }
193
+ }
194
+ static activateReporter(config) {
195
+ AppMetricaNative.activateReporter(config);
196
+ }
197
+ static getDeviceId() {
198
+ return AppMetricaNative.getDeviceId();
199
+ }
200
+ static getUuid() {
201
+ return AppMetricaNative.getUuid();
202
+ }
203
+ static requestDeferredDeeplink(listener) {
204
+ AppMetricaNative.requestDeferredDeeplink(listener.onFailure, listener.onSuccess);
205
+ }
206
+ static requestDeferredDeeplinkParameters(listener) {
207
+ AppMetricaNative.requestDeferredDeeplinkParameters(listener.onFailure, listener.onSuccess);
208
+ }
142
209
  }
143
210
  exports.default = AppMetrica;
144
211
  //# sourceMappingURL=index.js.map