hypertrack-sdk-react-native 8.2.2 → 9.1.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 +29 -1
- package/CONTRIBUTING.md +30 -110
- package/LICENSE +2 -0
- package/README.md +20 -40
- package/android/build.gradle +112 -113
- package/android/gradle.properties +1 -1
- package/android/src/main/java/com/reactnativehypertracksdk/HyperTrackReactNativePlugin.kt +209 -0
- package/android/src/main/java/com/reactnativehypertracksdk/HyperTrackSdkPackage.kt +2 -4
- package/android/src/main/java/com/reactnativehypertracksdk/ReactNativeSerialization.kt +88 -0
- package/android/src/main/java/com/reactnativehypertracksdk/common/Geotag.kt +9 -0
- package/android/src/main/java/com/reactnativehypertracksdk/common/HyperTrackError.kt +28 -0
- package/android/src/main/java/com/reactnativehypertracksdk/common/HyperTrackSdkWrapper.kt +251 -0
- package/android/src/main/java/com/reactnativehypertracksdk/common/LocationError.kt +9 -0
- package/android/src/main/java/com/reactnativehypertracksdk/common/Result.kt +50 -0
- package/android/src/main/java/com/reactnativehypertracksdk/common/SdkInitParams.kt +44 -0
- package/android/src/main/java/com/reactnativehypertracksdk/common/SdkMethod.kt +21 -0
- package/android/src/main/java/com/reactnativehypertracksdk/common/Serialization.kt +203 -0
- package/hypertrack-sdk-react-native.podspec +1 -1
- package/ios/HyperTrackReactNativePlugin.m +54 -0
- package/ios/HyperTrackReactNativePlugin.swift +253 -0
- package/ios/HyperTrackSdk-Bridging-Header.h +2 -0
- package/ios/HyperTrackSdk.xcodeproj/project.pbxproj +8 -11
- package/ios/common/DictionaryDecoder.swift +28 -0
- package/ios/common/HyperTrackError.swift +20 -0
- package/ios/common/HyperTrackSDKWrapper.swift +120 -0
- package/ios/common/SDKInitParams.swift +13 -0
- package/ios/common/SDKMethod.swift +14 -0
- package/ios/common/Serialization.swift +268 -0
- package/lib/commonjs/HyperTrack/HyperTrack.js +142 -142
- package/lib/commonjs/HyperTrack/HyperTrack.js.map +1 -1
- package/lib/commonjs/HyperTrack/data_types/HyperTrackError.js +31 -0
- package/lib/commonjs/HyperTrack/data_types/HyperTrackError.js.map +1 -0
- package/lib/commonjs/HyperTrack/data_types/Location.js +2 -0
- package/lib/commonjs/HyperTrack/data_types/Location.js.map +1 -0
- package/lib/commonjs/HyperTrack/data_types/LocationError.js +6 -0
- package/lib/commonjs/HyperTrack/data_types/LocationError.js.map +1 -0
- package/lib/commonjs/HyperTrack/data_types/SdkInitParams.js +2 -0
- package/lib/commonjs/HyperTrack/data_types/SdkInitParams.js.map +1 -0
- package/lib/commonjs/HyperTrack/data_types/internal/DeviceId.js +2 -0
- package/lib/commonjs/HyperTrack/data_types/internal/DeviceId.js.map +1 -0
- package/lib/commonjs/HyperTrack/data_types/internal/DeviceName.js +2 -0
- package/lib/commonjs/HyperTrack/data_types/internal/DeviceName.js.map +1 -0
- package/lib/commonjs/HyperTrack/data_types/internal/Geotag.js +2 -0
- package/lib/commonjs/HyperTrack/data_types/internal/Geotag.js.map +1 -0
- package/lib/commonjs/HyperTrack/data_types/internal/HyperTrackErrorInternal.js +2 -0
- package/lib/commonjs/HyperTrack/data_types/internal/HyperTrackErrorInternal.js.map +1 -0
- package/lib/commonjs/HyperTrack/data_types/internal/IsAvailable.js +2 -0
- package/lib/commonjs/HyperTrack/data_types/internal/IsAvailable.js.map +1 -0
- package/lib/commonjs/HyperTrack/data_types/internal/IsTracking.js +2 -0
- package/lib/commonjs/HyperTrack/data_types/internal/IsTracking.js.map +1 -0
- package/lib/commonjs/HyperTrack/data_types/internal/LocationErrorInternal.js +6 -0
- package/lib/commonjs/HyperTrack/data_types/internal/LocationErrorInternal.js.map +1 -0
- package/lib/commonjs/HyperTrack/data_types/internal/LocationResponse.js +6 -0
- package/lib/commonjs/HyperTrack/data_types/internal/LocationResponse.js.map +1 -0
- package/lib/commonjs/index.js +28 -17
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/HyperTrack/HyperTrack.js +141 -134
- package/lib/module/HyperTrack/HyperTrack.js.map +1 -1
- package/lib/module/HyperTrack/data_types/HyperTrackError.js +24 -0
- package/lib/module/HyperTrack/data_types/HyperTrackError.js.map +1 -0
- package/lib/module/HyperTrack/data_types/Location.js +2 -0
- package/lib/module/HyperTrack/data_types/Location.js.map +1 -0
- package/lib/module/HyperTrack/data_types/LocationError.js +2 -0
- package/lib/module/HyperTrack/data_types/LocationError.js.map +1 -0
- package/lib/module/HyperTrack/data_types/SdkInitParams.js +2 -0
- package/lib/module/HyperTrack/data_types/SdkInitParams.js.map +1 -0
- package/lib/module/HyperTrack/data_types/internal/DeviceId.js +2 -0
- package/lib/module/HyperTrack/data_types/internal/DeviceId.js.map +1 -0
- package/lib/module/HyperTrack/data_types/internal/DeviceName.js +2 -0
- package/lib/module/HyperTrack/data_types/internal/DeviceName.js.map +1 -0
- package/lib/module/HyperTrack/data_types/internal/Geotag.js +2 -0
- package/lib/module/HyperTrack/data_types/internal/Geotag.js.map +1 -0
- package/lib/module/HyperTrack/data_types/internal/HyperTrackErrorInternal.js +2 -0
- package/lib/module/HyperTrack/data_types/internal/HyperTrackErrorInternal.js.map +1 -0
- package/lib/module/HyperTrack/data_types/internal/IsAvailable.js +2 -0
- package/lib/module/HyperTrack/data_types/internal/IsAvailable.js.map +1 -0
- package/lib/module/HyperTrack/data_types/internal/IsTracking.js +2 -0
- package/lib/module/HyperTrack/data_types/internal/IsTracking.js.map +1 -0
- package/lib/module/HyperTrack/data_types/internal/LocationErrorInternal.js +2 -0
- package/lib/module/HyperTrack/data_types/internal/LocationErrorInternal.js.map +1 -0
- package/lib/module/HyperTrack/data_types/internal/LocationResponse.js +2 -0
- package/lib/module/HyperTrack/data_types/internal/LocationResponse.js.map +1 -0
- package/lib/module/index.js +4 -1
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/HyperTrack/HyperTrack.d.ts +66 -100
- package/lib/typescript/HyperTrack/data_types/HyperTrackError.d.ts +20 -0
- package/lib/typescript/HyperTrack/data_types/Location.d.ts +7 -0
- package/lib/typescript/HyperTrack/data_types/LocationError.d.ts +8 -0
- package/lib/typescript/HyperTrack/data_types/SdkInitParams.d.ts +25 -0
- package/lib/typescript/HyperTrack/data_types/internal/DeviceId.d.ts +4 -0
- package/lib/typescript/HyperTrack/data_types/internal/DeviceName.d.ts +4 -0
- package/lib/typescript/HyperTrack/data_types/internal/Geotag.d.ts +3 -0
- package/lib/typescript/HyperTrack/data_types/internal/HyperTrackErrorInternal.d.ts +4 -0
- package/lib/typescript/HyperTrack/data_types/internal/IsAvailable.d.ts +4 -0
- package/lib/typescript/HyperTrack/data_types/internal/IsTracking.d.ts +4 -0
- package/lib/typescript/HyperTrack/data_types/internal/LocationErrorInternal.d.ts +12 -0
- package/lib/typescript/HyperTrack/data_types/internal/LocationResponse.d.ts +11 -0
- package/lib/typescript/index.d.ts +4 -1
- package/package.json +156 -156
- package/src/HyperTrack/HyperTrack.ts +164 -163
- package/src/HyperTrack/data_types/HyperTrackError.ts +22 -0
- package/src/HyperTrack/data_types/Location.ts +7 -0
- package/src/HyperTrack/data_types/LocationError.ts +11 -0
- package/src/HyperTrack/data_types/SdkInitParams.ts +28 -0
- package/src/HyperTrack/data_types/internal/DeviceId.ts +4 -0
- package/src/HyperTrack/data_types/internal/DeviceName.ts +4 -0
- package/src/HyperTrack/data_types/internal/Geotag.ts +3 -0
- package/src/HyperTrack/data_types/internal/HyperTrackErrorInternal.ts +4 -0
- package/src/HyperTrack/data_types/internal/IsAvailable.ts +4 -0
- package/src/HyperTrack/data_types/internal/IsTracking.ts +4 -0
- package/src/HyperTrack/data_types/internal/LocationErrorInternal.ts +14 -0
- package/src/HyperTrack/data_types/internal/LocationResponse.ts +14 -0
- package/src/index.tsx +4 -7
- package/android/src/main/java/com/reactnativehypertracksdk/HyperTrackModule.kt +0 -284
- package/ios/HyperTrack.h +0 -7
- package/ios/HyperTrack.m +0 -384
|
@@ -1,284 +0,0 @@
|
|
|
1
|
-
package com.hypertrack.reactnative.androidsdk
|
|
2
|
-
|
|
3
|
-
import android.location.Location
|
|
4
|
-
import android.util.Log
|
|
5
|
-
import com.facebook.react.bridge.*
|
|
6
|
-
import com.facebook.react.module.annotations.ReactModule
|
|
7
|
-
import com.facebook.react.modules.core.DeviceEventManagerModule.RCTDeviceEventEmitter
|
|
8
|
-
import com.hypertrack.sdk.*
|
|
9
|
-
import com.hypertrack.sdk.TrackingStateObserver.OnTrackingStateChangeListener
|
|
10
|
-
import java.util.*
|
|
11
|
-
|
|
12
|
-
@ReactModule(name = HTSDKModule.NAME)
|
|
13
|
-
class HTSDKModule(reactContext: ReactApplicationContext?) :
|
|
14
|
-
ReactContextBaseJavaModule(reactContext) {
|
|
15
|
-
var trackingStateChangeListener: OnTrackingStateChangeListener? = null
|
|
16
|
-
var sdkInstance: HyperTrack? = null
|
|
17
|
-
override fun getName(): String {
|
|
18
|
-
return NAME
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
@ReactMethod
|
|
22
|
-
fun addListener(type: String?) {
|
|
23
|
-
// Keep: Required for RN built in Event Emitter Calls.
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
@ReactMethod
|
|
27
|
-
fun removeListeners(type: Int?) {
|
|
28
|
-
// Keep: Required for RN built in Event Emitter Calls.
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
@ReactMethod
|
|
32
|
-
fun initialize(
|
|
33
|
-
publishableKey: String?,
|
|
34
|
-
startsTracking: Boolean,
|
|
35
|
-
automaticallyRequestPermissions: Boolean?,
|
|
36
|
-
promise: Promise
|
|
37
|
-
) {
|
|
38
|
-
try {
|
|
39
|
-
sdkInstance = HyperTrack.getInstance(
|
|
40
|
-
publishableKey!!
|
|
41
|
-
).backgroundTrackingRequirement(false)
|
|
42
|
-
subscribeToTracking()
|
|
43
|
-
if (startsTracking) {
|
|
44
|
-
sdkInstance!!.start()
|
|
45
|
-
}
|
|
46
|
-
promise.resolve(true)
|
|
47
|
-
} catch (exception: Exception) {
|
|
48
|
-
Log.e(TAG, "Hypertrack SDK initialization failed.", exception)
|
|
49
|
-
val error = String.format(Locale.ENGLISH, "%d", RN_ERROR_INVALID_PUBLISHABLE_KEY)
|
|
50
|
-
promise.reject(error, Exception("Hypertrack SDK initialization failed."))
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
fun subscribeToTracking() {
|
|
55
|
-
if (trackingStateChangeListener != null) {
|
|
56
|
-
sdkInstance!!.removeTrackingListener(trackingStateChangeListener)
|
|
57
|
-
trackingStateChangeListener = null
|
|
58
|
-
}
|
|
59
|
-
trackingStateChangeListener = object : OnTrackingStateChangeListener {
|
|
60
|
-
override fun onError(trackingError: TrackingError) {
|
|
61
|
-
|
|
62
|
-
val params = Arguments.createMap()
|
|
63
|
-
params.putInt("code", convertToRNErrorsCode(trackingError.code))
|
|
64
|
-
params.putString("message", trackingError.message)
|
|
65
|
-
reactApplicationContext
|
|
66
|
-
.getJSModule(RCTDeviceEventEmitter::class.java)
|
|
67
|
-
.emit("onTrackingErrorHyperTrack", params)
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
override fun onTrackingStart() {
|
|
71
|
-
reactApplicationContext
|
|
72
|
-
.getJSModule(RCTDeviceEventEmitter::class.java)
|
|
73
|
-
.emit("onTrackingStateChanged", sdkInstance!!.isTracking)
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
override fun onTrackingStop() {
|
|
77
|
-
reactApplicationContext
|
|
78
|
-
.getJSModule(RCTDeviceEventEmitter::class.java)
|
|
79
|
-
.emit("onTrackingStateChanged", sdkInstance!!.isTracking)
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
sdkInstance!!.addTrackingListener(trackingStateChangeListener)
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
@ReactMethod
|
|
86
|
-
fun getDeviceID(promise: Promise) {
|
|
87
|
-
promise.resolve(sdkInstance!!.deviceID)
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
@ReactMethod
|
|
91
|
-
fun isTracking(promise: Promise) {
|
|
92
|
-
promise.resolve(sdkInstance!!.isTracking)
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
@ReactMethod
|
|
96
|
-
fun startTracking() {
|
|
97
|
-
sdkInstance!!.start()
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
@ReactMethod
|
|
101
|
-
fun stopTracking() {
|
|
102
|
-
sdkInstance!!.stop()
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
@ReactMethod
|
|
106
|
-
fun syncDeviceSettings() {
|
|
107
|
-
sdkInstance!!.syncDeviceSettings()
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
@ReactMethod
|
|
111
|
-
fun addGeotag(rMap: ReadableMap, promise: Promise) {
|
|
112
|
-
try {
|
|
113
|
-
sdkInstance!!.addGeotag(rMap.toHashMap())
|
|
114
|
-
promise.resolve(locationResultToMap(sdkInstance!!.latestLocation))
|
|
115
|
-
} catch (e: Exception) {
|
|
116
|
-
val error = String.format(Locale.ENGLISH, "%d", RN_ERROR_GENERAL)
|
|
117
|
-
promise.reject(error, e)
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
@ReactMethod
|
|
122
|
-
fun isAvailable(promise: Promise) {
|
|
123
|
-
promise.resolve(sdkInstance!!.availability.equals(Availability.AVAILABLE))
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
@ReactMethod
|
|
128
|
-
fun setAvailability(availability: Boolean, promise: Promise) {
|
|
129
|
-
if (availability) {
|
|
130
|
-
sdkInstance!!.availability = Availability.AVAILABLE
|
|
131
|
-
} else {
|
|
132
|
-
sdkInstance!!.availability = Availability.UNAVAILABLE
|
|
133
|
-
}
|
|
134
|
-
promise.resolve(sdkInstance!!.availability.equals(Availability.AVAILABLE))
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
// @ReactMethod
|
|
138
|
-
// fun addGeotag(rMap: ReadableMap, expectedLocation: ReadableMap, promise: Promise) {
|
|
139
|
-
// try {
|
|
140
|
-
// val expected = expectedLocationFromMap(expectedLocation)
|
|
141
|
-
// val result = sdkInstance!!.addGeotag(rMap.toHashMap(), expected)
|
|
142
|
-
// if (result is GeotagResult.Success) {
|
|
143
|
-
// val deviceLocation = result.deviceLocation
|
|
144
|
-
// val map = Arguments.createMap()
|
|
145
|
-
// map.putDouble("latitude", deviceLocation.latitude)
|
|
146
|
-
// map.putDouble("longitude", deviceLocation.longitude)
|
|
147
|
-
// promise.resolve(map)
|
|
148
|
-
// } else {
|
|
149
|
-
// val error = String.format(Locale.ENGLISH, "%d", RN_ERROR_GENERAL)
|
|
150
|
-
// promise.reject(error)
|
|
151
|
-
// }
|
|
152
|
-
// } catch (e: Exception) {
|
|
153
|
-
// val error = String.format(Locale.ENGLISH, "%d", RN_ERROR_GENERAL)
|
|
154
|
-
// promise.reject(error, e)
|
|
155
|
-
// }
|
|
156
|
-
// }
|
|
157
|
-
|
|
158
|
-
private fun expectedLocationFromMap(expectedLocation: ReadableMap): Location? {
|
|
159
|
-
return if (!expectedLocation.hasKey(LATITUDE) || !expectedLocation.hasKey(LONGITUDE)) null else try {
|
|
160
|
-
val latitude = expectedLocation.getDouble(LATITUDE)
|
|
161
|
-
val longitude = expectedLocation.getDouble(LONGITUDE)
|
|
162
|
-
if (longitude > 180.0 || longitude < -180.0) return null
|
|
163
|
-
if (latitude > 90.0 || latitude < -90.0) return null
|
|
164
|
-
val expected = Location("any")
|
|
165
|
-
expected.latitude = latitude
|
|
166
|
-
expected.longitude = longitude
|
|
167
|
-
expected
|
|
168
|
-
} catch (ignored: Throwable) {
|
|
169
|
-
null
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
private fun fail(error: Int, promise: Promise) {
|
|
174
|
-
val map = Arguments.createMap()
|
|
175
|
-
map.putInt("code", error)
|
|
176
|
-
promise.resolve(map)
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
@ReactMethod
|
|
180
|
-
fun setDeviceName(name: String?, promise: Promise) {
|
|
181
|
-
try {
|
|
182
|
-
sdkInstance!!.setDeviceName(name)
|
|
183
|
-
promise.resolve(true)
|
|
184
|
-
} catch (e: Exception) {
|
|
185
|
-
val error = String.format(Locale.ENGLISH, "%d", RN_ERROR_GENERAL)
|
|
186
|
-
promise.reject(error, e)
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
@ReactMethod
|
|
191
|
-
fun setMetadata(rMap: ReadableMap, promise: Promise) {
|
|
192
|
-
try {
|
|
193
|
-
sdkInstance!!.setDeviceMetadata(rMap.toHashMap())
|
|
194
|
-
promise.resolve(true)
|
|
195
|
-
} catch (e: Exception) {
|
|
196
|
-
val error = String.format(Locale.ENGLISH, "%d", RN_ERROR_GENERAL)
|
|
197
|
-
promise.reject(error, e)
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
@ReactMethod
|
|
202
|
-
fun enableDebugLogging(enable: Boolean) {
|
|
203
|
-
if (enable) {
|
|
204
|
-
HyperTrack.enableDebugLogging()
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
@ReactMethod
|
|
209
|
-
fun enableMockLocation(enable: Boolean) {
|
|
210
|
-
if (enable) {
|
|
211
|
-
sdkInstance!!.allowMockLocations()
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
@ReactMethod
|
|
216
|
-
fun getLocation(promise: Promise) {
|
|
217
|
-
promise.resolve(locationResultToMap(sdkInstance!!.latestLocation))
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
@ReactMethod
|
|
221
|
-
fun getCurrentLocation(promise: Promise) {
|
|
222
|
-
sdkInstance!!.getCurrentLocation { result -> promise.resolve(locationResultToMap(result)) }
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
private fun locationResultToMap(result: Result<Location, OutageReason>): WritableMap {
|
|
226
|
-
val resultMap = Arguments.createMap()
|
|
227
|
-
if (result.isSuccess) {
|
|
228
|
-
val location = result.value
|
|
229
|
-
val locationMap = Arguments.createMap()
|
|
230
|
-
locationMap.putDouble(LATITUDE, location.latitude)
|
|
231
|
-
locationMap.putDouble(LONGITUDE, location.longitude)
|
|
232
|
-
resultMap.putMap(KEY_LOCATION, locationMap)
|
|
233
|
-
} else {
|
|
234
|
-
val outage = result.error
|
|
235
|
-
val errorMap = Arguments.createMap()
|
|
236
|
-
errorMap.putString(KEY_OUTAGE_CODE, getOutageName(outage))
|
|
237
|
-
resultMap.putMap(KEY_ERROR, errorMap)
|
|
238
|
-
}
|
|
239
|
-
return resultMap
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
private fun getOutageName(outageReason: OutageReason): String {
|
|
243
|
-
return when (outageReason) {
|
|
244
|
-
OutageReason.MISSING_LOCATION_PERMISSION -> OUTAGE_CODE_LOCATION_PERMISSIONS_DENIED
|
|
245
|
-
OutageReason.MISSING_ACTIVITY_PERMISSION -> OUTAGE_CODE_MOTION_ACTIVITY_PERMISSIONS_DENIED
|
|
246
|
-
OutageReason.LOCATION_SERVICE_DISABLED -> OUTAGE_CODE_LOCATION_SERVICES_DISABLED
|
|
247
|
-
OutageReason.NOT_TRACKING -> OUTAGE_CODE_NOT_RUNNING
|
|
248
|
-
OutageReason.START_HAS_NOT_FINISHED -> OUTAGE_CODE_STARTING
|
|
249
|
-
OutageReason.NO_GPS_SIGNAL, OutageReason.RESTART_REQUIRED -> OUTAGE_CODE_GPS_SIGNAL_LOST
|
|
250
|
-
else -> OUTAGE_CODE_GPS_SIGNAL_LOST
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
private fun convertToRNErrorsCode(androidSdkCode: Int): Int {
|
|
255
|
-
return when (androidSdkCode) {
|
|
256
|
-
TrackingError.INVALID_PUBLISHABLE_KEY_ERROR -> RN_ERROR_INVALID_PUBLISHABLE_KEY
|
|
257
|
-
TrackingError.AUTHORIZATION_ERROR -> RN_ERROR_AUTHORIZATION_FAILED
|
|
258
|
-
TrackingError.PERMISSION_DENIED_ERROR -> RN_ERROR_PERMISSION_DENIED
|
|
259
|
-
else -> RN_ERROR_GENERAL
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
companion object {
|
|
264
|
-
private const val TAG = "HTSDKModule"
|
|
265
|
-
private const val KEY_LOCATION = "location"
|
|
266
|
-
private const val KEY_ERROR = "error"
|
|
267
|
-
private const val KEY_OUTAGE_CODE = "code"
|
|
268
|
-
const val NAME = "HyperTrack"
|
|
269
|
-
const val LATITUDE = "latitude"
|
|
270
|
-
const val LONGITUDE = "longitude"
|
|
271
|
-
const val ACCURACY = "accuracy"
|
|
272
|
-
private const val OUTAGE_CODE_LOCATION_PERMISSIONS_DENIED = "location_permissions_denied"
|
|
273
|
-
private const val OUTAGE_CODE_LOCATION_SERVICES_DISABLED = "location_services_disabled"
|
|
274
|
-
private const val OUTAGE_CODE_MOTION_ACTIVITY_PERMISSIONS_DENIED =
|
|
275
|
-
"motion_activity_permissions_denied"
|
|
276
|
-
private const val OUTAGE_CODE_NOT_RUNNING = "not_running"
|
|
277
|
-
private const val OUTAGE_CODE_GPS_SIGNAL_LOST = "gps_signal_lost"
|
|
278
|
-
private const val OUTAGE_CODE_STARTING = "starting"
|
|
279
|
-
private const val RN_ERROR_GENERAL = 0
|
|
280
|
-
private const val RN_ERROR_INVALID_PUBLISHABLE_KEY = 1
|
|
281
|
-
private const val RN_ERROR_AUTHORIZATION_FAILED = 2
|
|
282
|
-
private const val RN_ERROR_PERMISSION_DENIED = 3
|
|
283
|
-
}
|
|
284
|
-
}
|
package/ios/HyperTrack.h
DELETED
package/ios/HyperTrack.m
DELETED
|
@@ -1,384 +0,0 @@
|
|
|
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
|