react-native-radar 3.11.0 → 3.12.1

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.11.0'
21
+ versionName '3.12.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.11.0'
48
+ api 'io.radar:sdk:3.13.0'
49
49
  }
50
50
 
@@ -32,11 +32,13 @@ 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;
35
36
  import io.radar.sdk.model.RadarPlace;
36
37
  import io.radar.sdk.model.RadarRouteMatrix;
37
38
  import io.radar.sdk.model.RadarRoutes;
38
39
  import io.radar.sdk.model.RadarTrip;
39
40
  import io.radar.sdk.model.RadarUser;
41
+ import io.radar.sdk.model.RadarVerifiedLocationToken;
40
42
  import io.radar.sdk.RadarNotificationOptions;
41
43
 
42
44
  import org.json.JSONException;
@@ -95,7 +97,7 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
95
97
  this.fraud = fraud;
96
98
  SharedPreferences.Editor editor = getReactApplicationContext().getSharedPreferences("RadarSDK", Context.MODE_PRIVATE).edit();
97
99
  editor.putString("x_platform_sdk_type", "ReactNative");
98
- editor.putString("x_platform_sdk_version", "3.11.0");
100
+ editor.putString("x_platform_sdk_version", "3.12.1");
99
101
  editor.apply();
100
102
  if (fraud) {
101
103
  Radar.initialize(getReactApplicationContext(), publishableKey, receiver, Radar.RadarLocationServicesProvider.GOOGLE, fraud);
@@ -387,9 +389,9 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
387
389
  }
388
390
  }
389
391
 
