react-native-radar 3.13.0-beta.1 → 3.14.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/README.md CHANGED
@@ -16,6 +16,8 @@ Then, see the Radar React Native module documentation [here](https://radar.com/d
16
16
 
17
17
  See an example app in `example/`.
18
18
 
19
+ Setup Radar public key check pre-commit hook with `cp -r hooks .git` to prevent accidental key leak when working with the Example app.
20
+
19
21
  ## Support
20
22
 
21
23
  Have questions? We're here to help! Email us at [support@radar.com](mailto:support@radar.com).
@@ -18,7 +18,7 @@ android {
18
18
  minSdkVersion 16
19
19
  targetSdkVersion 31
20
20
  versionCode 1
21
- versionName '3.13.0-beta.1'
21
+ versionName '3.14.0'
22
22
  }
23
23
  lintOptions {
24
24
  abortOnError false
@@ -45,6 +45,6 @@ repositories {
45
45
 
46
46
  dependencies {
47
47
  api 'com.facebook.react:react-native:+'
48
- api 'io.radar:sdk:3.13.1-beta.2'
48
+ api 'io.radar:sdk:3.15.0'
49
49
  }
50
50
 
@@ -32,7 +32,6 @@ import io.radar.sdk.model.RadarAddress;
32
32
  import io.radar.sdk.model.RadarContext;
33
33
  import io.radar.sdk.model.RadarEvent;
34
34
  import io.radar.sdk.model.RadarGeofence;
35
- import io.radar.sdk.model.RadarLocationPermissionStatus;
36
35
  import io.radar.sdk.model.RadarPlace;
37
36
  import io.radar.sdk.model.RadarRouteMatrix;
38
37
  import io.radar.sdk.model.RadarRoutes;
@@ -64,10 +63,6 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
64
63
  verifiedReceiver = new RNRadarVerifiedReceiver();
65
64
  }
66
65
 
67
- public static void onActivityCreate(Activity activity, Context context) {
68
- Radar.onActivityCreate(activity, context);
69
- }
70
-
71
66
  @ReactMethod
72
67
  public void addListener(String eventName) {
73
68
  if (listenerCount == 0) {
@@ -101,7 +96,7 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
101
96
  this.fraud = fraud;
102
97
  SharedPreferences.Editor editor = getReactApplicationContext().getSharedPreferences("RadarSDK", Context.MODE_PRIVATE).edit();
103
98
  editor.putString("x_platform_sdk_type", "ReactNative");
104
- editor.putString("x_platform_sdk_version", "3.13.0-beta.1");
99
+ editor.putString("x_platform_sdk_version", "3.14.0");
105
100
  editor.apply();
106
101
  if (fraud) {
107
102
  Radar.initialize(getReactApplicationContext(), publishableKey, receiver, Radar.RadarLocationServicesProvider.GOOGLE, fraud);
@@ -223,7 +218,8 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
223
218
  return;
224
219
  }
225
220
 
226
- boolean foreground = ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
221
+ boolean foreground = ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED ||
222
+ ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED;
227
223
  boolean background = foreground;
228
224
  boolean denied = ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.ACCESS_FINE_LOCATION);
229
225
 
@@ -251,6 +247,22 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
251
247
  return true;
252
248
  }
253
249
 
250
+
251
+ @ReactMethod
252
+ public void requestPermissions(boolean background, final Promise promise) {
253
+ PermissionAwareActivity activity = (PermissionAwareActivity)getCurrentActivity();
254
+ mPermissionsRequestPromise = promise;
255
+ if (activity != null) {
256
+ if (Build.VERSION.SDK_INT >= 23) {
257
+ if (background && Build.VERSION.SDK_INT >= 29) {
258
+ activity.requestPermissions(new String[] { Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_BACKGROUND_LOCATION }, PERMISSIONS_REQUEST_CODE, this);
259
+ } else {
260
+ activity.requestPermissions(new String[] { Manifest.permission.ACCESS_FINE_LOCATION }, PERMISSIONS_REQUEST_CODE, this);
261
+ }
262
+ }
263
+ }
264
+ }
265
+
254
266
  @ReactMethod
255
267
  public void getLocation(String desiredAccuracy, final Promise promise) {
256
268
 
@@ -387,7 +399,12 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
387
399
 
388
400
  try {
389
401
  if (status == Radar.RadarStatus.SUCCESS) {
390
- promise.resolve(token != null ? RNRadarUtils.mapForJson(token.toJson()) : null);
402
+ WritableMap map = Arguments.createMap();
403
+ map.putString("status", status.toString());
404
+ if (token != null) {
405
+ map.putMap("token", RNRadarUtils.mapForJson(token.toJson()));
406
+ }
407
+ promise.resolve(map);
391
408
  } else {
392
409
  promise.reject(status.toString(), status.toString());
393
410
  }
@@ -412,7 +429,12 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
412
429
 
413
430
  try {
414
431
  if (status == Radar.RadarStatus.SUCCESS) {
415
- promise.resolve(token != null ? RNRadarUtils.mapForJson(token.toJson()) : null);
432
+ WritableMap map = Arguments.createMap();
433
+ map.putString("status", status.toString());
434
+ if (token != null) {
435
+ map.putMap("token", RNRadarUtils.mapForJson(token.toJson()));
436
+ }
437
+ promise.resolve(map);
416
438
  } else {
417
439
  promise.reject(status.toString(), status.toString());
418
440
  }
@@ -455,7 +477,7 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
455
477
  @ReactMethod
456
478
  public void startTrackingVerified(ReadableMap optionsMap) {
457
479
  boolean beacons = false;
458
- int interval = 1;
480
+ int interval = 1200;
459
481
 
460
482
  if (optionsMap != null) {
461
483
  beacons = optionsMap.hasKey("beacons") ? optionsMap.getBoolean("beacons") : beacons;
@@ -504,6 +526,11 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
504
526
  Radar.stopTracking();
505
527
  }
506
528
 
529
+ @ReactMethod
530
+ public void stopTrackingVerified() {
531
+ Radar.stopTrackingVerified();
532
+ }
533
+
507
534
  @ReactMethod
508
535
  public void isTracking(final Promise promise) {
509
536
  if (promise == null) {
@@ -1283,33 +1310,4 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
1283
1310
  Radar.logConversion(name, metadataObj, callback);
1284
1311
  }
1285
1312
  }
1286
-
1287
- @ReactMethod
1288
- public void requestForegroundLocationPermission() {
1289
- Radar.requestForegroundLocationPermission();
1290
- }
1291
-
1292
- @ReactMethod
1293
- public void requestBackgroundLocationPermission() {
1294
- Radar.requestBackgroundLocationPermission();
1295
- }
1296
-
1297
- @ReactMethod
1298
- public void getLocationPermissionStatus(final Promise promise) {
1299
- if (promise == null) {
1300
- return;
1301
- }
1302
- try {
1303
- RadarLocationPermissionStatus options = Radar.getLocationPermissionStatus();
1304
- promise.resolve(RNRadarUtils.mapForJson(options.toJson()));
1305
- } catch(JSONException e) {
1306
- Log.e(TAG, "JSONException", e);
1307
- promise.reject(Radar.RadarStatus.ERROR_SERVER.toString(), Radar.RadarStatus.ERROR_SERVER.toString());
1308
- }
1309
- }
1310
-
1311
- @ReactMethod
1312
- public void openAppSettings() {
1313
- Radar.openAppSettings();
1314
- }
1315
1313
  }
@@ -20,7 +20,6 @@ import io.radar.sdk.Radar;
20
20
  import io.radar.sdk.RadarReceiver;
21
21
  import io.radar.sdk.model.RadarEvent;
22
22
  import io.radar.sdk.model.RadarUser;
23
- import io.radar.sdk.model.RadarLocationPermissionStatus;
24
23
  import java.util.concurrent.atomic.AtomicInteger;
25
24
 
26
25
  public class RNRadarReceiver extends RadarReceiver {
@@ -112,16 +111,4 @@ public class RNRadarReceiver extends RadarReceiver {
112
111
  }
113
112
  }
114
113
 
115
- @Override
116
- public void onLocationPermissionStatusUpdated(@NonNull Context context, @NonNull RadarLocationPermissionStatus status) {
117
- try {
118
- ReactApplication reactApplication = ((ReactApplication)context.getApplicationContext());
119
- reactNativeHost = reactApplication.getReactNativeHost();
120
-
121
- sendEvent("locationPermissionStatus", RNRadarUtils.mapForJson(status.toJson()));
122
- } catch (Exception e) {
123
- Log.e(TAG, "Exception", e);
124
- }
125
- }
126
-
127
114
  }
package/dist/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "React Native module for Radar, the leading geofencing and location tracking platform",
4
4
  "homepage": "https://radar.com",
5
5
  "license": "Apache-2.0",
6
- "version": "3.13.0-beta.1",
6
+ "version": "3.14.0",
7
7
  "main": "dist/src/index.js",
8
8
  "files": [
9
9
  "android",
@@ -1,4 +1,4 @@
1
- import { Location, RadarAutocompleteOptions, RadarContextCallback, RadarAddressCallback, RadarEventChannel, RadarGeocodeOptions, RadarGetDistanceOptions, RadarLocationCallback, RadarLogConversionCallback, RadarLogConversionOptions, RadarLogLevel, RadarMockTrackingOptions, RadarNotificationOptions, RadarPermissionsStatus, RadarReverseGeocodeOptions, RadarRouteCallback, RadarRouteMatrix, RadarSearchGeofencesCallback, RadarSearchGeofencesOptions, RadarSearchPlacesCallback, RadarSearchPlacesOptions, RadarStartTripOptions, RadarTrackCallback, RadarTrackOnceOptions, RadarTrackVerifiedCallback, RadarTrackingOptions, RadarTrackingOptionsDesiredAccuracy, RadarTrackingOptionsForegroundService, RadarTrackVerifiedOptions, RadarTripCallback, RadarTripOptions, RadarUpdateTripOptions, RadarVerifiedTrackingOptions, RadarListenerCallback, RadarGetMatrixOptions, RadarMetadata, RadarIPGeocodeCallback, RadarLocationPermissionStatus } from "./types";
1
+ import { Location, RadarAutocompleteOptions, RadarContextCallback, RadarAddressCallback, RadarEventChannel, RadarGeocodeOptions, RadarGetDistanceOptions, RadarLocationCallback, RadarLogConversionCallback, RadarLogConversionOptions, RadarLogLevel, RadarMockTrackingOptions, RadarNotificationOptions, RadarPermissionsStatus, RadarReverseGeocodeOptions, RadarRouteCallback, RadarRouteMatrix, RadarSearchGeofencesCallback, RadarSearchGeofencesOptions, RadarSearchPlacesCallback, RadarSearchPlacesOptions, RadarStartTripOptions, RadarTrackCallback, RadarTrackOnceOptions, RadarTrackVerifiedCallback, RadarTrackingOptions, RadarTrackingOptionsDesiredAccuracy, RadarTrackingOptionsForegroundService, RadarTrackVerifiedOptions, RadarTripCallback, RadarTripOptions, RadarUpdateTripOptions, RadarVerifiedTrackingOptions, RadarListenerCallback, RadarGetMatrixOptions, RadarMetadata, RadarIPGeocodeCallback } from "./types";
2
2
  export interface RadarNativeInterface {
3
3
  initialize: (publishableKey: string, fraud?: boolean) => void;
4
4
  setLogLevel: (level: RadarLogLevel) => void;
@@ -10,10 +10,7 @@ export interface RadarNativeInterface {
10
10
  getMetadata: () => Promise<RadarMetadata>;
11
11
  setAnonymousTrackingEnabled: (enabled: boolean) => void;
12
12
  getPermissionsStatus: () => Promise<RadarPermissionsStatus>;
13
- requestForegroundLocationPermission: () => void;
14
- requestBackgroundLocationPermission: () => void;
15
- getLocationPermissionStatus: () => Promise<RadarLocationPermissionStatus>;
16
- openAppSettings: () => void;
13
+ requestPermissions: (background: boolean) => Promise<RadarPermissionsStatus>;
17
14
  getLocation: (desiredAccuracy?: RadarTrackingOptionsDesiredAccuracy) => Promise<RadarLocationCallback>;
18
15
  trackOnce: (options?: RadarTrackOnceOptions | Location) => Promise<RadarTrackCallback>;
19
16
  trackVerified: (options?: RadarTrackVerifiedOptions) => Promise<RadarTrackVerifiedCallback>;
@@ -25,9 +22,10 @@ export interface RadarNativeInterface {
25
22
  startTrackingVerified: (options?: RadarVerifiedTrackingOptions) => void;
26
23
  mockTracking: (options: RadarMockTrackingOptions) => void;
27
24
  stopTracking: () => void;
25
+ stopTrackingVerified: () => void;
28
26
  getTrackingOptions: () => Promise<RadarTrackingOptions>;
29
27
  isUsingRemoteTrackingOptions: () => Promise<boolean>;
30
- isTracking: () => boolean;
28
+ isTracking: () => Promise<boolean>;
31
29
  setForegroundServiceOptions: (options: RadarTrackingOptionsForegroundService) => void;
32
30
  setNotificationOptions: (options: RadarNotificationOptions) => void;
33
31
  getTripOptions: () => Promise<RadarTripOptions>;
@@ -243,13 +243,10 @@ export interface RadarErrorCallback {
243
243
  export interface RadarLogUpdateCallback {
244
244
  (status: string): void;
245
245
  }
246
- export interface RadarLocationPermissionStatusCallback {
247
- (status: RadarLocationPermissionStatus): void;
248
- }
249
- export type RadarListenerCallback = RadarEventUpdateCallback | RadarLocationUpdateCallback | RadarClientLocationUpdateCallback | RadarErrorCallback | RadarLogUpdateCallback | RadarLocationPermissionStatusCallback;
246
+ export type RadarListenerCallback = RadarEventUpdateCallback | RadarLocationUpdateCallback | RadarClientLocationUpdateCallback | RadarErrorCallback | RadarLogUpdateCallback;
250
247
  export type RadarPermissionsStatus = "GRANTED_FOREGROUND" | "GRANTED_BACKGROUND" | "DENIED" | "NOT_DETERMINED" | "UNKNOWN";
251
248
  export type RadarLocationSource = "FOREGROUND_LOCATION" | "BACKGROUND_LOCATION" | "MANUAL_LOCATION" | "VISIT_ARRIVAL" | "VISIT_DEPARTURE" | "GEOFENCE_ENTER" | "GEOFENCE_DWELL" | "GEOFENCE_EXIT" | "MOCK_LOCATION" | "BEACON_ENTER" | "BEACON_EXIT" | "UNKNOWN";
252
- export type RadarEventChannel = "clientLocation" | "location" | "error" | "events" | "log" | "token" | "locationPermissionStatus";
249
+ export type RadarEventChannel = "clientLocation" | "location" | "error" | "events" | "log" | "token";
253
250
  export type RadarLogLevel = "info" | "debug" | "warning" | "error" | "none";
254
251
  export interface RadarRouteMatrix {
255
252
  status: string;
@@ -474,6 +471,8 @@ export interface RadarFraud {
474
471
  compromised: boolean;
475
472
  jumped: boolean;
476
473
  inaccurate: boolean;
474
+ blocked: boolean;
475
+ sharing: boolean;
477
476
  }
478
477
  export type RadarTrackingOptionsReplay = "all" | "stops" | "none";
479
478
  export type RadarTrackingOptionsSync = "none" | "stopsAndExits" | "all";
@@ -491,24 +490,3 @@ export interface RadarTrackingOptionsForegroundService {
491
490
  iconColor?: string;
492
491
  }
493
492
  export type RadarTripStatus = "unknown" | "started" | "approaching" | "arrived" | "expired" | "completed" | "canceled";
494
- export interface RadarLocationPermissionStatusAndroid {
495
- status: LocationPermissionState;
496
- foregroundPermissionResult: boolean;
497
- backgroundPermissionResult: boolean;
498
- shouldShowRequestPermissionRationaleFG: boolean;
499
- shouldShowRequestPermissionRationaleBG: boolean;
500
- previouslyDeniedForeground: boolean;
501
- inLocationPopup: boolean;
502
- approximatePermissionResult: boolean;
503
- previouslyDeniedBackground: boolean;
504
- }
505
- export interface RadarLocationPermissionStatusIOS {
506
- status: LocationPermissionState;
507
- locationManagerStatus: LocationManagerStatus;
508
- backgroundPopupAvailable: boolean;
509
- inForegroundPopup: boolean;
510
- userRejectedBackgroundPermission: boolean;
511
- }
512
- export type RadarLocationPermissionStatus = RadarLocationPermissionStatusAndroid | RadarLocationPermissionStatusIOS;
513
- export type LocationPermissionState = "NO_PERMISSION_GRANTED" | "FOREGROUND_PERMISSION_GRANTED" | "APPROXIMATE_PERMISSION_GRANTED" | "FOREGROUND_PERMISSION_REJECTED_ONCE" | "FOREGROUND_PERMISSION_REJECTED" | "FOREGROUND_PERMISSION_PENDING" | "BACKGROUND_PERMISSION_GRANTED" | "BACKGROUND_PERMISSION_REJECTED" | "BACKGROUND_PERMISSION_REJECTED_ONCE" | "BACKGROUND_PERMISSION_PENDING" | "PERMISSION_RESTRICTED" | "UNKNOWN";
514
- export type LocationManagerStatus = "NotDetermined" | "Restricted" | "Denied" | "AuthorizedAlways" | "AuthorizedWhenInUse" | "Unknown";
@@ -27,10 +27,7 @@ const setMetadata = (metadata) => {
27
27
  const getMetadata = () => react_native_1.NativeModules.RNRadar.getMetadata();
28
28
  const setAnonymousTrackingEnabled = (enabled) => react_native_1.NativeModules.RNRadar.setAnonymousTrackingEnabled(enabled);
29
29
  const getPermissionsStatus = () => react_native_1.NativeModules.RNRadar.getPermissionsStatus();
30
- const requestForegroundLocationPermission = () => react_native_1.NativeModules.RNRadar.requestForegroundLocationPermission();
31
- const requestBackgroundLocationPermission = () => react_native_1.NativeModules.RNRadar.requestBackgroundLocationPermission();
32
- const getLocationPermissionStatus = () => react_native_1.NativeModules.RNRadar.getLocationPermissionStatus();
33
- const openAppSettings = () => react_native_1.NativeModules.RNRadar.openAppSettings();
30
+ const requestPermissions = (background) => react_native_1.NativeModules.RNRadar.requestPermissions(background);
34
31
  const getLocation = (desiredAccuracy) => react_native_1.NativeModules.RNRadar.getLocation(desiredAccuracy);
35
32
  const trackOnce = (options) => {
36
33
  let backCompatibleOptions = options;
@@ -50,6 +47,7 @@ const startTrackingCustom = (options) => react_native_1.NativeModules.RNRadar.st
50
47
  const startTrackingVerified = (options) => react_native_1.NativeModules.RNRadar.startTrackingVerified(options);
51
48
  const mockTracking = (options) => react_native_1.NativeModules.RNRadar.mockTracking(options);
52
49
  const stopTracking = () => react_native_1.NativeModules.RNRadar.stopTracking();
50
+ const stopTrackingVerified = () => react_native_1.NativeModules.RNRadar.stopTrackingVerified();
53
51
  const getTrackingOptions = () => react_native_1.NativeModules.RNRadar.getTrackingOptions();
54
52
  const isUsingRemoteTrackingOptions = () => react_native_1.NativeModules.RNRadar.isUsingRemoteTrackingOptions();
55
53
  const isTracking = () => react_native_1.NativeModules.RNRadar.isTracking();
@@ -97,10 +95,7 @@ const Radar = {
97
95
  setAnonymousTrackingEnabled,
98
96
  isUsingRemoteTrackingOptions,
99
97
  getPermissionsStatus,
100
- requestForegroundLocationPermission,
101
- requestBackgroundLocationPermission,
102
- getLocationPermissionStatus,
103
- openAppSettings,
98
+ requestPermissions,
104
99
  getLocation,
105
100
  trackOnce,
106
101
  trackVerified,
@@ -112,6 +107,7 @@ const Radar = {
112
107
  startTrackingVerified,
113
108
  mockTracking,
114
109
  stopTracking,
110
+ stopTrackingVerified,
115
111
  isTracking,
116
112
  getTrackingOptions,
117
113
  setForegroundServiceOptions,
@@ -1 +1 @@
1
- github "radarlabs/radar-sdk-ios" "3.13.5"
1
+ github "radarlabs/radar-sdk-ios" "3.15.0"
package/ios/RNRadar.m CHANGED
@@ -24,35 +24,6 @@ RCT_EXPORT_MODULE();
24
24
  return self;
25
25
  }
26
26
 
27
- + (NSDictionary *)mapLocationPermissionStatus:(NSDictionary *)status {
28
- NSString *statusString = status[@"locationPermissionState"];
29
- NSString *newStatusString;
30
-
31
- if ([statusString isEqualToString:@"NoPermissionGranted"]) {
32
- newStatusString = @"NO_PERMISSION_GRANTED";
33
- } else if ([statusString isEqualToString:@"ForegroundPermissionGranted"]) {
34
- newStatusString = @"FOREGROUND_PERMISSION_GRANTED";
35
- } else if ([statusString isEqualToString:@"ForegroundPermissionRejected"]) {
36
- newStatusString = @"FOREGROUND_PERMISSION_REJECTED";
37
- } else if ([statusString isEqualToString:@"ForegroundPermissionPending"]) {
38
- newStatusString = @"FOREGROUND_PERMISSION_PENDING";
39
- } else if ([statusString isEqualToString:@"BackgroundPermissionGranted"]) {
40
- newStatusString = @"BACKGROUND_PERMISSION_GRANTED";
41
- } else if ([statusString isEqualToString:@"BackgroundPermissionRejected"]) {
42
- newStatusString = @"BACKGROUND_PERMISSION_REJECTED";
43
- } else if ([statusString isEqualToString:@"BackgroundPermissionPending"]) {
44
- newStatusString = @"BACKGROUND_PERMISSION_PENDING";
45
- } else if ([statusString isEqualToString:@"PermissionRestricted"]) {
46
- newStatusString = @"PERMISSION_RESTRICTED";
47
- } else {
48
- newStatusString = @"UNKNOWN";
49
- }
50
-
51
- NSMutableDictionary *newStatus = [status mutableCopy];
52
- [newStatus removeObjectForKey:@"locationPermissionState"];
53
- [newStatus setValue:newStatusString forKey:@"status"];
54
- return newStatus;
55
- }
56
27
 
57
28
  - (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
58
29
  if (permissionsRequestResolver) {
@@ -70,7 +41,7 @@ RCT_EXPORT_MODULE();
70
41
  }
71
42
 
72
43
  - (NSArray<NSString *> *)supportedEvents {
73
- return @[@"events", @"location", @"clientLocation", @"error", @"log", @"token", @"locationPermissionStatus"];
44
+ return @[@"events", @"location", @"clientLocation", @"error", @"log", @"token"];
74
45
  }
75
46
 
76
47
  - (void)startObserving {
@@ -129,15 +100,9 @@ RCT_EXPORT_MODULE();
129
100
  }
130
101
  }
131
102
 
132
- - (void)didUpdateLocationPermissionStatus:(RadarLocationPermissionStatus *)status {
133
- if (hasListeners) {
134
- [self sendEventWithName:@"locationPermissionStatus" body:[RNRadar mapLocationPermissionStatus:[status dictionaryValue]]];
135
- }
136
- }
137
-
138
103
  RCT_EXPORT_METHOD(initialize:(NSString *)publishableKey fraud:(BOOL)fraud) {
139
104
  [[NSUserDefaults standardUserDefaults] setObject:@"ReactNative" forKey:@"radar-xPlatformSDKType"];
140
- [[NSUserDefaults standardUserDefaults] setObject:@"3.13.0-beta.1" forKey:@"radar-xPlatformSDKVersion"];
105
+ [[NSUserDefaults standardUserDefaults] setObject:@"3.14.0" forKey:@"radar-xPlatformSDKVersion"];
141
106
  [Radar initializeWithPublishableKey:publishableKey];
142
107
  }
143
108
 
@@ -223,6 +188,19 @@ RCT_REMAP_METHOD(getPermissionsStatus, getPermissionsStatusWithResolver:(RCTProm
223
188
  resolve(statusStr);
224
189
  }
225
190
 
191
+ RCT_EXPORT_METHOD(requestPermissions:(BOOL)background resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
192
+ permissionsRequestResolver = resolve;
193
+
194
+ CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
195
+ if (background && status == kCLAuthorizationStatusAuthorizedWhenInUse) {
196
+ [locationManager requestAlwaysAuthorization];
197
+ } else if (status == kCLAuthorizationStatusNotDetermined) {
198
+ [locationManager requestWhenInUseAuthorization];
199
+ } else {
200
+ [self getPermissionsStatusWithResolver:resolve rejecter:reject];
201
+ }
202
+ }
203
+
226
204
  RCT_EXPORT_METHOD(getLocation:(NSString *)desiredAccuracy resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
227
205
  __block RCTPromiseResolveBlock resolver = resolve;
228
206
  __block RCTPromiseRejectBlock rejecter = reject;
@@ -341,11 +319,12 @@ RCT_EXPORT_METHOD(trackVerified:(NSDictionary *)optionsDict resolve:(RCTPromiseR
341
319
 
342
320
  RadarTrackVerifiedCompletionHandler completionHandler = ^(RadarStatus status, RadarVerifiedLocationToken * _Nullable token) {
343
321
  if (status == RadarStatusSuccess && resolver) {
322
+ NSMutableDictionary *dict = [NSMutableDictionary new];
323
+ [dict setObject:[Radar stringForStatus:status] forKey:@"status"];
344
324
  if (token != nil) {
345
- resolver([token dictionaryValue]);
346
- } else {
347
- resolver(nil);
325
+ [dict setObject:[token dictionaryValue] forKey:@"token"];
348
326
  }
327
+ resolver(dict);
349
328
  } else if (rejecter) {
350
329
  rejecter([Radar stringForStatus:status], [Radar stringForStatus:status], nil);
351
330
  }
@@ -362,11 +341,12 @@ RCT_EXPORT_METHOD(getVerifiedLocationToken:(RCTPromiseResolveBlock)resolve rejec
362
341
 
363
342
  RadarTrackVerifiedCompletionHandler completionHandler = ^(RadarStatus status, RadarVerifiedLocationToken * _Nullable token) {
364
343
  if (status == RadarStatusSuccess && resolver) {
344
+ NSMutableDictionary *dict = [NSMutableDictionary new];
345
+ [dict setObject:[Radar stringForStatus:status] forKey:@"status"];
365
346
  if (token != nil) {
366
- resolver([token dictionaryValue]);
367
- } else {
368
- resolver(nil);
347
+ [dict setObject:[token dictionaryValue] forKey:@"token"];
369
348
  }
349
+ resolver(dict);
370
350
  } else if (rejecter) {
371
351
  rejecter([Radar stringForStatus:status], [Radar stringForStatus:status], nil);
372
352
  }
@@ -397,13 +377,9 @@ RCT_EXPORT_METHOD(startTrackingCustom:(NSDictionary *)optionsDict) {
397
377
  RCT_EXPORT_METHOD(startTrackingVerified:(NSDictionary *)optionsDict) {
398
378
  BOOL token = NO;
399
379
  BOOL beacons = NO;
400
- double interval = 1;
380
+ double interval = 1200;
401
381
 
402
382
  if (optionsDict != nil) {
403
- NSNumber *tokenNumber = optionsDict[@"token"];
404
- if (tokenNumber != nil && [tokenNumber isKindOfClass:[NSNumber class]]) {
405
- token = [tokenNumber boolValue];
406
- }
407
383
  NSNumber *beaconsNumber = optionsDict[@"beacons"];
408
384
  if (beaconsNumber != nil && [beaconsNumber isKindOfClass:[NSNumber class]]) {
409
385
  beacons = [beaconsNumber boolValue];
@@ -461,6 +437,10 @@ RCT_EXPORT_METHOD(stopTracking) {
461
437
  [Radar stopTracking];
462
438
  }
463
439
 
440
+ RCT_EXPORT_METHOD(stopTrackingVerified) {
441
+ [Radar stopTrackingVerified];
442
+ }
443
+
464
444
  RCT_EXPORT_METHOD(isTracking:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
465
445
  BOOL res = [Radar isTracking];
466
446
  resolve(@(res));
@@ -1170,21 +1150,4 @@ RCT_EXPORT_METHOD(logConversion:(NSDictionary *)optionsDict resolve:(RCTPromiseR
1170
1150
  }
1171
1151
  }
1172
1152
 
1173
- RCT_EXPORT_METHOD(requestForegroundLocationPermission) {
1174
- [Radar requestForegroundLocationPermission];
1175
- }
1176
-
1177
- RCT_EXPORT_METHOD(requestBackgroundLocationPermission) {
1178
- [Radar requestBackgroundLocationPermission];
1179
- }
1180
-
1181
- RCT_EXPORT_METHOD(getLocationPermissionStatus:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
1182
- RadarLocationPermissionStatus* status = [Radar getLocationPermissionStatus];
1183
- resolve([RNRadar mapLocationPermissionStatus:[status dictionaryValue]]);
1184
- }
1185
-
1186
- RCT_EXPORT_METHOD(openAppSettings) {
1187
- [Radar openAppSettings];
1188
- }
1189
-
1190
1153
  @end
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "React Native module for Radar, the leading geofencing and location tracking platform",
4
4
  "homepage": "https://radar.com",
5
5
  "license": "Apache-2.0",
6
- "version": "3.13.0-beta.1",
6
+ "version": "3.14.0",
7
7
  "main": "dist/src/index.js",
8
8
  "files": [
9
9
  "android",
@@ -15,5 +15,5 @@ Pod::Spec.new do |s|
15
15
  s.platform = :ios, "10.0"
16
16
 
17
17
  s.dependency "React"
18
- s.dependency "RadarSDK", "~> 3.13.5"
18
+ s.dependency "RadarSDK", "~> 3.15.0"
19
19
  end
@@ -36,7 +36,6 @@ import {
36
36
  RadarGetMatrixOptions,
37
37
  RadarMetadata,
38
38
  RadarIPGeocodeCallback,
39
- RadarLocationPermissionStatus,
40
39
  } from "./types";
41
40
 
42
41
  export interface RadarNativeInterface {
@@ -50,10 +49,7 @@ export interface RadarNativeInterface {
50
49
  getMetadata: () => Promise<RadarMetadata>;
51
50
  setAnonymousTrackingEnabled: (enabled: boolean) => void;
52
51
  getPermissionsStatus: () => Promise<RadarPermissionsStatus>;
53
- requestForegroundLocationPermission: () => void;
54
- requestBackgroundLocationPermission: () => void;
55
- getLocationPermissionStatus: () => Promise<RadarLocationPermissionStatus>;
56
- openAppSettings: () => void;
52
+ requestPermissions: (background: boolean) => Promise<RadarPermissionsStatus>;
57
53
  getLocation: (
58
54
  desiredAccuracy?: RadarTrackingOptionsDesiredAccuracy
59
55
  ) => Promise<RadarLocationCallback>;
@@ -69,9 +65,10 @@ export interface RadarNativeInterface {
69
65
  startTrackingVerified: (options?: RadarVerifiedTrackingOptions) => void;
70
66
  mockTracking: (options: RadarMockTrackingOptions) => void;
71
67
  stopTracking: () => void;
68
+ stopTrackingVerified: () => void;
72
69
  getTrackingOptions: () => Promise<RadarTrackingOptions>;
73
70
  isUsingRemoteTrackingOptions: () => Promise<boolean>;
74
- isTracking: () => boolean;
71
+ isTracking: () => Promise<boolean>;
75
72
  setForegroundServiceOptions: (
76
73
  options: RadarTrackingOptionsForegroundService
77
74
  ) => void;
@@ -421,9 +421,6 @@ export interface RadarLogUpdateCallback {
421
421
  (status: string): void;
422
422
  }
423
423
 
424
- export interface RadarLocationPermissionStatusCallback {
425
- (status: RadarLocationPermissionStatus): void;
426
- }
427
424
 
428
425
  export type RadarListenerCallback =
429
426
  | RadarEventUpdateCallback
@@ -431,7 +428,6 @@ export type RadarListenerCallback =
431
428
  | RadarClientLocationUpdateCallback
432
429
  | RadarErrorCallback
433
430
  | RadarLogUpdateCallback
434
- | RadarLocationPermissionStatusCallback;
435
431
 
436
432
  export type RadarPermissionsStatus =
437
433
  | "GRANTED_FOREGROUND"
@@ -454,7 +450,7 @@ export type RadarLocationSource =
454
450
  | "BEACON_EXIT"
455
451
  | "UNKNOWN";
456
452
 
457
- export type RadarEventChannel = "clientLocation" | "location" | "error" | "events" | "log" | "token" | "locationPermissionStatus";
453
+ export type RadarEventChannel = "clientLocation" | "location" | "error" | "events" | "log" | "token" ;
458
454
 
459
455
  export type RadarLogLevel = "info" | "debug" | "warning" | "error" | "none";
460
456
 
@@ -754,6 +750,8 @@ export interface RadarFraud {
754
750
  compromised: boolean;
755
751
  jumped: boolean;
756
752
  inaccurate: boolean;
753
+ blocked: boolean;
754
+ sharing: boolean;
757
755
  }
758
756
 
759
757
  export type RadarTrackingOptionsReplay = "all" | "stops" | "none";
@@ -784,47 +782,3 @@ export type RadarTripStatus =
784
782
  | "completed"
785
783
  | "canceled";
786
784
 
787
- export interface RadarLocationPermissionStatusAndroid {
788
- status: LocationPermissionState;
789
- foregroundPermissionResult: boolean;
790
- backgroundPermissionResult: boolean;
791
- shouldShowRequestPermissionRationaleFG: boolean;
792
- shouldShowRequestPermissionRationaleBG: boolean;
793
- previouslyDeniedForeground: boolean;
794
- inLocationPopup: boolean;
795
- approximatePermissionResult: boolean;
796
- previouslyDeniedBackground: boolean;
797
- }
798
-
799
- export interface RadarLocationPermissionStatusIOS {
800
- status: LocationPermissionState;
801
- locationManagerStatus: LocationManagerStatus;
802
- backgroundPopupAvailable: boolean;
803
- inForegroundPopup: boolean;
804
- userRejectedBackgroundPermission: boolean;
805
- }
806
-
807
- export type RadarLocationPermissionStatus =
808
- RadarLocationPermissionStatusAndroid | RadarLocationPermissionStatusIOS
809
-
810
- export type LocationPermissionState =
811
- | "NO_PERMISSION_GRANTED"
812
- | "FOREGROUND_PERMISSION_GRANTED"
813
- | "APPROXIMATE_PERMISSION_GRANTED"
814
- | "FOREGROUND_PERMISSION_REJECTED_ONCE"
815
- | "FOREGROUND_PERMISSION_REJECTED"
816
- | "FOREGROUND_PERMISSION_PENDING"
817
- | "BACKGROUND_PERMISSION_GRANTED"
818
- | "BACKGROUND_PERMISSION_REJECTED"
819
- | "BACKGROUND_PERMISSION_REJECTED_ONCE"
820
- | "BACKGROUND_PERMISSION_PENDING"
821
- | "PERMISSION_RESTRICTED"
822
- | "UNKNOWN";
823
-
824
- export type LocationManagerStatus =
825
- | "NotDetermined"
826
- | "Restricted"
827
- | "Denied"
828
- | "AuthorizedAlways"
829
- | "AuthorizedWhenInUse"
830
- | "Unknown";
@@ -39,7 +39,6 @@ import {
39
39
  RadarIPGeocodeCallback,
40
40
  RadarTrackVerifiedOptions,
41
41
  RadarTrackVerifiedCallback,
42
- RadarLocationPermissionStatus,
43
42
  } from "./@types/types";
44
43
 
45
44
  if (
@@ -85,16 +84,10 @@ const setAnonymousTrackingEnabled = (enabled: boolean): void =>
85
84
  const getPermissionsStatus = (): Promise<RadarPermissionsStatus> =>
86
85
  NativeModules.RNRadar.getPermissionsStatus();
87
86
 
88
- const requestForegroundLocationPermission = () =>
89
- NativeModules.RNRadar.requestForegroundLocationPermission();
90
-
91
- const requestBackgroundLocationPermission = () =>
92
- NativeModules.RNRadar.requestBackgroundLocationPermission();
93
-
94
- const getLocationPermissionStatus = (): Promise<RadarLocationPermissionStatus> =>
95
- NativeModules.RNRadar.getLocationPermissionStatus();
96
-
97
- const openAppSettings = () => NativeModules.RNRadar.openAppSettings()
87
+ const requestPermissions = (
88
+ background: boolean
89
+ ): Promise<RadarPermissionsStatus> =>
90
+ NativeModules.RNRadar.requestPermissions(background);
98
91
 
99
92
  const getLocation = (
100
93
  desiredAccuracy?: RadarTrackingOptionsDesiredAccuracy
@@ -115,10 +108,12 @@ const trackOnce = (
115
108
  return NativeModules.RNRadar.trackOnce(backCompatibleOptions);
116
109
  };
117
110
 
118
- const trackVerified = (options?: RadarTrackVerifiedOptions): Promise<RadarTrackVerifiedCallback> =>
111
+ const trackVerified = (
112
+ options?: RadarTrackVerifiedOptions
113
+ ): Promise<RadarTrackVerifiedCallback> =>
119
114
  NativeModules.RNRadar.trackVerified(options);
120
115
 
121
- const getVerifiedLocationToken = (): Promise<RadarTrackVerifiedCallback> =>
116
+ const getVerifiedLocationToken = (): Promise<RadarTrackVerifiedCallback> =>
122
117
  NativeModules.RNRadar.getVerifiedLocationToken();
123
118
 
124
119
  const startTrackingEfficient = (): void =>
@@ -141,13 +136,16 @@ const mockTracking = (options: RadarMockTrackingOptions): void =>
141
136
 
142
137
  const stopTracking = (): void => NativeModules.RNRadar.stopTracking();
143
138
 
139
+ const stopTrackingVerified = (): void =>
140
+ NativeModules.RNRadar.stopTrackingVerified();
141
+
144
142
  const getTrackingOptions = (): Promise<RadarTrackingOptions> =>
145
143
  NativeModules.RNRadar.getTrackingOptions();
146
144
 
147
145
  const isUsingRemoteTrackingOptions = (): Promise<boolean> =>
148
146
  NativeModules.RNRadar.isUsingRemoteTrackingOptions();
149
147
 
150
- const isTracking = (): boolean => NativeModules.RNRadar.isTracking();
148
+ const isTracking = (): Promise<boolean> => NativeModules.RNRadar.isTracking();
151
149
 
152
150
  const setForegroundServiceOptions = (
153
151
  options: RadarTrackingOptionsForegroundService
@@ -199,7 +197,9 @@ const autocomplete = (
199
197
  const geocode = (options: RadarGeocodeOptions): Promise<RadarAddressCallback> =>
200
198
  NativeModules.RNRadar.geocode(options);
201
199
 
202
- const reverseGeocode = (options?: RadarReverseGeocodeOptions): Promise<RadarAddressCallback> =>
200
+ const reverseGeocode = (
201
+ options?: RadarReverseGeocodeOptions
202
+ ): Promise<RadarAddressCallback> =>
203
203
  NativeModules.RNRadar.reverseGeocode(options);
204
204
 
205
205
  const ipGeocode = (): Promise<RadarIPGeocodeCallback> =>
@@ -220,10 +220,15 @@ const logConversion = (
220
220
  const sendEvent = (name: string, metadata: RadarMetadata): void =>
221
221
  NativeModules.RNRadar.sendEvent(name, metadata);
222
222
 
223
- const on = (channel: RadarEventChannel, callback: RadarListenerCallback): void =>
224
- eventEmitter.addListener(channel, callback);
223
+ const on = (
224
+ channel: RadarEventChannel,
225
+ callback: RadarListenerCallback
226
+ ): void => eventEmitter.addListener(channel, callback);
225
227
 
226
- const off = (channel: RadarEventChannel, callback?: Function | undefined): void => {
228
+ const off = (
229
+ channel: RadarEventChannel,
230
+ callback?: Function | undefined
231
+ ): void => {
227
232
  if (callback) {
228
233
  // @ts-ignore
229
234
  eventEmitter.removeListener(channel, callback);
@@ -249,10 +254,7 @@ const Radar: RadarNativeInterface = {
249
254
  setAnonymousTrackingEnabled,
250
255
  isUsingRemoteTrackingOptions,
251
256
  getPermissionsStatus,
252
- requestForegroundLocationPermission,
253
- requestBackgroundLocationPermission,
254
- getLocationPermissionStatus,
255
- openAppSettings,
257
+ requestPermissions,
256
258
  getLocation,
257
259
  trackOnce,
258
260
  trackVerified,
@@ -264,6 +266,7 @@ const Radar: RadarNativeInterface = {
264
266
  startTrackingVerified,
265
267
  mockTracking,
266
268
  stopTracking,
269
+ stopTrackingVerified,
267
270
  isTracking,
268
271
  getTrackingOptions,
269
272
  setForegroundServiceOptions,