hypertrack-sdk-react-native 7.19.1 → 8.0.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.
- package/CHANGELOG.md +9 -0
- package/CONTRIBUTING.md +154 -0
- package/README.md +25 -16
- package/android/build.gradle +140 -41
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
- package/android/gradle.properties +6 -0
- package/android/gradlew +185 -0
- package/android/gradlew.bat +89 -0
- package/android/src/main/AndroidManifest.xml +2 -3
- package/android/src/main/java/com/reactnativehypertracksdk/HyperTrackModule.kt +284 -0
- package/android/src/main/java/com/reactnativehypertracksdk/HyperTrackSdkPackage.kt +17 -0
- package/hypertrack-sdk-react-native.podspec +34 -15
- package/ios/{RNHyperTrack/RNHyperTrack.h → HyperTrack.h} +1 -2
- package/ios/HyperTrack.m +384 -0
- package/ios/{RNHyperTrack.xcodeproj → HyperTrackSdk.xcodeproj}/project.pbxproj +70 -99
- package/lib/commonjs/HyperTrack/HyperTrack.js +244 -0
- package/lib/commonjs/HyperTrack/HyperTrack.js.map +1 -0
- package/lib/commonjs/index.js +52 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/module/HyperTrack/HyperTrack.js +230 -0
- package/lib/module/HyperTrack/HyperTrack.js.map +1 -0
- package/lib/module/index.js +5 -0
- package/lib/module/index.js.map +1 -0
- package/lib/typescript/HyperTrack/HyperTrack.d.ts +161 -0
- package/lib/typescript/index.d.ts +4 -0
- package/package.json +145 -47
- package/src/HyperTrack/HyperTrack.ts +273 -0
- package/src/index.tsx +11 -0
- package/android/src/main/java/com/hypertrack/reactnative/androidsdk/HTSDKModule.java +0 -301
- package/android/src/main/java/com/hypertrack/reactnative/androidsdk/HTSDKPackage.java +0 -29
- package/ios/RNHyperTrack/RNHyperTrack.m +0 -312
- package/ios/RNHyperTrack.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/ios/RNHyperTrack.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/ios/RNHyperTrack.xcodeproj/project.xcworkspace/xcuserdata/tulushev.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/RNHyperTrack.xcodeproj/xcuserdata/tulushev.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
- package/js/CriticalErrors.js +0 -97
- package/js/EventEmitter.js +0 -11
- package/js/HyperTrack.js +0 -130
- package/js/index.js +0 -13
package/ios/HyperTrack.m
ADDED
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
#import "HyperTrack.h"
|
|
2
|
+
#import <React/RCTLog.h>
|
|
3
|
+
#import <React/RCTEventDispatcher.h>
|
|
4
|
+
|
|
5
|
+
@interface HyperTrack ()
|
|
6
|
+
|
|
7
|
+
@property(nonatomic) HTSDK *hyperTrack;
|
|
8
|
+
|
|
9
|
+
@end
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@implementation HyperTrack
|
|
13
|
+
{
|
|
14
|
+
bool hasListeners;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* RN Critical error type.
|
|
18
|
+
*/
|
|
19
|
+
typedef NS_ENUM(NSUInteger, RNCriticalErrorType) {
|
|
20
|
+
permissionDenied = 3,
|
|
21
|
+
authorizationError = 2,
|
|
22
|
+
invalidPublishableKey = 1,
|
|
23
|
+
generalError = 0
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
RCT_EXPORT_MODULE();
|
|
27
|
+
|
|
28
|
+
- (dispatch_queue_t)methodQueue {
|
|
29
|
+
return dispatch_get_main_queue();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
- (NSArray<NSString *> *)supportedEvents {
|
|
33
|
+
return @[@"onTrackingErrorHyperTrack",
|
|
34
|
+
@"onTrackingStateChanged",
|
|
35
|
+
];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
- (void)startObserving {
|
|
39
|
+
hasListeners = YES;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
- (void)stopObserving {
|
|
43
|
+
hasListeners = NO;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
#pragma mark - HyperTrack SDK
|
|
47
|
+
|
|
48
|
+
RCT_EXPORT_METHOD(initialize:(NSString *)publishableKey startsTracking:(BOOL)startsTracking automaticallyRequestPermissions:(BOOL)automaticallyRequestPermissions :(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
|
|
49
|
+
RCTLogInfo(@"Initializing HyperTrack with publishableKey: %@", publishableKey);
|
|
50
|
+
__weak __typeof(self) weakSelf = self;
|
|
51
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
52
|
+
[weakSelf addObservers];
|
|
53
|
+
HTResult *result = [HTSDK makeSDKWithPublishableKey:publishableKey
|
|
54
|
+
automaticallyRequestPermissions:automaticallyRequestPermissions];
|
|
55
|
+
if (result.hyperTrack != nil) {
|
|
56
|
+
RCTLogInfo(@"Successfully set publishableKey and created SDK instance");
|
|
57
|
+
self.hyperTrack = result.hyperTrack;
|
|
58
|
+
if (startsTracking) {
|
|
59
|
+
[self.hyperTrack start];
|
|
60
|
+
}
|
|
61
|
+
resolve(nil);
|
|
62
|
+
} else {
|
|
63
|
+
switch ([result.error code]) {
|
|
64
|
+
|
|
65
|
+
case HTFatalErrorDevelopmentPublishableKeyIsEmpty:
|
|
66
|
+
{
|
|
67
|
+
NSError *error = [NSError errorWithDomain: result.error.domain
|
|
68
|
+
code: invalidPublishableKey
|
|
69
|
+
userInfo: result.error.userInfo];
|
|
70
|
+
reject([NSString stringWithFormat:@"%d", (int)error.code], error.localizedDescription, error);
|
|
71
|
+
}
|
|
72
|
+
break;
|
|
73
|
+
|
|
74
|
+
case HTFatalErrorDevelopmentMissingLocationUpdatesBackgroundModeCapability:
|
|
75
|
+
{
|
|
76
|
+
NSError *error = [NSError errorWithDomain: result.error.domain
|
|
77
|
+
code: generalError
|
|
78
|
+
userInfo: result.error.userInfo];
|
|
79
|
+
reject([NSString stringWithFormat:@"%d", (int)error.code], error.localizedDescription, error);
|
|
80
|
+
}
|
|
81
|
+
break;
|
|
82
|
+
|
|
83
|
+
case HTFatalErrorDevelopmentRunningOnSimulatorUnsupported:
|
|
84
|
+
{
|
|
85
|
+
NSError *error = [NSError errorWithDomain: result.error.domain
|
|
86
|
+
code: generalError
|
|
87
|
+
userInfo: result.error.userInfo];
|
|
88
|
+
reject([NSString stringWithFormat:@"%d", (int)error.code], error.localizedDescription, error);
|
|
89
|
+
}
|
|
90
|
+
break;
|
|
91
|
+
|
|
92
|
+
case HTFatalErrorProductionLocationServicesUnavalible:
|
|
93
|
+
{
|
|
94
|
+
NSError *error = [NSError errorWithDomain: result.error.domain
|
|
95
|
+
code: permissionDenied
|
|
96
|
+
userInfo: result.error.userInfo];
|
|
97
|
+
reject([NSString stringWithFormat:@"%d", (int)error.code], error.localizedDescription, error);
|
|
98
|
+
}
|
|
99
|
+
break;
|
|
100
|
+
|
|
101
|
+
case HTFatalErrorProductionMotionActivityServicesUnavalible:
|
|
102
|
+
{
|
|
103
|
+
NSError *error = [NSError errorWithDomain: result.error.domain
|
|
104
|
+
code: permissionDenied
|
|
105
|
+
userInfo: result.error.userInfo];
|
|
106
|
+
reject([NSString stringWithFormat:@"%d", (int)error.code], error.localizedDescription, error);
|
|
107
|
+
}
|
|
108
|
+
break;
|
|
109
|
+
|
|
110
|
+
case HTFatalErrorProductionMotionActivityPermissionsDenied:
|
|
111
|
+
{
|
|
112
|
+
NSError *error = [NSError errorWithDomain: result.error.domain
|
|
113
|
+
code: permissionDenied
|
|
114
|
+
userInfo: result.error.userInfo];
|
|
115
|
+
reject([NSString stringWithFormat:@"%d", (int)error.code], error.localizedDescription, error);
|
|
116
|
+
}
|
|
117
|
+
break;
|
|
118
|
+
|
|
119
|
+
default:
|
|
120
|
+
{
|
|
121
|
+
NSError *error = [NSError errorWithDomain: result.error.domain
|
|
122
|
+
code: generalError
|
|
123
|
+
userInfo: result.error.userInfo];
|
|
124
|
+
reject([NSString stringWithFormat:@"%d", (int)error.code], error.localizedDescription, error);
|
|
125
|
+
}
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
RCT_EXPORT_METHOD(isAvailable:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
|
|
133
|
+
if ( [self.hyperTrack availability] == HTAvailabilityAvailable) {
|
|
134
|
+
resolve(@YES);
|
|
135
|
+
} else {
|
|
136
|
+
resolve(@NO);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
RCT_EXPORT_METHOD(setAvailability:(BOOL)availability:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
|
|
141
|
+
[self.hyperTrack setAvailability: availability ? HTAvailabilityAvailable : HTAvailabilityUnavailable];
|
|
142
|
+
if ( [self.hyperTrack availability] == HTAvailabilityAvailable) {
|
|
143
|
+
resolve(@YES);
|
|
144
|
+
} else {
|
|
145
|
+
resolve(@NO);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
RCT_EXPORT_METHOD(startTracking) {
|
|
150
|
+
[self.hyperTrack start];
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
RCT_EXPORT_METHOD(stopTracking) {
|
|
154
|
+
[self.hyperTrack stop];
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
RCT_EXPORT_METHOD(syncDeviceSettings) {
|
|
158
|
+
[self.hyperTrack syncDeviceSettings];
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
RCT_EXPORT_METHOD(subscribeOnEvents) {
|
|
162
|
+
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
RCT_EXPORT_METHOD(enableDebugLogging:(BOOL)isEnabled) {
|
|
166
|
+
[HTSDK setIsLoggingEnabled:isEnabled];
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
RCT_EXPORT_METHOD(enableMockLocation:(BOOL)isAllowed) {
|
|
170
|
+
[self.hyperTrack setMockLocationsAllowed:isAllowed];
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
RCT_EXPORT_METHOD(isTracking:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
|
|
174
|
+
resolve([NSNumber numberWithBool:[self.hyperTrack isTracking]]);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
RCT_EXPORT_METHOD(getLocation:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
|
|
178
|
+
HTLocationResult *locationResult = self.hyperTrack.location;
|
|
179
|
+
|
|
180
|
+
switch (locationResult.error) {
|
|
181
|
+
case HTLocationErrorNoError:
|
|
182
|
+
resolve(@{ @"location": @{ @"latitude": [NSNumber numberWithDouble:locationResult.location.latitude], @"longitude": [NSNumber numberWithDouble:locationResult.location.longitude] } });
|
|
183
|
+
break;
|
|
184
|
+
case HTLocationErrorLocationPermissionsNotDetermined:
|
|
185
|
+
resolve(@{ @"error": @{ @"code": @"location_permissions_not_determined" } });
|
|
186
|
+
break;
|
|
187
|
+
case HTLocationErrorLocationPermissionsCantBeAskedInBackground:
|
|
188
|
+
resolve(@{ @"error": @{ @"code": @"location_permissions_cant_be_asked_in_background" } });
|
|
189
|
+
break;
|
|
190
|
+
case HTLocationErrorLocationPermissionsInsufficientForBackground:
|
|
191
|
+
resolve(@{ @"error": @{ @"code": @"location_permissions_insufficient_for_background" } });
|
|
192
|
+
break;
|
|
193
|
+
case HTLocationErrorLocationPermissionsRestricted:
|
|
194
|
+
resolve(@{ @"error": @{ @"code": @"location_permissions_restricted" } });
|
|
195
|
+
break;
|
|
196
|
+
case HTLocationErrorLocationPermissionsReducedAccuracy:
|
|
197
|
+
resolve(@{ @"error": @{ @"code": @"location_permissions_reduced_accuracy" } });
|
|
198
|
+
break;
|
|
199
|
+
case HTLocationErrorLocationPermissionsDenied:
|
|
200
|
+
resolve(@{ @"error": @{ @"code": @"location_permissions_denied" } });
|
|
201
|
+
break;
|
|
202
|
+
case HTLocationErrorLocationServicesDisabled:
|
|
203
|
+
resolve(@{ @"error": @{ @"code": @"location_services_disabled" } });
|
|
204
|
+
break;
|
|
205
|
+
case HTLocationErrorMotionActivityPermissionsNotDetermined:
|
|
206
|
+
resolve(@{ @"error": @{ @"code": @"motion_activity_permissions_not_determined" } });
|
|
207
|
+
break;
|
|
208
|
+
case HTLocationErrorMotionActivityPermissionsCantBeAskedInBackground:
|
|
209
|
+
resolve(@{ @"error": @{ @"code": @"motion_activity_permissions_cant_be_asked_in_background" } });
|
|
210
|
+
break;
|
|
211
|
+
case HTLocationErrorMotionActivityPermissionsDenied:
|
|
212
|
+
resolve(@{ @"error": @{ @"code": @"motion_activity_permissions_denied" } });
|
|
213
|
+
break;
|
|
214
|
+
case HTLocationErrorMotionActivityServicesDisabled:
|
|
215
|
+
resolve(@{ @"error": @{ @"code": @"motion_activity_services_disabled" } });
|
|
216
|
+
break;
|
|
217
|
+
case HTLocationErrorNotRunning:
|
|
218
|
+
resolve(@{ @"error": @{ @"code": @"not_running" } });
|
|
219
|
+
break;
|
|
220
|
+
case HTLocationErrorGpsSignalLost:
|
|
221
|
+
resolve(@{ @"error": @{ @"code": @"gps_signal_lost" } });
|
|
222
|
+
break;
|
|
223
|
+
case HTLocationErrorStarting:
|
|
224
|
+
resolve(@{ @"error": @{ @"code": @"starting" } });
|
|
225
|
+
break;
|
|
226
|
+
case HTLocationErrorLocationMocked:
|
|
227
|
+
resolve(@{ @"error": @{ @"code": @"location_mocked" } });
|
|
228
|
+
break;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
RCT_EXPORT_METHOD(getDeviceID:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
|
|
233
|
+
resolve(self.hyperTrack.deviceID);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
RCT_EXPORT_METHOD(setDeviceName:(NSString *)deviceName :(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
|
|
237
|
+
self.hyperTrack.deviceName = deviceName;
|
|
238
|
+
resolve(nil);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
RCT_EXPORT_METHOD(setMetadata:(NSDictionary<NSString*, id>*)metadata :(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
|
|
242
|
+
HTMetadata *hyperTrackMetadata = [[HTMetadata alloc] initWithDictionary:metadata];
|
|
243
|
+
if (metadata != nil) {
|
|
244
|
+
[self.hyperTrack setDeviceMetadata:hyperTrackMetadata];
|
|
245
|
+
resolve(nil);
|
|
246
|
+
} else {
|
|
247
|
+
NSError *error = [NSError errorWithDomain:@"HyperTrackMetadataError" code:-1 userInfo:@{ @"description": @"Metadata is not a valid JSON" }];
|
|
248
|
+
reject([NSString stringWithFormat:@"%d", (int)error.code], error.localizedDescription, error);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
RCT_EXPORT_METHOD(addGeotag:(NSDictionary<NSString*, id>*)metadata :(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
|
|
253
|
+
HTMetadata *hyperTrackMetadata = [[HTMetadata alloc] initWithDictionary:metadata];
|
|
254
|
+
if (metadata != nil) {
|
|
255
|
+
[self.hyperTrack addGeotag:hyperTrackMetadata];
|
|
256
|
+
HTLocationResult *locationResult = self.hyperTrack.location;
|
|
257
|
+
switch (locationResult.error) {
|
|
258
|
+
case HTLocationErrorNoError:
|
|
259
|
+
resolve(@{ @"location": @{ @"latitude": [NSNumber numberWithDouble:locationResult.location.latitude], @"longitude": [NSNumber numberWithDouble:locationResult.location.longitude] } });
|
|
260
|
+
break;
|
|
261
|
+
case HTLocationErrorLocationPermissionsNotDetermined:
|
|
262
|
+
resolve(@{ @"error": @{ @"code": @"location_permissions_not_determined" } });
|
|
263
|
+
break;
|
|
264
|
+
case HTLocationErrorLocationPermissionsCantBeAskedInBackground:
|
|
265
|
+
resolve(@{ @"error": @{ @"code": @"location_permissions_cant_be_asked_in_background" } });
|
|
266
|
+
break;
|
|
267
|
+
case HTLocationErrorLocationPermissionsInsufficientForBackground:
|
|
268
|
+
resolve(@{ @"error": @{ @"code": @"location_permissions_insufficient_for_background" } });
|
|
269
|
+
break;
|
|
270
|
+
case HTLocationErrorLocationPermissionsRestricted:
|
|
271
|
+
resolve(@{ @"error": @{ @"code": @"location_permissions_restricted" } });
|
|
272
|
+
break;
|
|
273
|
+
case HTLocationErrorLocationPermissionsReducedAccuracy:
|
|
274
|
+
resolve(@{ @"error": @{ @"code": @"location_permissions_reduced_accuracy" } });
|
|
275
|
+
break;
|
|
276
|
+
case HTLocationErrorLocationPermissionsDenied:
|
|
277
|
+
resolve(@{ @"error": @{ @"code": @"location_permissions_denied" } });
|
|
278
|
+
break;
|
|
279
|
+
case HTLocationErrorLocationServicesDisabled:
|
|
280
|
+
resolve(@{ @"error": @{ @"code": @"location_services_disabled" } });
|
|
281
|
+
break;
|
|
282
|
+
case HTLocationErrorMotionActivityPermissionsNotDetermined:
|
|
283
|
+
resolve(@{ @"error": @{ @"code": @"motion_activity_permissions_not_determined" } });
|
|
284
|
+
break;
|
|
285
|
+
case HTLocationErrorMotionActivityPermissionsCantBeAskedInBackground:
|
|
286
|
+
resolve(@{ @"error": @{ @"code": @"motion_activity_permissions_cant_be_asked_in_background" } });
|
|
287
|
+
break;
|
|
288
|
+
case HTLocationErrorMotionActivityPermissionsDenied:
|
|
289
|
+
resolve(@{ @"error": @{ @"code": @"motion_activity_permissions_denied" } });
|
|
290
|
+
break;
|
|
291
|
+
case HTLocationErrorMotionActivityServicesDisabled:
|
|
292
|
+
resolve(@{ @"error": @{ @"code": @"motion_activity_services_disabled" } });
|
|
293
|
+
break;
|
|
294
|
+
case HTLocationErrorNotRunning:
|
|
295
|
+
resolve(@{ @"error": @{ @"code": @"not_running" } });
|
|
296
|
+
break;
|
|
297
|
+
case HTLocationErrorGpsSignalLost:
|
|
298
|
+
resolve(@{ @"error": @{ @"code": @"gps_signal_lost" } });
|
|
299
|
+
break;
|
|
300
|
+
case HTLocationErrorStarting:
|
|
301
|
+
resolve(@{ @"error": @{ @"code": @"starting" } });
|
|
302
|
+
break;
|
|
303
|
+
case HTLocationErrorLocationMocked:
|
|
304
|
+
resolve(@{ @"error": @{ @"code": @"location_mocked" } });
|
|
305
|
+
break;
|
|
306
|
+
}
|
|
307
|
+
} else {
|
|
308
|
+
NSError *error = [NSError errorWithDomain:@"HyperTrackMetadataError" code:-1 userInfo:@{ @"description": @"Geotag is not a valid JSON" }];
|
|
309
|
+
reject([NSString stringWithFormat:@"%d", (int)error.code], error.localizedDescription, error);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
#pragma mark - NSNotificationCenter
|
|
315
|
+
|
|
316
|
+
- (void)addObservers {
|
|
317
|
+
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
|
318
|
+
[[NSNotificationCenter defaultCenter] addObserver:self
|
|
319
|
+
selector:@selector(sendTrackingStateToRNWith:)
|
|
320
|
+
name:HTSDK.startedTrackingNotification
|
|
321
|
+
object:nil];
|
|
322
|
+
[[NSNotificationCenter defaultCenter] addObserver:self
|
|
323
|
+
selector:@selector(sendTrackingStateToRNWith:)
|
|
324
|
+
name:HTSDK.stoppedTrackingNotification
|
|
325
|
+
object:nil];
|
|
326
|
+
[[NSNotificationCenter defaultCenter] addObserver:self
|
|
327
|
+
selector:@selector(sendCriticalErrorForNotification:)
|
|
328
|
+
name:HTSDK.didEncounterRestorableErrorNotification
|
|
329
|
+
object:nil];
|
|
330
|
+
[[NSNotificationCenter defaultCenter] addObserver:self
|
|
331
|
+
selector:@selector(sendCriticalErrorForNotification:)
|
|
332
|
+
name:HTSDK.didEncounterUnrestorableErrorNotification
|
|
333
|
+
object:nil];
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
- (void)sendTrackingStateToRNWith:(NSNotification*)notification {
|
|
337
|
+
NSString *eventName = @"";
|
|
338
|
+
if ([notification.name isEqualToString: @"HyperTrackStartedTracking"]) {
|
|
339
|
+
eventName = @"onTrackingStateChanged";
|
|
340
|
+
} else if ([notification.name isEqualToString: @"HyperTrackStoppedTracking"]) {
|
|
341
|
+
eventName = @"onTrackingStateChanged";
|
|
342
|
+
} else {
|
|
343
|
+
return;
|
|
344
|
+
}
|
|
345
|
+
if (hasListeners) {
|
|
346
|
+
[self sendEventWithName: eventName body: @([self.hyperTrack isTracking])];
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
- (void)sendCriticalErrorForNotification:(NSNotification *)notification {
|
|
351
|
+
[self sendError:[notification hyperTrackTrackingError]];
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
- (void)sendError:(NSError *)error {
|
|
355
|
+
if (error != nil && hasListeners) {
|
|
356
|
+
[self sendEventWithName: @"onTrackingErrorHyperTrack"
|
|
357
|
+
body: @{ @"code": [self convertErrorCodeToRN:[error code]], @"message": error.localizedDescription }];
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
- (NSNumber *)convertErrorCodeToRN:(NSInteger)errorCode {
|
|
362
|
+
switch (errorCode) {
|
|
363
|
+
case HTRestorableErrorLocationPermissionsDenied:
|
|
364
|
+
case HTRestorableErrorLocationServicesDisabled:
|
|
365
|
+
case HTRestorableErrorMotionActivityServicesDisabled:
|
|
366
|
+
case HTUnrestorableErrorMotionActivityPermissionsDenied:
|
|
367
|
+
case HTFatalErrorProductionMotionActivityPermissionsDenied:
|
|
368
|
+
return [NSNumber numberWithInteger:permissionDenied];
|
|
369
|
+
break;
|
|
370
|
+
case HTRestorableErrorTrialEnded:
|
|
371
|
+
case HTRestorableErrorPaymentDefault:
|
|
372
|
+
return [NSNumber numberWithInteger:authorizationError];
|
|
373
|
+
break;
|
|
374
|
+
case HTUnrestorableErrorInvalidPublishableKey:
|
|
375
|
+
case HTFatalErrorDevelopmentPublishableKeyIsEmpty:
|
|
376
|
+
return [NSNumber numberWithInteger:invalidPublishableKey];
|
|
377
|
+
break;
|
|
378
|
+
default:
|
|
379
|
+
return [NSNumber numberWithInteger:generalError];
|
|
380
|
+
break;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
@end
|