390
- Radar.RadarTrackCallback trackCallback = new Radar.RadarTrackCallback() {
392
+ Radar.RadarTrackVerifiedCallback trackCallback = new Radar.RadarTrackVerifiedCallback() {
391
393
  @Override
392
- public void onComplete(@NonNull Radar.RadarStatus status, @Nullable Location location, @Nullable RadarEvent[] events, @Nullable RadarUser user) {
394
+ public void onComplete(@NonNull Radar.RadarStatus status, @Nullable RadarVerifiedLocationToken token) {
393
395
  if (promise == null) {
394
396
  return;
395
397
  }
@@ -398,14 +400,8 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
398
400
  if (status == Radar.RadarStatus.SUCCESS) {
399
401
  WritableMap map = Arguments.createMap();
400
402
  map.putString("status", status.toString());
401
- if (location != null) {
402
- map.putMap("location", RNRadarUtils.mapForJson(Radar.jsonForLocation(location)));
403
- }
404
- if (events != null) {
405
- map.putArray("events", RNRadarUtils.arrayForJson(RadarEvent.toJson(events)));
406
- }
407
- if (user != null) {
408
- map.putMap("user", RNRadarUtils.mapForJson(user.toJson()));
403
+ if (token != null) {
404
+ map.putMap("token", RNRadarUtils.mapForJson(token.toJson()));
409
405
  }
410
406
  promise.resolve(map);
411
407
  } else {
@@ -422,19 +418,10 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
422
418
  }
423
419
 
424
420
  @ReactMethod
425
- public void trackVerifiedToken(ReadableMap optionsMap, final Promise promise) {
426
-
427
- boolean beaconsTrackingOption = false;
428
-
429
- if (optionsMap != null) {
430
- if (optionsMap.hasKey("beacons")) {
431
- beaconsTrackingOption = optionsMap.getBoolean("beacons");
432
- }
433
- }
434
-
435
- Radar.RadarTrackTokenCallback trackTokenCallback = new Radar.RadarTrackTokenCallback() {
421
+ public void getVerifiedLocationToken(final Promise promise) {
422
+ Radar.RadarTrackVerifiedCallback trackCallback = new Radar.RadarTrackVerifiedCallback() {
436
423
  @Override
437
- public void onComplete(@NonNull Radar.RadarStatus status, @Nullable String token) {
424
+ public void onComplete(@NonNull Radar.RadarStatus status, @Nullable RadarVerifiedLocationToken token) {
438
425
  if (promise == null) {
439
426
  return;
440
427
  }
@@ -444,20 +431,20 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
444
431
  WritableMap map = Arguments.createMap();
445
432
  map.putString("status", status.toString());
446
433
  if (token != null) {
447
- map.putString("token", token);
434
+ map.putMap("token", RNRadarUtils.mapForJson(token.toJson()));
448
435
  }
449
436
  promise.resolve(map);
450
437
  } else {
451
438
  promise.reject(status.toString(), status.toString());
452
439
  }
453
- } catch (Exception e) {
454
- Log.e(TAG, "Exception", e);
440
+ } catch (JSONException e) {
441
+ Log.e(TAG, "JSONException", e);
455
442
  promise.reject(Radar.RadarStatus.ERROR_SERVER.toString(), Radar.RadarStatus.ERROR_SERVER.toString());
456
443
  }
457
444
  }
458
445
  };
459
446
 
460
- Radar.trackVerifiedToken(beaconsTrackingOption, trackTokenCallback);
447
+ Radar.getVerifiedLocationToken(trackCallback);
461
448
  }
462
449
 
463
450
  @ReactMethod
@@ -488,17 +475,15 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
488
475
 
489
476
  @ReactMethod
490
477
  public void startTrackingVerified(ReadableMap optionsMap) {
491
- boolean token = false;
492
478
  boolean beacons = false;
493
- int interval = 1;
479
+ int interval = 1200;
494
480
 
495
481
  if (optionsMap != null) {
496
- token = optionsMap.hasKey("token") ? optionsMap.getBoolean("token") : token;
497
482
  beacons = optionsMap.hasKey("beacons") ? optionsMap.getBoolean("beacons") : beacons;
498
483
  interval = optionsMap.hasKey("interval") ? optionsMap.getInt("interval") : interval;
499
484
  }
500
485
 
501
- Radar.startTrackingVerified(token, interval, beacons);
486
+ Radar.startTrackingVerified(interval, beacons);
502
487
  }
503
488
 
504
489
  @ReactMethod
@@ -1022,40 +1007,22 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
1022
1007
  }
1023
1008
 
1024
1009
  @ReactMethod
1025
- public void geocode(String query, final Promise promise) {
1010
+ public void geocode(ReadableMap optionsMap, final Promise promise) {
1026
1011
  if (promise == null) {
1027
1012
  return;
1028
1013
  }
1029
1014
 
1030
- Radar.geocode(query, new Radar.RadarGeocodeCallback() {
1031
- @Override
1032
- public void onComplete(@NonNull Radar.RadarStatus status, @Nullable RadarAddress[] addresses) {
1033
- if (status == Radar.RadarStatus.SUCCESS) {
1034
- try {
1035
- WritableMap map = Arguments.createMap();
1036
- map.putString("status", status.toString());
1037
- if (addresses != null) {
1038
- map.putArray("addresses", RNRadarUtils.arrayForJson(RadarAddress.toJson(addresses)));
1039
- }
1040
- promise.resolve(map);
1041
- } catch (JSONException e) {
1042
- Log.e(TAG, "JSONException", e);
1043
- promise.reject(Radar.RadarStatus.ERROR_SERVER.toString(), Radar.RadarStatus.ERROR_SERVER.toString());
1044
- }
1045
- } else {
1046
- promise.reject(status.toString(), status.toString());
1047
- }
1048
- }
1049
- });
1050
- }
1015
+ if (!optionsMap.hasKey("address")) {
1016
+ promise.reject(Radar.RadarStatus.ERROR_BAD_REQUEST.toString(), Radar.RadarStatus.ERROR_BAD_REQUEST.toString());
1051
1017
 
1052
- @ReactMethod
1053
- public void reverseGeocode(final Promise promise) {
1054
- if (promise == null) {
1055
1018
  return;
1056
1019
  }
1057
1020
 
1058
- Radar.reverseGeocode(new Radar.RadarGeocodeCallback() {
1021
+ String address = optionsMap.getString("address");
1022
+ String[] layers = optionsMap.hasKey("layers") ? RNRadarUtils.stringArrayForArray(optionsMap.getArray("layers")) : null;
1023
+ String[] countries = optionsMap.hasKey("countries") ? RNRadarUtils.stringArrayForArray(optionsMap.getArray("countries")) : null;
1024
+
1025
+ Radar.geocode(address, layers, countries, new Radar.RadarGeocodeCallback() {
1059
1026
  @Override
1060
1027
  public void onComplete(@NonNull Radar.RadarStatus status, @Nullable RadarAddress[] addresses) {
1061
1028
  if (status == Radar.RadarStatus.SUCCESS) {
@@ -1078,24 +1045,20 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
1078
1045
  }
1079
1046
 
1080
1047
  @ReactMethod
1081
- public void reverseGeocode(ReadableMap locationMap, final Promise promise) {
1048
+ public void reverseGeocode(ReadableMap optionsMap, final Promise promise) {
1082
1049
  if (promise == null) {
1083
1050
  return;
1084
1051
  }
1085
1052
 
1086
- if (locationMap == null) {
1087
- this.reverseGeocode(promise);
1053
+ ReadableMap locationMap = null;
1054
+ String[] layers = null;
1088
1055
 
1089
- return;
1056
+ if (optionsMap != null) {
1057
+ locationMap = optionsMap.getMap("location");
1058
+ layers = optionsMap.hasKey("layers") ? RNRadarUtils.stringArrayForArray(optionsMap.getArray("layers")) : null;
1090
1059
  }
1091
1060
 
1092
- double latitude = locationMap.getDouble("latitude");
1093
- double longitude = locationMap.getDouble("longitude");
1094
- Location location = new Location("RNRadarModule");
1095
- location.setLatitude(latitude);
1096
- location.setLongitude(longitude);
1097
-
1098
- Radar.reverseGeocode(location, new Radar.RadarGeocodeCallback() {
1061
+ Radar.RadarGeocodeCallback callback = new Radar.RadarGeocodeCallback() {
1099
1062
  @Override
1100
1063
  public void onComplete(@NonNull Radar.RadarStatus status, @Nullable RadarAddress[] addresses) {
1101
1064
  if (status == Radar.RadarStatus.SUCCESS) {
@@ -1114,7 +1077,19 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
1114
1077
  promise.reject(status.toString(), status.toString());
1115
1078
  }
1116
1079
  }
1117
- });
1080
+ };
1081
+
1082
+ if (locationMap != null) {
1083
+ double latitude = locationMap.getDouble("latitude");
1084
+ double longitude = locationMap.getDouble("longitude");
1085
+ Location location = new Location("RNRadarModule");
1086
+ location.setLatitude(latitude);
1087
+ location.setLongitude(longitude);
1088
+
1089
+ Radar.reverseGeocode(location, layers, callback);
1090
+ } else {
1091
+ Radar.reverseGeocode(layers, callback);
1092
+ }
1118
1093
  }
1119
1094
 
1120
1095
  @ReactMethod
@@ -1330,4 +1305,32 @@ public class RNRadarModule extends ReactContextBaseJavaModule implements Permiss
1330
1305
  }
1331
1306
  }
1332
1307
 
1308
+ @ReactMethod
1309
+ public void requestForegroundLocationPermission() {
1310
+ Radar.requestForegroundLocationPermission();
1311
+ }
1312
+
1313
+ @ReactMethod
1314
+ public void requestBackgroundLocationPermission() {
1315
+ Radar.requestBackgroundLocationPermission();
1316
+ }
1317
+
1318
+ @ReactMethod
1319
+ public void getLocationPermissionStatus(final Promise promise) {
1320
+ if (promise == null) {
1321
+ return;
1322
+ }
1323
+ try {
1324
+ RadarLocationPermissionStatus options = Radar.getLocationPermissionStatus();
1325
+ promise.resolve(RNRadarUtils.mapForJson(options.toJson()));
1326
+ } catch(JSONException e) {
1327
+ Log.e(TAG, "JSONException", e);
1328
+ promise.reject(Radar.RadarStatus.ERROR_SERVER.toString(), Radar.RadarStatus.ERROR_SERVER.toString());
1329
+ }
1330
+ }
1331
+
1332
+ @ReactMethod
1333
+ public void openAppSettings() {
1334
+ Radar.openAppSettings();
1335
+ }
1333
1336
  }
@@ -20,6 +20,7 @@ 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;
23
24
  import java.util.concurrent.atomic.AtomicInteger;
24
25
 
25
26
  public class RNRadarReceiver extends RadarReceiver {
@@ -111,4 +112,16 @@ public class RNRadarReceiver extends RadarReceiver {
111
112
  }
112
113
  }
113
114
 
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
+
114
127
  }
@@ -16,6 +16,7 @@ import com.facebook.react.modules.core.DeviceEventManagerModule;
16
16
 
17
17
  import io.radar.sdk.Radar;
18
18
  import io.radar.sdk.RadarVerifiedReceiver;
19
+ import io.radar.sdk.model.RadarVerifiedLocationToken;
19
20
 
20
21
  public class RNRadarVerifiedReceiver extends RadarVerifiedReceiver {
21
22
 
@@ -32,12 +33,12 @@ public class RNRadarVerifiedReceiver extends RadarVerifiedReceiver {
32
33
  }
33
34
 
34
35
  @Override
35
- public void onTokenUpdated(@NonNull Context context, @NonNull String token) {
36
+ public void onTokenUpdated(@NonNull Context context, @NonNull RadarVerifiedLocationToken token) {
36
37
  try {
37
38
  ReactApplication reactApplication = ((ReactApplication)context.getApplicationContext());
38
39
  reactNativeHost = reactApplication.getReactNativeHost();
39
40
 
40
- sendEvent("token", token);
41
+ sendEvent("token", RNRadarUtils.mapForJson(token.toJson()));
41
42
  } catch (Exception e) {
42
43
  Log.e(TAG, "Exception", e);
43
44
  }
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.11.0",
6
+ "version": "3.12.1",
7
7
  "main": "dist/src/index.js",
8
8
  "files": [
9
9
  "android",
@@ -27,6 +27,10 @@
27
27
  "reporters": [
28
28
  "default",
29
29
  "jest-junit"
30
+ ],
31
+ "modulePathIgnorePatterns": [
32
+ "example",
33
+ "example2"
30
34
  ]
31
35
  },
32
36
  "peerDependencies": {
@@ -1,4 +1,4 @@
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";
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;
@@ -13,8 +13,8 @@ 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: (options?: RadarTrackVerifiedOptions) => Promise<RadarTrackTokenCallback>;
17
- trackVerified: (options?: RadarTrackVerifiedOptions) => Promise<RadarTrackCallback>;
16
+ trackVerified: (options?: RadarTrackVerifiedOptions) => Promise<RadarTrackVerifiedCallback>;
17
+ getVerifiedLocationToken: () => Promise<RadarTrackVerifiedCallback>;
18
18
  startTrackingEfficient: () => void;
19
19
  startTrackingResponsive: () => void;
20
20
  startTrackingContinuous: () => void;
@@ -38,8 +38,8 @@ export interface RadarNativeInterface {
38
38
  searchPlaces: (options: RadarSearchPlacesOptions) => Promise<RadarSearchPlacesCallback>;
39
39
  searchGeofences: (options: RadarSearchGeofencesOptions) => Promise<RadarSearchGeofencesCallback>;
40
40
  autocomplete: (options: RadarAutocompleteOptions) => Promise<RadarAddressCallback>;
41
- geocode: (address: string) => Promise<RadarAddressCallback>;
42
- reverseGeocode: (location: any) => Promise<RadarAddressCallback>;
41
+ geocode: (options: RadarGeocodeOptions) => Promise<RadarAddressCallback>;
42
+ reverseGeocode: (options?: RadarReverseGeocodeOptions) => Promise<RadarAddressCallback>;
43
43
  ipGeocode: () => Promise<RadarIPGeocodeCallback>;
44
44
  getDistance: (option: RadarGetDistanceOptions) => Promise<RadarRouteCallback>;
45
45
  getMatrix: (option: RadarGetMatrixOptions) => Promise<RadarRouteMatrix>;
@@ -53,10 +53,17 @@ export interface RadarMockTrackingOptions {
53
53
  interval: number;
54
54
  }
55
55
  export interface RadarVerifiedTrackingOptions {
56
- token?: boolean;
57
56
  interval?: number;
58
57
  beacons?: boolean;
59
58
  }
59
+ export interface RadarVerifiedLocationToken {
60
+ user: RadarUser;
61
+ events: RadarEvent[];
62
+ token: string;
63
+ expiresAt: Date;
64
+ expiresIn: number;
65
+ passed: boolean;
66
+ }
60
67
  export interface RadarGetDistanceOptions {
61
68
  origin?: Location;
62
69
  destination?: Location;
@@ -115,6 +122,15 @@ export interface RadarAutocompleteOptions {
115
122
  expandUnits?: boolean;
116
123
  mailable?: boolean;
117
124
  }
125
+ export interface RadarGeocodeOptions {
126
+ address: string;
127
+ layers?: string[];
128
+ countries?: string[];
129
+ }
130
+ export interface RadarReverseGeocodeOptions {
131
+ location?: Location;
132
+ layers?: string[];
133
+ }
118
134
  export interface RadarNotificationOptions {
119
135
  iconString?: string;
120
136
  iconColor?: string;
@@ -195,9 +211,9 @@ export interface RadarLogConversionCallback {
195
211
  status: string;
196
212
  event?: RadarEvent;
197
213
  }
198
- export interface RadarTrackTokenCallback {
214
+ export interface RadarTrackVerifiedCallback {
199
215
  status: string;
200
- token?: string;
216
+ token?: RadarVerifiedLocationToken;
201
217
  }
202
218
  export interface RadarEventUpdate {
203
219
  user?: RadarUser;
@@ -227,10 +243,13 @@ export interface RadarErrorCallback {
227
243
  export interface RadarLogUpdateCallback {
228
244
  (status: string): void;
229
245
  }
230
- export type RadarListenerCallback = RadarEventUpdateCallback | RadarLocationUpdateCallback | RadarClientLocationUpdateCallback | RadarErrorCallback | RadarLogUpdateCallback;
246
+ export interface RadarLocationPermissionStatusCallback {
247
+ (status: RadarLocationPermissionStatus): void;
248
+ }
249
+ export type RadarListenerCallback = RadarEventUpdateCallback | RadarLocationUpdateCallback | RadarClientLocationUpdateCallback | RadarErrorCallback | RadarLogUpdateCallback | RadarLocationPermissionStatusCallback;
231
250
  export type RadarPermissionsStatus = "GRANTED_FOREGROUND" | "GRANTED_BACKGROUND" | "DENIED" | "NOT_DETERMINED" | "UNKNOWN";
232
251
  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";
233
- export type RadarEventChannel = "clientLocation" | "location" | "error" | "events" | "log" | "token";
252
+ export type RadarEventChannel = "clientLocation" | "location" | "error" | "events" | "log" | "token" | "locationPermissionStatus";
234
253
  export type RadarLogLevel = "info" | "debug" | "warning" | "error" | "none";
235
254
  export interface RadarRouteMatrix {
236
255
  status: string;
@@ -472,3 +491,24 @@ export interface RadarTrackingOptionsForegroundService {
472
491
  iconColor?: string;
473
492
  }
474
493
  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" | "PERMISSION_RESTRICTED" | "UNKNOWN";
514
+ export type LocationManagerStatus = "NotDetermined" | "Restricted" | "Denied" | "AuthorizedAlways" | "AuthorizedWhenInUse" | "Unknown";
@@ -39,7 +39,7 @@ const trackOnce = (options) => {
39
39
  return react_native_1.NativeModules.RNRadar.trackOnce(backCompatibleOptions);
40
40
  };
41
41
  const trackVerified = (options) => react_native_1.NativeModules.RNRadar.trackVerified(options);
42
- const trackVerifiedToken = (options) => react_native_1.NativeModules.RNRadar.trackVerifiedToken(options);
42
+ const getVerifiedLocationToken = () => react_native_1.NativeModules.RNRadar.getVerifiedLocationToken();
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();
@@ -63,8 +63,8 @@ const getContext = (location) => react_native_1.NativeModules.RNRadar.getContext
63
63
  const searchPlaces = (options) => react_native_1.NativeModules.RNRadar.searchPlaces(options);
64
64
  const searchGeofences = (options) => react_native_1.NativeModules.RNRadar.searchGeofences(options);
65
65
  const autocomplete = (options) => react_native_1.NativeModules.RNRadar.autocomplete(options);
66
- const geocode = (address) => react_native_1.NativeModules.RNRadar.geocode(address);
67
- const reverseGeocode = (location) => react_native_1.NativeModules.RNRadar.reverseGeocode(location);
66
+ const geocode = (options) => react_native_1.NativeModules.RNRadar.geocode(options);
67
+ const reverseGeocode = (options) => react_native_1.NativeModules.RNRadar.reverseGeocode(options);
68
68
  const ipGeocode = () => react_native_1.NativeModules.RNRadar.ipGeocode();
69
69
  const getDistance = (options) => react_native_1.NativeModules.RNRadar.getDistance(options);
70
70
  const getMatrix = (options) => react_native_1.NativeModules.RNRadar.getMatrix(options);
@@ -98,7 +98,7 @@ const Radar = {
98
98
  getLocation,
99
99
  trackOnce,
100
100
  trackVerified,
101
- trackVerifiedToken,
101
+ getVerifiedLocationToken,
102
102
  startTrackingEfficient,
103
103
  startTrackingResponsive,
104
104
  startTrackingContinuous,
@@ -1 +1 @@
1
- github "radarlabs/radar-sdk-ios" "3.11.0"
1
+ github "radarlabs/radar-sdk-ios" "3.13.1"
package/ios/RNRadar.m CHANGED
@@ -1,4 +1,5 @@
1
1
  #import "RNRadar.h"
2
+ #include <Foundation/Foundation.h>
2
3
 
3
4
  #import <CoreLocation/CoreLocation.h>
4
5
  #import <React/RCTConvert.h>
@@ -23,6 +24,36 @@ RCT_EXPORT_MODULE();
23
24
  return self;
24
25
  }
25
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 = @"FOREGROUND_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
+
26
57
  - (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
27
58
  if (permissionsRequestResolver) {
28
59
  [self getPermissionsStatusWithResolver:permissionsRequestResolver rejecter:nil];
@@ -92,15 +123,21 @@ RCT_EXPORT_MODULE();
92
123
  }
93
124
  }
94
125
 
95
- - (void)didUpdateToken:(NSString *)token {
126
+ - (void)didUpdateToken:(RadarVerifiedLocationToken *)token {
127
+ if (hasListeners) {
128
+ [self sendEventWithName:@"token" body:[token dictionaryValue]];
129
+ }
130
+ }
131
+
132
+ - (void)didUpdateLocationPermissionStatus:(RadarLocationPermissionStatus *)status {
96
133
  if (hasListeners) {
97
- [self sendEventWithName:@"token" body:token];
134
+ [self sendEventWithName:@"locationPermissionStatus" body:[RNRadar mapLocationPermissionStatus:[status dictionaryValue]]];
98
135
  }
99
136
  }
100
137
 
101
138
  RCT_EXPORT_METHOD(initialize:(NSString *)publishableKey fraud:(BOOL)fraud) {
102
139
  [[NSUserDefaults standardUserDefaults] setObject:@"ReactNative" forKey:@"radar-xPlatformSDKType"];
103
- [[NSUserDefaults standardUserDefaults] setObject:@"3.11.0" forKey:@"radar-xPlatformSDKVersion"];
140
+ [[NSUserDefaults standardUserDefaults] setObject:@"3.12.1" forKey:@"radar-xPlatformSDKVersion"];
104
141
  [Radar initializeWithPublishableKey:publishableKey];
105
142
  }
106
143
 
@@ -315,18 +352,12 @@ RCT_EXPORT_METHOD(trackVerified:(NSDictionary *)optionsDict resolve:(RCTPromiseR
315
352
  __block RCTPromiseResolveBlock resolver = resolve;
316
353
  __block RCTPromiseRejectBlock rejecter = reject;
317
354
 
318
- RadarTrackCompletionHandler completionHandler = ^(RadarStatus status, CLLocation * _Nullable location, NSArray<RadarEvent *> * _Nullable events, RadarUser * _Nullable user) {
355
+ RadarTrackVerifiedCompletionHandler completionHandler = ^(RadarStatus status, RadarVerifiedLocationToken * _Nullable token) {
319
356
  if (status == RadarStatusSuccess && resolver) {
320
357
  NSMutableDictionary *dict = [NSMutableDictionary new];
321
358
  [dict setObject:[Radar stringForStatus:status] forKey:@"status"];
322
- if (location) {
323
- [dict setObject:[Radar dictionaryForLocation:location] forKey:@"location"];
324
- }
325
- if (events) {
326
- [dict setObject:[RadarEvent arrayForEvents:events] forKey:@"events"];
327
- }
328
- if (user) {
329
- [dict setObject:[user dictionaryValue] forKey:@"user"];
359
+ if (token != nil) {
360
+ [dict setObject:[token dictionaryValue] forKey:@"token"];
330
361
  }
331
362
  resolver(dict);
332
363
  } else if (rejecter) {
@@ -339,24 +370,16 @@ RCT_EXPORT_METHOD(trackVerified:(NSDictionary *)optionsDict resolve:(RCTPromiseR
339
370
  [Radar trackVerifiedWithBeacons:beacons completionHandler:completionHandler];
340
371
  }
341
372
 
342
- RCT_EXPORT_METHOD(trackVerifiedToken:(NSDictionary *)optionsDict resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
343
- BOOL beacons = NO;
344
- if (optionsDict != nil) {
345
- NSNumber *beaconsNumber = optionsDict[@"beacons"];
346
- if (beaconsNumber != nil && [beaconsNumber isKindOfClass:[NSNumber class]]) {
347
- beacons = [beaconsNumber boolValue];
348
- }
349
- }
350
-
373
+ RCT_EXPORT_METHOD(getVerifiedLocationToken:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
351
374
  __block RCTPromiseResolveBlock resolver = resolve;
352
375
  __block RCTPromiseRejectBlock rejecter = reject;
353
376
 
354
- RadarTrackTokenCompletionHandler completionHandler = ^(RadarStatus status, NSString * _Nullable token) {
377
+ RadarTrackVerifiedCompletionHandler completionHandler = ^(RadarStatus status, RadarVerifiedLocationToken * _Nullable token) {
355
378
  if (status == RadarStatusSuccess && resolver) {
356
379
  NSMutableDictionary *dict = [NSMutableDictionary new];
357
380
  [dict setObject:[Radar stringForStatus:status] forKey:@"status"];
358
- if (token) {
359
- [dict setObject:token forKey:@"token"];
381
+ if (token != nil) {
382
+ [dict setObject:[token dictionaryValue] forKey:@"token"];
360
383
  }
361
384
  resolver(dict);
362
385
  } else if (rejecter) {
@@ -366,7 +389,7 @@ RCT_EXPORT_METHOD(trackVerifiedToken:(NSDictionary *)optionsDict resolve:(RCTPro
366
389
  rejecter = nil;
367
390
  };
368
391
 
369
- [Radar trackVerifiedTokenWithBeacons:beacons completionHandler:completionHandler];
392
+ [Radar getVerifiedLocationToken:completionHandler];
370
393
  }
371
394
 
372
395
  RCT_EXPORT_METHOD(startTrackingEfficient) {
@@ -389,13 +412,9 @@ RCT_EXPORT_METHOD(startTrackingCustom:(NSDictionary *)optionsDict) {
389
412
  RCT_EXPORT_METHOD(startTrackingVerified:(NSDictionary *)optionsDict) {
390
413
  BOOL token = NO;
391
414
  BOOL beacons = NO;
392
- double interval = 1;
415
+ double interval = 1200;
393
416
 
394
417
  if (optionsDict != nil) {
395
- NSNumber *tokenNumber = optionsDict[@"token"];
396
- if (tokenNumber != nil && [tokenNumber isKindOfClass:[NSNumber class]]) {
397
- token = [tokenNumber boolValue];
398
- }
399
418
  NSNumber *beaconsNumber = optionsDict[@"beacons"];
400
419
  if (beaconsNumber != nil && [beaconsNumber isKindOfClass:[NSNumber class]]) {
401
420
  beacons = [beaconsNumber boolValue];
@@ -406,7 +425,7 @@ RCT_EXPORT_METHOD(startTrackingVerified:(NSDictionary *)optionsDict) {
406
425
  }
407
426
  }
408
427
 
409
- [Radar startTrackingVerified:token interval:interval beacons:beacons];
428
+ [Radar startTrackingVerifiedWithInterval:interval beacons:beacons];
410
429
  }
411
430
 
412
431
  RCT_EXPORT_METHOD(mockTracking:(NSDictionary *)optionsDict) {
@@ -494,7 +513,11 @@ RCT_EXPORT_METHOD(getTripOptions:(RCTPromiseResolveBlock)resolve reject:(RCTProm
494
513
  }
495
514
 
496
515
  RadarTripOptions* options = [Radar getTripOptions];
497
- resolve([options dictionaryValue]);
516
+ if (options != nil) {
517
+ resolve([options dictionaryValue]);
518
+ } else {
519
+ resolve(nil);
520
+ }
498
521
  }
499
522
 
500
523
  RCT_EXPORT_METHOD(startTrip:(NSDictionary *)optionsDict resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
@@ -873,11 +896,23 @@ RCT_EXPORT_METHOD(autocomplete:(NSDictionary *)optionsDict resolve:(RCTPromiseRe
873
896
  }];
874
897
  }
875
898
 
876
- RCT_EXPORT_METHOD(geocode:(NSString *)query resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
899
+ RCT_EXPORT_METHOD(geocode:(NSDictionary *)optionsDict resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
900
+ if (optionsDict[@"address"] == nil) {
901
+ if (reject) {
902
+ reject([Radar stringForStatus:RadarStatusErrorBadRequest], [Radar stringForStatus:RadarStatusErrorBadRequest], nil);
903
+ }
904
+
905
+ return;
906
+ }
907
+
908
+ NSString *query = optionsDict[@"address"];
909
+ NSArray *layers = optionsDict[@"layers"];
910
+ NSArray *countries = optionsDict[@"countries"];
911
+
877
912
  __block RCTPromiseResolveBlock resolver = resolve;
878
913
  __block RCTPromiseRejectBlock rejecter = reject;
879
914
 
880
- [Radar geocodeAddress:query completionHandler:^(RadarStatus status, NSArray<RadarAddress *> * _Nullable addresses) {
915
+ [Radar geocodeAddress:query layers:layers countries:countries completionHandler:^(RadarStatus status, NSArray<RadarAddress *> * _Nullable addresses) {
881
916
  if (status == RadarStatusSuccess && resolver) {
882
917
  NSMutableDictionary *dict = [NSMutableDictionary new];
883
918
  [dict setObject:[Radar stringForStatus:status] forKey:@"status"];
@@ -893,13 +928,13 @@ RCT_EXPORT_METHOD(geocode:(NSString *)query resolve:(RCTPromiseResolveBlock)reso
893
928
  }];
894
929
  }
895
930
 
896
- RCT_EXPORT_METHOD(reverseGeocode:(NSDictionary *)locationDict resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
897
- CLLocation *location;
898
- if (locationDict != nil && [locationDict isKindOfClass:[NSDictionary class]]) {
899
- double latitude = [RCTConvert double:locationDict[@"latitude"]];
900
- double longitude = [RCTConvert double:locationDict[@"longitude"]];
901
- NSDate *timestamp = [NSDate new];
902
- location = [[CLLocation alloc] initWithCoordinate:CLLocationCoordinate2DMake(latitude, longitude) altitude:-1 horizontalAccuracy:5 verticalAccuracy:-1 timestamp:timestamp];
931
+ RCT_EXPORT_METHOD(reverseGeocode:(NSDictionary *)optionsDict resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
932
+ NSDictionary *locationDict = nil;
933
+ NSArray *layers = nil;
934
+
935
+ if (optionsDict != nil) {
936
+ locationDict = optionsDict[@"location"];
937
+ layers = optionsDict[@"layers"];
903
938
  }
904
939
 
905
940
  __block RCTPromiseResolveBlock resolver = resolve;
@@ -920,10 +955,18 @@ RCT_EXPORT_METHOD(reverseGeocode:(NSDictionary *)locationDict resolve:(RCTPromis
920
955
  rejecter = nil;
921
956
  };
922
957
 
923
- if (location) {
924
- [Radar reverseGeocodeLocation:location completionHandler:completionHandler];
958
+ if (locationDict != nil && [locationDict isKindOfClass:[NSDictionary class]]) {
959
+ double latitude = [RCTConvert double:locationDict[@"latitude"]];
960
+ double longitude = [RCTConvert double:locationDict[@"longitude"]];
961
+ NSDate *timestamp = [NSDate new];
962
+ CLLocation *location = [[CLLocation alloc] initWithCoordinate:CLLocationCoordinate2DMake(latitude, longitude)
963
+ altitude:-1
964
+ horizontalAccuracy:5
965
+ verticalAccuracy:-1
966
+ timestamp:timestamp];
967
+ [Radar reverseGeocodeLocation:location layers:layers completionHandler:completionHandler];
925
968
  } else {
926
- [Radar reverseGeocodeWithCompletionHandler:completionHandler];
969
+ [Radar reverseGeocodeWithLayers:layers completionHandler:completionHandler];
927
970
  }
928
971
  }
929
972
 
@@ -1137,4 +1180,22 @@ RCT_EXPORT_METHOD(logConversion:(NSDictionary *)optionsDict resolve:(RCTPromiseR
1137
1180
  [Radar logConversionWithName:name revenue:revenue metadata:metadata completionHandler:completionHandler];
1138
1181
  }
1139
1182
  }
1183
+
1184
+ RCT_EXPORT_METHOD(requestForegroundLocationPermission) {
1185
+ [Radar requestForegroundLocationPermission];
1186
+ }
1187
+
1188
+ RCT_EXPORT_METHOD(requestBackgroundLocationPermission) {
1189
+ [Radar requestBackgroundLocationPermission];
1190
+ }
1191
+
1192
+ RCT_EXPORT_METHOD(getLocationPermissionStatus:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) {
1193
+ RadarLocationPermissionStatus* status = [Radar getLocationPermissionStatus];
1194
+ resolve([RNRadar mapLocationPermissionStatus:[status dictionaryValue]]);
1195
+ }
1196
+
1197
+ RCT_EXPORT_METHOD(openAppSettings) {
1198
+ [Radar openAppSettings];
1199
+ }
1200
+
1140
1201
  @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.11.0",
6
+ "version": "3.12.1",
7
7
  "main": "dist/src/index.js",
8
8
  "files": [
9
9
  "android",
@@ -27,6 +27,10 @@
27
27
  "reporters": [
28
28
  "default",
29
29
  "jest-junit"
30
+ ],
31
+ "modulePathIgnorePatterns": [
32
+ "example",
33
+ "example2"
30
34
  ]
31
35
  },
32
36
  "peerDependencies": {
@@ -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.11.0"
18
+ s.dependency "RadarSDK", "~> 3.13.1"
19
19
  end
@@ -4,6 +4,7 @@ import {
4
4
  RadarContextCallback,
5
5
  RadarAddressCallback,
6
6
  RadarEventChannel,
7
+ RadarGeocodeOptions,
7
8
  RadarGetDistanceOptions,
8
9
  RadarLocationCallback,
9
10
  RadarLogConversionCallback,
@@ -12,6 +13,7 @@ import {
12
13
  RadarMockTrackingOptions,
13
14
  RadarNotificationOptions,
14
15
  RadarPermissionsStatus,
16
+ RadarReverseGeocodeOptions,
15
17
  RadarRouteCallback,
16
18
  RadarRouteMatrix,
17
19
  RadarSearchGeofencesCallback,
@@ -21,7 +23,7 @@ import {
21
23
  RadarStartTripOptions,
22
24
  RadarTrackCallback,
23
25
  RadarTrackOnceOptions,
24
- RadarTrackTokenCallback,
26
+ RadarTrackVerifiedCallback,
25
27
  RadarTrackingOptions,
26
28
  RadarTrackingOptionsDesiredAccuracy,
27
29
  RadarTrackingOptionsForegroundService,
@@ -34,6 +36,7 @@ import {
34
36
  RadarGetMatrixOptions,
35
37
  RadarMetadata,
36
38
  RadarIPGeocodeCallback,
39
+ RadarLocationPermissionStatus,
37
40
  } from "./types";
38
41
 
39
42
  export interface RadarNativeInterface {
@@ -54,8 +57,8 @@ export interface RadarNativeInterface {
54
57
  trackOnce: (
55
58
  options?: RadarTrackOnceOptions | Location
56
59
  ) => Promise<RadarTrackCallback>;
57
- trackVerifiedToken: (options?: RadarTrackVerifiedOptions) => Promise<RadarTrackTokenCallback>;
58
- trackVerified: (options?: RadarTrackVerifiedOptions) => Promise<RadarTrackCallback>;
60
+ trackVerified: (options?: RadarTrackVerifiedOptions) => Promise<RadarTrackVerifiedCallback>;
61
+ getVerifiedLocationToken: () => Promise<RadarTrackVerifiedCallback>;
59
62
  startTrackingEfficient: () => void;
60
63
  startTrackingResponsive: () => void;
61
64
  startTrackingContinuous: () => void;
@@ -87,8 +90,8 @@ export interface RadarNativeInterface {
87
90
  autocomplete: (
88
91
  options: RadarAutocompleteOptions
89
92
  ) => Promise<RadarAddressCallback>;
90
- geocode: (address: string) => Promise<RadarAddressCallback>;
91
- reverseGeocode: (location: any) => Promise<RadarAddressCallback>;
93
+ geocode: (options: RadarGeocodeOptions) => Promise<RadarAddressCallback>;
94
+ reverseGeocode: (options?: RadarReverseGeocodeOptions) => Promise<RadarAddressCallback>;
92
95
  ipGeocode: () => Promise<RadarIPGeocodeCallback>;
93
96
  getDistance: (option: RadarGetDistanceOptions) => Promise<RadarRouteCallback>;
94
97
  getMatrix: (option: RadarGetMatrixOptions) => Promise<RadarRouteMatrix>;
@@ -195,11 +195,19 @@ export interface RadarMockTrackingOptions {
195
195
  }
196
196
 
197
197
  export interface RadarVerifiedTrackingOptions {
198
- token?: boolean;
199
198
  interval?: number;
200
199
  beacons?: boolean;
201
200
  }
202
201
 
202
+ export interface RadarVerifiedLocationToken {
203
+ user: RadarUser;
204
+ events: RadarEvent[];
205
+ token: string;
206
+ expiresAt: Date;
207
+ expiresIn: number;
208
+ passed: boolean;
209
+ }
210
+
203
211
  export interface RadarGetDistanceOptions {
204
212
  origin?: Location;
205
213
  destination?: Location;
@@ -266,6 +274,17 @@ export interface RadarAutocompleteOptions {
266
274
  mailable?: boolean;
267
275
  }
268
276
 
277
+ export interface RadarGeocodeOptions {
278
+ address: string;
279
+ layers?: string[];
280
+ countries?: string[];
281
+ }
282
+
283
+ export interface RadarReverseGeocodeOptions {
284
+ location?: Location;
285
+ layers?: string[];
286
+ }
287
+
269
288
  export interface RadarNotificationOptions {
270
289
  iconString?: string;
271
290
  iconColor?: string;
@@ -361,9 +380,9 @@ export interface RadarLogConversionCallback {
361
380
  event?: RadarEvent;
362
381
  }
363
382
 
364
- export interface RadarTrackTokenCallback {
383
+ export interface RadarTrackVerifiedCallback {
365
384
  status: string;
366
- token?: string;
385
+ token?: RadarVerifiedLocationToken;
367
386
  }
368
387
 
369
388
  export interface RadarEventUpdate {
@@ -402,12 +421,17 @@ export interface RadarLogUpdateCallback {
402
421
  (status: string): void;
403
422
  }
404
423
 
424
+ export interface RadarLocationPermissionStatusCallback {
425
+ (status: RadarLocationPermissionStatus): void;
426
+ }
427
+
405
428
  export type RadarListenerCallback =
406
429
  | RadarEventUpdateCallback
407
430
  | RadarLocationUpdateCallback
408
431
  | RadarClientLocationUpdateCallback
409
432
  | RadarErrorCallback
410
- | RadarLogUpdateCallback;
433
+ | RadarLogUpdateCallback
434
+ | RadarLocationPermissionStatusCallback;
411
435
 
412
436
  export type RadarPermissionsStatus =
413
437
  | "GRANTED_FOREGROUND"
@@ -430,7 +454,7 @@ export type RadarLocationSource =
430
454
  | "BEACON_EXIT"
431
455
  | "UNKNOWN";
432
456
 
433
- export type RadarEventChannel = "clientLocation" | "location" | "error" | "events" | "log" | "token";
457
+ export type RadarEventChannel = "clientLocation" | "location" | "error" | "events" | "log" | "token" | "locationPermissionStatus";
434
458
 
435
459
  export type RadarLogLevel = "info" | "debug" | "warning" | "error" | "none";
436
460
 
@@ -759,3 +783,47 @@ export type RadarTripStatus =
759
783
  | "expired"
760
784
  | "completed"
761
785
  | "canceled";
786
+
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
+ | "PERMISSION_RESTRICTED"
821
+ | "UNKNOWN";
822
+
823
+ export type LocationManagerStatus =
824
+ | "NotDetermined"
825
+ | "Restricted"
826
+ | "Denied"
827
+ | "AuthorizedAlways"
828
+ | "AuthorizedWhenInUse"
829
+ | "Unknown";
@@ -7,6 +7,7 @@ import {
7
7
  RadarContextCallback,
8
8
  RadarAddressCallback,
9
9
  RadarEventChannel,
10
+ RadarGeocodeOptions,
10
11
  RadarGetDistanceOptions,
11
12
  RadarLocationCallback,
12
13
  RadarLogConversionCallback,
@@ -15,6 +16,7 @@ import {
15
16
  RadarMockTrackingOptions,
16
17
  RadarNotificationOptions,
17
18
  RadarPermissionsStatus,
19
+ RadarReverseGeocodeOptions,
18
20
  RadarRouteCallback,
19
21
  RadarRouteMatrix,
20
22
  RadarSearchGeofencesCallback,
@@ -24,7 +26,6 @@ import {
24
26
  RadarStartTripOptions,
25
27
  RadarTrackCallback,
26
28
  RadarTrackOnceOptions,
27
- RadarTrackTokenCallback,
28
29
  RadarTrackingOptions,
29
30
  RadarTrackingOptionsDesiredAccuracy,
30
31
  RadarTrackingOptionsForegroundService,
@@ -37,6 +38,7 @@ import {
37
38
  RadarMetadata,
38
39
  RadarIPGeocodeCallback,
39
40
  RadarTrackVerifiedOptions,
41
+ RadarTrackVerifiedCallback,
40
42
  } from "./@types/types";
41
43
 
42
44
  if (
@@ -106,11 +108,11 @@ const trackOnce = (
106
108
  return NativeModules.RNRadar.trackOnce(backCompatibleOptions);
107
109
  };
108
110
 
109
- const trackVerified = (options?: RadarTrackVerifiedOptions): Promise<RadarTrackCallback> =>
111
+ const trackVerified = (options?: RadarTrackVerifiedOptions): Promise<RadarTrackVerifiedCallback> =>
110
112
  NativeModules.RNRadar.trackVerified(options);
111
113
 
112
- const trackVerifiedToken = (options?: RadarTrackVerifiedOptions): Promise<RadarTrackTokenCallback> =>
113
- NativeModules.RNRadar.trackVerifiedToken(options);
114
+ const getVerifiedLocationToken = (): Promise<RadarTrackVerifiedCallback> =>
115
+ NativeModules.RNRadar.getVerifiedLocationToken();
114
116
 
115
117
  const startTrackingEfficient = (): void =>
116
118
  NativeModules.RNRadar.startTrackingEfficient();
@@ -187,11 +189,11 @@ const autocomplete = (
187
189
  options: RadarAutocompleteOptions
188
190
  ): Promise<RadarAddressCallback> => NativeModules.RNRadar.autocomplete(options);
189
191
 
190
- const geocode = (address: string): Promise<RadarAddressCallback> =>
191
- NativeModules.RNRadar.geocode(address);
192
+ const geocode = (options: RadarGeocodeOptions): Promise<RadarAddressCallback> =>
193
+ NativeModules.RNRadar.geocode(options);
192
194
 
193
- const reverseGeocode = (location: Location): Promise<RadarAddressCallback> =>
194
- NativeModules.RNRadar.reverseGeocode(location);
195
+ const reverseGeocode = (options?: RadarReverseGeocodeOptions): Promise<RadarAddressCallback> =>
196
+ NativeModules.RNRadar.reverseGeocode(options);
195
197
 
196
198
  const ipGeocode = (): Promise<RadarIPGeocodeCallback> =>
197
199
  NativeModules.RNRadar.ipGeocode();
@@ -244,7 +246,7 @@ const Radar: RadarNativeInterface = {
244
246
  getLocation,
245
247
  trackOnce,
246
248
  trackVerified,
247
- trackVerifiedToken,
249
+ getVerifiedLocationToken,
248
250
  startTrackingEfficient,
249
251
  startTrackingResponsive,
250
252
  startTrackingContinuous,