react-native-radar 3.10.0-beta.4 → 3.10.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.
@@ -18,7 +18,7 @@ android {
18
18
  minSdkVersion 16
19
19
  targetSdkVersion 31
20
20
  versionCode 1
21
- versionName '3.10.0-beta.4'
21
+ versionName '3.10.0'
22
22
  }
23
23
  lintOptions {
24
24
  abortOnError false
@@ -45,5 +45,5 @@ repositories {
45
45
 
46
46
  dependencies {
47
47
  api 'com.facebook.react:react-native:+'
48
- api 'io.radar:sdk:3.9.1'
48
+ api 'io.radar:sdk:3.9.4'
49
49
  }
@@ -25,6 +25,7 @@ import io.radar.sdk.Radar;
25
25
  import io.radar.sdk.RadarTrackingOptions;
26
26
  import io.radar.sdk.RadarTrackingOptions.RadarTrackingOptionsForegroundService;
27
27
  import io.radar.sdk.RadarTripOptions;
28
+ import io.radar.sdk.RadarVerifiedReceiver;
28
29
  import io.radar.sdk.model.RadarAddress;
29
30
  import io.radar.sdk.model.RadarContext;
30
31
  import io.radar.sdk.model.RadarEvent;
@@ -49,16 +50,22 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
49
50
  private Promise mPermissionsRequestPromise;
50
51
 
51
52
  private RNRadarReceiver receiver;
53
+ private RNRadarVerifiedReceiver verifiedReceiver;
52
54
  private int listenerCount = 0;
55
+ private boolean fraud = false;
53
56
 
54
57
  public RNRadarModule(ReactApplicationContext reactContext) {
55
58
  super(reactContext);
56
59
  receiver = new RNRadarReceiver();
60
+ verifiedReceiver = new RNRadarVerifiedReceiver();
57
61
  }
58
62
 
59
63
  @ReactMethod
60
64
  public void addListener(String eventName) {
61
65
  if (listenerCount == 0) {
66
+ if (fraud) {
67
+ verifiedReceiver.hasListeners = true;
68
+ }
62
69
  receiver.hasListeners = true;
63
70
  }
64
71
 
@@ -69,6 +76,9 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
69
76
  public void removeListeners(Integer count) {
70
77
  listenerCount -= count;
71
78
  if (listenerCount == 0) {
79
+ if (fraud) {
80
+ verifiedReceiver.hasListeners = false;
81
+ }
72
82
  receiver.hasListeners = false;
73
83
  }
74
84
  }
@@ -80,8 +90,10 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
80
90
 
81
91
  @ReactMethod
82
92
  public void initialize(String publishableKey, boolean fraud) {
93
+ this.fraud = fraud;
83
94
  if (fraud) {
84
95
  Radar.initialize(getReactApplicationContext(), publishableKey, receiver, Radar.RadarLocationServicesProvider.GOOGLE, fraud);
96
+ Radar.setVerifiedReceiver(verifiedReceiver);
85
97
  } else {
86
98
  Radar.initialize(getReactApplicationContext(), publishableKey);
87
99
  Radar.setReceiver(receiver);
@@ -359,8 +371,17 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
359
371
  }
360
372
 
361
373
  @ReactMethod
362
- public void trackVerified(final Promise promise) {
363
- Radar.trackVerified(new Radar.RadarTrackCallback() {
374
+ public void trackVerified(ReadableMap optionsMap, final Promise promise) {
375
+
376
+ boolean beaconsTrackingOption = false;
377
+
378
+ if (optionsMap != null) {
379
+ if (optionsMap.hasKey("beacons")) {
380
+ beaconsTrackingOption = optionsMap.getBoolean("beacons");
381
+ }
382
+ }
383
+
384
+ Radar.RadarTrackCallback trackCallback = new Radar.RadarTrackCallback() {
364
385
  @Override
365
386
  public void onComplete(@NonNull Radar.RadarStatus status, @Nullable Location location, @Nullable RadarEvent[] events, @Nullable RadarUser user) {
366
387
  if (promise == null) {
@@ -389,12 +410,23 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
389
410
  promise.reject(Radar.RadarStatus.ERROR_SERVER.toString(), Radar.RadarStatus.ERROR_SERVER.toString());
390
411
  }
391
412
  }
392
- });
413
+ };
414
+
415
+ Radar.trackVerified(beaconsTrackingOption, trackCallback);
393
416
  }
394
417
 
395
418
  @ReactMethod
396
- public void trackVerifiedToken(final Promise promise) {
397
- Radar.trackVerifiedToken(new Radar.RadarTrackTokenCallback() {
419
+ public void trackVerifiedToken(ReadableMap optionsMap, final Promise promise) {
420
+
421
+ boolean beaconsTrackingOption = false;
422
+
423
+ if (optionsMap != null) {
424
+ if (optionsMap.hasKey("beacons")) {
425
+ beaconsTrackingOption = optionsMap.getBoolean("beacons");
426
+ }
427
+ }
428
+
429
+ Radar.RadarTrackTokenCallback trackTokenCallback = new Radar.RadarTrackTokenCallback() {
398
430
  @Override
399
431
  public void onComplete(@NonNull Radar.RadarStatus status, @Nullable String token) {
400
432
  if (promise == null) {
@@ -417,7 +449,9 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
417
449
  promise.reject(Radar.RadarStatus.ERROR_SERVER.toString(), Radar.RadarStatus.ERROR_SERVER.toString());
418
450
  }
419
451
  }
420
- });
452
+ };
453
+
454
+ Radar.trackVerifiedToken(beaconsTrackingOption, trackTokenCallback);
421
455
  }
422
456
 
423
457
  @ReactMethod
@@ -446,6 +480,21 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
446
480
  }
447
481
  }
448
482
 
483
+ @ReactMethod
484
+ public void startTrackingVerified(ReadableMap optionsMap) {
485
+ boolean token = false;
486
+ boolean beacons = false;
487
+ int interval = 1;
488
+
489
+ if (optionsMap != null) {
490
+ token = optionsMap.hasKey("token") ? optionsMap.getBoolean("token") : token;
491
+ beacons = optionsMap.hasKey("beacons") ? optionsMap.getBoolean("beacons") : beacons;
492
+ interval = optionsMap.hasKey("interval") ? optionsMap.getInt("interval") : interval;
493
+ }
494
+
495
+ Radar.startTrackingVerified(token, interval, beacons);
496
+ }
497
+
449
498
  @ReactMethod
450
499
  public void mockTracking(ReadableMap optionsMap) {
451
500
  ReadableMap originMap = optionsMap.getMap("origin");
@@ -0,0 +1,46 @@
1
+ package io.radar.react;
2
+
3
+ import android.content.Context;
4
+ import android.util.Log;
5
+
6
+ import androidx.annotation.NonNull;
7
+
8
+ import com.facebook.react.ReactApplication;
9
+ import com.facebook.react.ReactInstanceManager;
10
+ import com.facebook.react.ReactNativeHost;
11
+ import com.facebook.react.bridge.Arguments;
12
+ import com.facebook.react.bridge.ReactContext;
13
+ import com.facebook.react.bridge.ReactMethod;
14
+ import com.facebook.react.bridge.WritableMap;
15
+ import com.facebook.react.modules.core.DeviceEventManagerModule;
16
+
17
+ import io.radar.sdk.Radar;
18
+ import io.radar.sdk.RadarVerifiedReceiver;
19
+
20
+ public class RNRadarVerifiedReceiver extends RadarVerifiedReceiver {
21
+
22
+ private ReactNativeHost reactNativeHost;
23
+ private static final String TAG = "RNRadarVerifiedReceiver";
24
+ protected boolean hasListeners = false;
25
+
26
+ private void sendEvent(final String eventName, final Object data) {
27
+ final ReactInstanceManager reactInstanceManager = reactNativeHost.getReactInstanceManager();
28
+ ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
29
+ if (reactContext != null && hasListeners) {
30
+ reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, data);
31
+ }
32
+ }
33
+
34
+ @Override
35
+ public void onTokenUpdated(@NonNull Context context, @NonNull String token) {
36
+ try {
37
+ ReactApplication reactApplication = ((ReactApplication)context.getApplicationContext());
38
+ reactNativeHost = reactApplication.getReactNativeHost();
39
+
40
+ sendEvent("token", token);
41
+ } catch (Exception e) {
42
+ Log.e(TAG, "Exception", e);
43
+ }
44
+ }
45
+
46
+ }
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.10.0-beta.4",
6
+ "version": "3.10.0",
7
7
  "main": "dist/src/index.js",
8
8
  "files": [
9
9
  "android",
@@ -1,4 +1,4 @@
1
- import { Location, RadarAutocompleteOptions, RadarContextCallback, RadarAddressCallback, RadarGetDistanceOptions, RadarLocationCallback, RadarLogConversionCallback, RadarLogConversionOptions, RadarLogLevel, RadarMockTrackingOptions, RadarNotificationOptions, RadarPermissionsStatus, RadarRouteCallback, RadarRouteMatrix, RadarSearchGeofencesCallback, RadarSearchGeofencesOptions, RadarSearchPlacesCallback, RadarSearchPlacesOptions, RadarStartTripOptions, RadarTrackCallback, RadarTrackOnceOptions, RadarTrackTokenCallback, RadarTrackingOptions, RadarTrackingOptionsDesiredAccuracy, RadarTrackingOptionsForegroundService, RadarTripCallback, RadarTripOptions, RadarUpdateTripOptions, Event, RadarListenerCallback, RadarGetMatrixOptions, RadarMetadata, RadarIPGeocodeCallback } from "./types";
1
+ import { Location, RadarAutocompleteOptions, RadarContextCallback, RadarAddressCallback, RadarEventChannel, RadarGetDistanceOptions, RadarLocationCallback, RadarLogConversionCallback, RadarLogConversionOptions, RadarLogLevel, RadarMockTrackingOptions, RadarNotificationOptions, RadarPermissionsStatus, RadarRouteCallback, RadarRouteMatrix, RadarSearchGeofencesCallback, RadarSearchGeofencesOptions, RadarSearchPlacesCallback, RadarSearchPlacesOptions, RadarStartTripOptions, RadarTrackCallback, RadarTrackOnceOptions, RadarTrackTokenCallback, 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;
@@ -13,12 +13,13 @@ export interface RadarNativeInterface {
13
13
  requestPermissions: (background: boolean) => Promise<RadarPermissionsStatus>;
14
14
  getLocation: (desiredAccuracy?: RadarTrackingOptionsDesiredAccuracy) => Promise<RadarLocationCallback>;
15
15
  trackOnce: (options?: RadarTrackOnceOptions | Location) => Promise<RadarTrackCallback>;
16
- trackVerifiedToken: () => Promise<RadarTrackTokenCallback>;
17
- trackVerified: () => Promise<RadarTrackCallback>;
16
+ trackVerifiedToken: (options?: RadarTrackVerifiedOptions) => Promise<RadarTrackTokenCallback>;
17
+ trackVerified: (options?: RadarTrackVerifiedOptions) => Promise<RadarTrackCallback>;
18
18
  startTrackingEfficient: () => void;
19
19
  startTrackingResponsive: () => void;
20
20
  startTrackingContinuous: () => void;
21
21
  startTrackingCustom: (options: RadarTrackingOptions) => void;
22
+ startTrackingVerified: (options?: RadarVerifiedTrackingOptions) => void;
22
23
  mockTracking: (options: RadarMockTrackingOptions) => void;
23
24
  stopTracking: () => void;
24
25
  getTrackingOptions: () => Promise<RadarTrackingOptions>;
@@ -44,8 +45,8 @@ export interface RadarNativeInterface {
44
45
  getMatrix: (option: RadarGetMatrixOptions) => Promise<RadarRouteMatrix>;
45
46
  logConversion: (options: RadarLogConversionOptions) => Promise<RadarLogConversionCallback>;
46
47
  sendEvent: (name: string, metadata: RadarMetadata) => void;
47
- on: (event: Event, callback: RadarListenerCallback) => void;
48
- off: (event: Event, callback?: Function | undefined) => void;
48
+ on: (channel: RadarEventChannel, callback: RadarListenerCallback) => void;
49
+ off: (channel: RadarEventChannel, callback?: Function | undefined) => void;
49
50
  nativeSdkVersion: () => Promise<string>;
50
51
  rnSdkVersion: () => string;
51
52
  }
@@ -4,6 +4,9 @@ export interface RadarTrackOnceOptions {
4
4
  desiredAccuracy?: RadarTrackingOptionsDesiredAccuracy;
5
5
  beacons?: boolean;
6
6
  }
7
+ export interface RadarTrackVerifiedOptions {
8
+ beacons?: boolean;
9
+ }
7
10
  /**
8
11
  * Options for tracking the user's location.
9
12
  * @see {@link https://radar.com/documentation/sdk/tracking}
@@ -14,16 +17,15 @@ export interface RadarTrackingOptions {
14
17
  desiredMovingUpdateInterval: number;
15
18
  fastestMovingUpdateInterval?: number;
16
19
  desiredSyncInterval: number;
17
- desiredAccuracy: String;
20
+ desiredAccuracy: RadarTrackingOptionsDesiredAccuracy;
18
21
  stopDuration: number;
19
22
  stopDistance: number;
20
- sync: String;
21
- replay: String;
23
+ sync: "all" | "stopsAndExits" | "none";
24
+ replay: "all" | "stops" | "none";
22
25
  useStoppedGeofence: boolean;
23
26
  showBlueBar?: boolean;
24
27
  startTrackingAfter?: number;
25
28
  stopTrackingAfter?: number;
26
- syncLocations?: String;
27
29
  stoppedGeofenceRadius: number;
28
30
  useMovingGeofence: boolean;
29
31
  movingGeofenceRadius: number;
@@ -41,6 +43,11 @@ export interface RadarMockTrackingOptions {
41
43
  steps: number;
42
44
  interval: number;
43
45
  }
46
+ export interface RadarVerifiedTrackingOptions {
47
+ token?: boolean;
48
+ interval?: number;
49
+ beacons?: boolean;
50
+ }
44
51
  export interface RadarGetDistanceOptions {
45
52
  origin?: Location;
46
53
  destination?: Location;
@@ -180,7 +187,7 @@ export interface RadarLogConversionCallback {
180
187
  }
181
188
  export interface RadarTrackTokenCallback {
182
189
  status: string;
183
- token?: String;
190
+ token?: string;
184
191
  }
185
192
  export interface RadarEventUpdate {
186
193
  user?: RadarUser;
@@ -199,7 +206,7 @@ export interface RadarLocationUpdateCallback {
199
206
  export interface RadarClientLocationUpdate {
200
207
  location: Location;
201
208
  stopped: boolean;
202
- source: string;
209
+ source: RadarLocationSource;
203
210
  }
204
211
  export interface RadarClientLocationUpdateCallback {
205
212
  (args: RadarClientLocationUpdate): void;
@@ -211,8 +218,9 @@ export interface RadarLogUpdateCallback {
211
218
  (status: string): void;
212
219
  }
213
220
  export type RadarListenerCallback = RadarEventUpdateCallback | RadarLocationUpdateCallback | RadarClientLocationUpdateCallback | RadarErrorCallback | RadarLogUpdateCallback;
214
- export type RadarPermissionsStatus = "GRANTED_FOREGROUND" | "GRANTED_FOREGROUND" | "DENIED" | "NOT_DETERMINED" | "UNKNOWN";
215
- export type Event = "clientLocation" | "location" | "error" | "events" | "log";
221
+ export type RadarPermissionsStatus = "GRANTED_FOREGROUND" | "GRANTED_BACKGROUND" | "DENIED" | "NOT_DETERMINED" | "UNKNOWN";
222
+ 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";
223
+ export type RadarEventChannel = "clientLocation" | "location" | "error" | "events" | "log" | "token";
216
224
  export type RadarLogLevel = "info" | "debug" | "warning" | "error" | "none";
217
225
  export interface RadarRouteMatrix {
218
226
  status: string;
@@ -265,9 +273,9 @@ export interface RadarTrip {
265
273
  metadata?: RadarMetadata;
266
274
  destinationGeofenceTag?: string;
267
275
  destinationGeofenceExternalId?: string;
268
- mode?: string;
276
+ mode?: RadarRouteMode;
269
277
  eta?: RadarTripEta;
270
- status: string;
278
+ status: RadarTripStatus;
271
279
  scheduledArrivalAt?: Date;
272
280
  destinationLocation: Location;
273
281
  }
@@ -428,7 +436,7 @@ export interface RadarFraud {
428
436
  }
429
437
  export type RadarTrackingOptionsReplay = "all" | "stops" | "none";
430
438
  export type RadarTrackingOptionsSync = "none" | "stopsAndExits" | "all";
431
- export type RadarRouteMode = "foot" | "bike" | "car";
439
+ export type RadarRouteMode = "foot" | "bike" | "car" | "truck" | "motorbike";
432
440
  export interface RadarTrackingOptionsForegroundService {
433
441
  text?: string;
434
442
  title?: string;
@@ -38,12 +38,13 @@ const trackOnce = (options) => {
38
38
  }
39
39
  return react_native_1.NativeModules.RNRadar.trackOnce(backCompatibleOptions);
40
40
  };
41
- const trackVerified = () => react_native_1.NativeModules.RNRadar.trackVerified();
42
- const trackVerifiedToken = () => react_native_1.NativeModules.RNRadar.trackVerifiedToken();
41
+ const trackVerified = (options) => react_native_1.NativeModules.RNRadar.trackVerified(options);
42
+ const trackVerifiedToken = (options) => react_native_1.NativeModules.RNRadar.trackVerifiedToken(options);
43
43
  const startTrackingEfficient = () => react_native_1.NativeModules.RNRadar.startTrackingEfficient();
44
44
  const startTrackingResponsive = () => react_native_1.NativeModules.RNRadar.startTrackingResponsive();
45
45
  const startTrackingContinuous = () => react_native_1.NativeModules.RNRadar.startTrackingContinuous();
46
46
  const startTrackingCustom = (options) => react_native_1.NativeModules.RNRadar.startTrackingCustom(options);
47
+ const startTrackingVerified = (options) => react_native_1.NativeModules.RNRadar.startTrackingVerified(options);
47
48
  const mockTracking = (options) => react_native_1.NativeModules.RNRadar.mockTracking(options);
48
49
  const stopTracking = () => react_native_1.NativeModules.RNRadar.stopTracking();
49
50
  const getTrackingOptions = () => react_native_1.NativeModules.RNRadar.getTrackingOptions();
@@ -69,14 +70,14 @@ const getDistance = (options) => react_native_1.NativeModules.RNRadar.getDistanc
69
70
  const getMatrix = (options) => react_native_1.NativeModules.RNRadar.getMatrix(options);
70
71
  const logConversion = (options) => react_native_1.NativeModules.RNRadar.logConversion(options);
71
72
  const sendEvent = (name, metadata) => react_native_1.NativeModules.RNRadar.sendEvent(name, metadata);
72
- const on = (event, callback) => eventEmitter.addListener(event, callback);
73
- const off = (event, callback) => {
73
+ const on = (channel, callback) => eventEmitter.addListener(channel, callback);
74
+ const off = (channel, callback) => {
74
75
  if (callback) {
75
76
  // @ts-ignore
76
- eventEmitter.removeListener(event, callback);
77
+ eventEmitter.removeListener(channel, callback);
77
78
  }
78
79
  else {
79
- eventEmitter.removeAllListeners(event);
80
+ eventEmitter.removeAllListeners(channel);
80
81
  }
81
82
  };
82
83
  const nativeSdkVersion = () => react_native_1.NativeModules.RNRadar.nativeSdkVersion();
@@ -102,6 +103,7 @@ const Radar = {
102
103
  startTrackingResponsive,
103
104
  startTrackingContinuous,
104
105
  startTrackingCustom,
106
+ startTrackingVerified,
105
107
  mockTracking,
106
108
  stopTracking,
107
109
  isTracking,
@@ -1 +1 @@
1
- github "radarlabs/radar-sdk-ios" "3.9.3"
1
+ github "radarlabs/radar-sdk-ios" "3.9.6"
package/ios/RNRadar.h CHANGED
@@ -3,6 +3,6 @@
3
3
  #import <React/RCTBridgeModule.h>
4
4
  #import <React/RCTEventEmitter.h>
5
5
 
6
- @interface RNRadar : RCTEventEmitter <RadarDelegate, RCTBridgeModule, CLLocationManagerDelegate>
6
+ @interface RNRadar : RCTEventEmitter <RadarDelegate, RadarVerifiedDelegate, RCTBridgeModule, CLLocationManagerDelegate>
7
7
 
8
8
  @end
package/ios/RNRadar.m CHANGED
@@ -16,6 +16,7 @@ RCT_EXPORT_MODULE();
16
16
  self = [super init];
17
17
  if (self) {
18
18
  [Radar setDelegate:self];
19
+ [Radar setVerifiedDelegate:self];
19
20
  locationManager = [CLLocationManager new];
20
21
  locationManager.delegate = self;
21
22
  }
@@ -91,6 +92,12 @@ RCT_EXPORT_MODULE();
91
92
  }
92
93
  }
93
94
 
95
+ - (void)didUpdateToken:(NSString *)token {
96
+ if (hasListeners) {
97
+ [self sendEventWithName:@"token" body:token];
98
+ }
99
+ }
100
+
94
101
  RCT_EXPORT_METHOD(initialize:(NSString *)publishableKey fraud:(BOOL)fraud) {
95
102
  [Radar initializeWithPublishableKey:publishableKey];
96
103
  }
@@ -295,7 +302,9 @@ RCT_EXPORT_METHOD(trackOnce:(NSDictionary *)optionsDict resolve:(RCTPromiseResol
295
302
  }
296
303
  }
297
304
 
298
- RCT_EXPORT_METHOD(trackVerified:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
305
+ RCT_EXPORT_METHOD(trackVerified:(NSDictionary *)optionsDict resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
306
+ BOOL beaconsTrackingOption = NO;
307
+
299
308
  __block RCTPromiseResolveBlock resolver = resolve;
300
309
  __block RCTPromiseRejectBlock rejecter = reject;
301
310
 
@@ -318,16 +327,26 @@ RCT_EXPORT_METHOD(trackVerified:(RCTPromiseResolveBlock)resolve reject:(RCTPromi
318
327
  }
319
328
  resolver = nil;
320
329
  rejecter = nil;
321
- };
330
+ };
331
+
332
+ if (optionsDict != nil) {
333
+ BOOL beacons = optionsDict[@"beacons"];
322
334
 
323
- [Radar trackVerifiedWithCompletionHandler:completionHandler];
335
+ if (beacons) {
336
+ beaconsTrackingOption = beacons;
337
+ }
338
+ }
339
+
340
+ [Radar trackVerifiedWithBeacons:beaconsTrackingOption completionHandler:completionHandler];
324
341
  }
325
342
 
326
- RCT_EXPORT_METHOD(trackVerifiedToken:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
327
- __block RCTPromiseResolveBlock resolver = resolve;
328
- __block RCTPromiseRejectBlock rejecter = reject;
343
+ RCT_EXPORT_METHOD(trackVerifiedToken:(NSDictionary *)optionsDict resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
344
+ BOOL beaconsTrackingOption = NO;
345
+
346
+ __block RCTPromiseResolveBlock resolver = resolve;
347
+ __block RCTPromiseRejectBlock rejecter = reject;
329
348
 
330
- RadarTrackTokenCompletionHandler completionHandler = ^(RadarStatus status, NSString * _Nullable token) {
349
+ RadarTrackTokenCompletionHandler completionHandler = ^(RadarStatus status, NSString * _Nullable token) {
331
350
  if (status == RadarStatusSuccess && resolver) {
332
351
  NSMutableDictionary *dict = [NSMutableDictionary new];
333
352
  [dict setObject:[Radar stringForStatus:status] forKey:@"status"];
@@ -340,9 +359,17 @@ RCT_EXPORT_METHOD(trackVerifiedToken:(RCTPromiseResolveBlock)resolve reject:(RCT
340
359
  }
341
360
  resolver = nil;
342
361
  rejecter = nil;
343
- };
362
+ };
363
+
364
+ if (optionsDict != nil) {
365
+ BOOL beacons = optionsDict[@"beacons"];
344
366
 
345
- [Radar trackVerifiedTokenWithCompletionHandler:completionHandler];
367
+ if (beacons) {
368
+ beaconsTrackingOption = beacons;
369
+ }
370
+ }
371
+
372
+ [Radar trackVerifiedTokenWithBeacons:beaconsTrackingOption completionHandler:completionHandler];
346
373
  }
347
374
 
348
375
  RCT_EXPORT_METHOD(startTrackingEfficient) {
@@ -362,6 +389,29 @@ RCT_EXPORT_METHOD(startTrackingCustom:(NSDictionary *)optionsDict) {
362
389
  [Radar startTrackingWithOptions:options];
363
390
  }
364
391
 
392
+ RCT_EXPORT_METHOD(startTrackingVerified:(NSDictionary *)optionsDict) {
393
+ BOOL tokenTrackingOption = NO;
394
+ BOOL beaconTrackingOption = NO;
395
+ double interval = 1;
396
+
397
+ if (optionsDict != nil) {
398
+ BOOL token = optionsDict[@"token"];
399
+ if (token) {
400
+ tokenTrackingOption = token;
401
+ }
402
+ BOOL beacons = optionsDict[@"beacons"];
403
+ if (beacons) {
404
+ beaconTrackingOption = beacons;
405
+ }
406
+ NSNumber *intervalNumber = optionsDict[@"interval"];
407
+ if (intervalNumber != nil && [intervalNumber isKindOfClass:[NSNumber class]]) {
408
+ interval = [intervalNumber doubleValue];
409
+ }
410
+ }
411
+
412
+ [Radar startTrackingVerified:tokenTrackingOption interval:interval beacons:beaconTrackingOption];
413
+ }
414
+
365
415
  RCT_EXPORT_METHOD(mockTracking:(NSDictionary *)optionsDict) {
366
416
  if (optionsDict == nil) {
367
417
  return;
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.10.0-beta.4",
6
+ "version": "3.10.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.9.3"
18
+ s.dependency "RadarSDK", "~> 3.9.6"
19
19
  end
@@ -3,6 +3,7 @@ import {
3
3
  RadarAutocompleteOptions,
4
4
  RadarContextCallback,
5
5
  RadarAddressCallback,
6
+ RadarEventChannel,
6
7
  RadarGetDistanceOptions,
7
8
  RadarLocationCallback,
8
9
  RadarLogConversionCallback,
@@ -24,10 +25,11 @@ import {
24
25
  RadarTrackingOptions,
25
26
  RadarTrackingOptionsDesiredAccuracy,
26
27
  RadarTrackingOptionsForegroundService,
28
+ RadarTrackVerifiedOptions,
27
29
  RadarTripCallback,
28
30
  RadarTripOptions,
29
31
  RadarUpdateTripOptions,
30
- Event,
32
+ RadarVerifiedTrackingOptions,
31
33
  RadarListenerCallback,
32
34
  RadarGetMatrixOptions,
33
35
  RadarMetadata,
@@ -52,12 +54,13 @@ export interface RadarNativeInterface {
52
54
  trackOnce: (
53
55
  options?: RadarTrackOnceOptions | Location
54
56
  ) => Promise<RadarTrackCallback>;
55
- trackVerifiedToken: () => Promise<RadarTrackTokenCallback>;
56
- trackVerified: () => Promise<RadarTrackCallback>;
57
+ trackVerifiedToken: (options?: RadarTrackVerifiedOptions) => Promise<RadarTrackTokenCallback>;
58
+ trackVerified: (options?: RadarTrackVerifiedOptions) => Promise<RadarTrackCallback>;
57
59
  startTrackingEfficient: () => void;
58
60
  startTrackingResponsive: () => void;
59
61
  startTrackingContinuous: () => void;
60
62
  startTrackingCustom: (options: RadarTrackingOptions) => void;
63
+ startTrackingVerified: (options?: RadarVerifiedTrackingOptions) => void;
61
64
  mockTracking: (options: RadarMockTrackingOptions) => void;
62
65
  stopTracking: () => void;
63
66
  getTrackingOptions: () => Promise<RadarTrackingOptions>;
@@ -93,8 +96,8 @@ export interface RadarNativeInterface {
93
96
  options: RadarLogConversionOptions
94
97
  ) => Promise<RadarLogConversionCallback>;
95
98
  sendEvent: (name: string, metadata: RadarMetadata) => void;
96
- on: (event: Event, callback: RadarListenerCallback) => void;
97
- off: (event: Event, callback?: Function | undefined) => void;
99
+ on: (channel: RadarEventChannel, callback: RadarListenerCallback) => void;
100
+ off: (channel: RadarEventChannel, callback?: Function | undefined) => void;
98
101
  nativeSdkVersion: () => Promise<string>;
99
102
  rnSdkVersion: () => string;
100
103
  }
@@ -6,6 +6,10 @@ export interface RadarTrackOnceOptions {
6
6
  beacons?: boolean;
7
7
  }
8
8
 
9
+ export interface RadarTrackVerifiedOptions {
10
+ beacons?: boolean;
11
+ }
12
+
9
13
  /**
10
14
  * Options for tracking the user's location.
11
15
  * @see {@link https://radar.com/documentation/sdk/tracking}
@@ -16,16 +20,15 @@ export interface RadarTrackingOptions {
16
20
  desiredMovingUpdateInterval: number;
17
21
  fastestMovingUpdateInterval?: number;
18
22
  desiredSyncInterval: number;
19
- desiredAccuracy: String;
23
+ desiredAccuracy: RadarTrackingOptionsDesiredAccuracy;
20
24
  stopDuration: number;
21
25
  stopDistance: number;
22
- sync: String;
23
- replay: String;
26
+ sync: "all" | "stopsAndExits" | "none";
27
+ replay: "all" | "stops" | "none";
24
28
  useStoppedGeofence: boolean;
25
29
  showBlueBar?: boolean;
26
30
  startTrackingAfter?: number;
27
31
  stopTrackingAfter?: number;
28
- syncLocations?: String;
29
32
  stoppedGeofenceRadius: number;
30
33
  useMovingGeofence: boolean;
31
34
  movingGeofenceRadius: number;
@@ -45,6 +48,12 @@ export interface RadarMockTrackingOptions {
45
48
  interval: number;
46
49
  }
47
50
 
51
+ export interface RadarVerifiedTrackingOptions {
52
+ token?: boolean;
53
+ interval?: number;
54
+ beacons?: boolean;
55
+ }
56
+
48
57
  export interface RadarGetDistanceOptions {
49
58
  origin?: Location;
50
59
  destination?: Location;
@@ -207,7 +216,7 @@ export interface RadarLogConversionCallback {
207
216
 
208
217
  export interface RadarTrackTokenCallback {
209
218
  status: string;
210
- token?: String;
219
+ token?: string;
211
220
  }
212
221
 
213
222
  export interface RadarEventUpdate {
@@ -231,7 +240,7 @@ export interface RadarLocationUpdateCallback {
231
240
  export interface RadarClientLocationUpdate {
232
241
  location: Location;
233
242
  stopped: boolean;
234
- source: string;
243
+ source: RadarLocationSource;
235
244
  }
236
245
 
237
246
  export interface RadarClientLocationUpdateCallback {
@@ -255,12 +264,26 @@ export type RadarListenerCallback =
255
264
 
256
265
  export type RadarPermissionsStatus =
257
266
  | "GRANTED_FOREGROUND"
258
- | "GRANTED_FOREGROUND"
267
+ | "GRANTED_BACKGROUND"
259
268
  | "DENIED"
260
269
  | "NOT_DETERMINED"
261
270
  | "UNKNOWN";
262
271
 
263
- export type Event = "clientLocation" | "location" | "error" | "events" | "log";
272
+ export type RadarLocationSource =
273
+ | "FOREGROUND_LOCATION"
274
+ | "BACKGROUND_LOCATION"
275
+ | "MANUAL_LOCATION"
276
+ | "VISIT_ARRIVAL"
277
+ | "VISIT_DEPARTURE"
278
+ | "GEOFENCE_ENTER"
279
+ | "GEOFENCE_DWELL"
280
+ | "GEOFENCE_EXIT"
281
+ | "MOCK_LOCATION"
282
+ | "BEACON_ENTER"
283
+ | "BEACON_EXIT"
284
+ | "UNKNOWN";
285
+
286
+ export type RadarEventChannel = "clientLocation" | "location" | "error" | "events" | "log" | "token";
264
287
 
265
288
  export type RadarLogLevel = "info" | "debug" | "warning" | "error" | "none";
266
289
 
@@ -331,9 +354,9 @@ export interface RadarTrip {
331
354
  metadata?: RadarMetadata;
332
355
  destinationGeofenceTag?: string;
333
356
  destinationGeofenceExternalId?: string;
334
- mode?: string;
357
+ mode?: RadarRouteMode;
335
358
  eta?: RadarTripEta;
336
- status: string;
359
+ status: RadarTripStatus;
337
360
  scheduledArrivalAt?: Date;
338
361
  destinationLocation: Location;
339
362
  }
@@ -550,7 +573,7 @@ export type RadarTrackingOptionsReplay = "all" | "stops" | "none";
550
573
 
551
574
  export type RadarTrackingOptionsSync = "none" | "stopsAndExits" | "all";
552
575
 
553
- export type RadarRouteMode = "foot" | "bike" | "car";
576
+ export type RadarRouteMode = "foot" | "bike" | "car" | "truck" | "motorbike";
554
577
 
555
578
  export interface RadarTrackingOptionsForegroundService {
556
579
  text?: string;
@@ -6,6 +6,7 @@ import {
6
6
  RadarAutocompleteOptions,
7
7
  RadarContextCallback,
8
8
  RadarAddressCallback,
9
+ RadarEventChannel,
9
10
  RadarGetDistanceOptions,
10
11
  RadarLocationCallback,
11
12
  RadarLogConversionCallback,
@@ -30,11 +31,12 @@ import {
30
31
  RadarTripCallback,
31
32
  RadarTripOptions,
32
33
  RadarUpdateTripOptions,
33
- Event,
34
+ RadarVerifiedTrackingOptions,
34
35
  RadarListenerCallback,
35
36
  RadarGetMatrixOptions,
36
37
  RadarMetadata,
37
38
  RadarIPGeocodeCallback,
39
+ RadarTrackVerifiedOptions,
38
40
  } from "./@types/types";
39
41
 
40
42
  if (
@@ -103,11 +105,11 @@ const trackOnce = (
103
105
  return NativeModules.RNRadar.trackOnce(backCompatibleOptions);
104
106
  };
105
107
 
106
- const trackVerified = (): Promise<RadarTrackCallback> =>
107
- NativeModules.RNRadar.trackVerified();
108
+ const trackVerified = (options?: RadarTrackVerifiedOptions): Promise<RadarTrackCallback> =>
109
+ NativeModules.RNRadar.trackVerified(options);
108
110
 
109
- const trackVerifiedToken = (): Promise<RadarTrackTokenCallback> =>
110
- NativeModules.RNRadar.trackVerifiedToken();
111
+ const trackVerifiedToken = (options?: RadarTrackVerifiedOptions): Promise<RadarTrackTokenCallback> =>
112
+ NativeModules.RNRadar.trackVerifiedToken(options);
111
113
 
112
114
  const startTrackingEfficient = (): void =>
113
115
  NativeModules.RNRadar.startTrackingEfficient();
@@ -121,6 +123,9 @@ const startTrackingContinuous = (): void =>
121
123
  const startTrackingCustom = (options: RadarTrackingOptions): void =>
122
124
  NativeModules.RNRadar.startTrackingCustom(options);
123
125
 
126
+ const startTrackingVerified = (options?: RadarVerifiedTrackingOptions): void =>
127
+ NativeModules.RNRadar.startTrackingVerified(options);
128
+
124
129
  const mockTracking = (options: RadarMockTrackingOptions): void =>
125
130
  NativeModules.RNRadar.mockTracking(options);
126
131
 
@@ -205,15 +210,15 @@ const logConversion = (
205
210
  const sendEvent = (name: string, metadata: RadarMetadata): void =>
206
211
  NativeModules.RNRadar.sendEvent(name, metadata);
207
212
 
208
- const on = (event: Event, callback: RadarListenerCallback): void =>
209
- eventEmitter.addListener(event, callback);
213
+ const on = (channel: RadarEventChannel, callback: RadarListenerCallback): void =>
214
+ eventEmitter.addListener(channel, callback);
210
215
 
211
- const off = (event: Event, callback?: Function | undefined): void => {
216
+ const off = (channel: RadarEventChannel, callback?: Function | undefined): void => {
212
217
  if (callback) {
213
218
  // @ts-ignore
214
- eventEmitter.removeListener(event, callback);
219
+ eventEmitter.removeListener(channel, callback);
215
220
  } else {
216
- eventEmitter.removeAllListeners(event);
221
+ eventEmitter.removeAllListeners(channel);
217
222
  }
218
223
  };
219
224
 
@@ -243,6 +248,7 @@ const Radar: RadarNativeInterface = {
243
248
  startTrackingResponsive,
244
249
  startTrackingContinuous,
245
250
  startTrackingCustom,
251
+ startTrackingVerified,
246
252
  mockTracking,
247
253
  stopTracking,
248
254
  isTracking,