react-native-nitro-geolocation 1.2.5 → 1.3.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.
Files changed (223) hide show
  1. package/README.md +55 -278
  2. package/android/build.gradle +1 -0
  3. package/android/src/main/AndroidManifest.xml +39 -0
  4. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidFusedLocationProvider.kt +310 -0
  5. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidFusedRequestFactory.kt +31 -0
  6. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidGeolocationConversions.kt +71 -0
  7. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidGeolocationErrors.kt +85 -0
  8. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidGeolocationOptions.kt +92 -0
  9. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidLocationSettings.kt +3 -0
  10. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/AndroidProviderRoute.kt +74 -0
  11. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/NitroBackgroundLocation.kt +132 -0
  12. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/NitroGeolocation.kt +219 -476
  13. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/AndroidBackgroundHttpSync.kt +134 -0
  14. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/AndroidBackgroundPermissions.kt +196 -0
  15. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/AndroidBackgroundSerialization.kt +266 -0
  16. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroActivityRecognitionReceiver.kt +13 -0
  17. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBackgroundEventHub.kt +65 -0
  18. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBackgroundHeadlessTaskService.kt +58 -0
  19. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBackgroundLocationController.kt +710 -0
  20. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBackgroundLocationService.kt +48 -0
  21. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBackgroundNotificationFactory.kt +37 -0
  22. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBackgroundStore.kt +655 -0
  23. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroBootReceiver.kt +26 -0
  24. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroGeofenceReceiver.kt +14 -0
  25. package/android/src/main/java/com/margelo/nitro/nitrogeolocation/background/NitroLocationUpdateReceiver.kt +37 -0
  26. package/android/src/test/java/com/margelo/nitro/nitrogeolocation/AndroidFusedLocationProviderTest.kt +64 -0
  27. package/android/src/test/java/com/margelo/nitro/nitrogeolocation/AndroidProviderRouteTest.kt +116 -0
  28. package/ios/IOSBackgroundHttpSync.swift +126 -0
  29. package/ios/IOSBackgroundLocationDelegate.swift +36 -0
  30. package/ios/IOSBackgroundMotion.swift +55 -0
  31. package/ios/IOSBackgroundSerialization.swift +539 -0
  32. package/ios/IOSGeolocationConversions.swift +131 -0
  33. package/ios/IOSGeolocationDelegate.swift +31 -0
  34. package/ios/IOSGeolocationErrors.swift +39 -0
  35. package/ios/IOSGeolocationOptions.swift +135 -0
  36. package/ios/NitroBackgroundLocation.swift +849 -0
  37. package/ios/NitroGeolocation.swift +14 -347
  38. package/nitrogen/generated/android/c++/JActivityRecognitionOptions.hpp +69 -0
  39. package/nitrogen/generated/android/c++/JAndroidBackgroundLocationOptions.hpp +74 -0
  40. package/nitrogen/generated/android/c++/JAndroidBackgroundLocationStatus.hpp +67 -0
  41. package/nitrogen/generated/android/c++/JAndroidBackgroundProvider.hpp +61 -0
  42. package/nitrogen/generated/android/c++/JAndroidForegroundServiceOptions.hpp +90 -0
  43. package/nitrogen/generated/android/c++/JBackgroundEventEnvelope.hpp +129 -0
  44. package/nitrogen/generated/android/c++/JBackgroundEventType.hpp +70 -0
  45. package/nitrogen/generated/android/c++/JBackgroundHttpMethod.hpp +61 -0
  46. package/nitrogen/generated/android/c++/JBackgroundHttpSyncOptions.hpp +131 -0
  47. package/nitrogen/generated/android/c++/JBackgroundHttpSyncResult.hpp +111 -0
  48. package/nitrogen/generated/android/c++/JBackgroundLocation.hpp +110 -0
  49. package/nitrogen/generated/android/c++/JBackgroundLocationOptions.hpp +162 -0
  50. package/nitrogen/generated/android/c++/JBackgroundLocationSource.hpp +73 -0
  51. package/nitrogen/generated/android/c++/JBackgroundLocationState.hpp +70 -0
  52. package/nitrogen/generated/android/c++/JBackgroundLocationStatus.hpp +126 -0
  53. package/nitrogen/generated/android/c++/JBackgroundPermissionResult.hpp +79 -0
  54. package/nitrogen/generated/android/c++/JBackgroundPermissionStatus.hpp +64 -0
  55. package/nitrogen/generated/android/c++/JBackgroundTrackingMode.hpp +61 -0
  56. package/nitrogen/generated/android/c++/JBatterySnapshot.hpp +61 -0
  57. package/nitrogen/generated/android/c++/JDetectedActivity.hpp +66 -0
  58. package/nitrogen/generated/android/c++/JDetectedActivityType.hpp +76 -0
  59. package/nitrogen/generated/android/c++/JFunc_void_BackgroundEventEnvelope.hpp +114 -0
  60. package/nitrogen/generated/android/c++/JFunc_void_BackgroundLocation.hpp +95 -0
  61. package/nitrogen/generated/android/c++/JGeofenceEvent.hpp +94 -0
  62. package/nitrogen/generated/android/c++/JGeofenceRegion.hpp +112 -0
  63. package/nitrogen/generated/android/c++/JGeofenceTransition.hpp +61 -0
  64. package/nitrogen/generated/android/c++/JGeofencingOptions.hpp +82 -0
  65. package/nitrogen/generated/android/c++/JGetStoredBackgroundEventsOptions.hpp +90 -0
  66. package/nitrogen/generated/android/c++/JGetStoredBackgroundLocationsOptions.hpp +69 -0
  67. package/nitrogen/generated/android/c++/JHybridNitroBackgroundLocationSpec.cpp +662 -0
  68. package/nitrogen/generated/android/c++/JHybridNitroBackgroundLocationSpec.hpp +89 -0
  69. package/nitrogen/generated/android/c++/JIOSBackgroundActivityType.hpp +67 -0
  70. package/nitrogen/generated/android/c++/JIOSBackgroundLocationOptions.hpp +79 -0
  71. package/nitrogen/generated/android/c++/JIOSBackgroundLocationStatus.hpp +61 -0
  72. package/nitrogen/generated/android/c++/JLocationProviderStatus.hpp +5 -1
  73. package/nitrogen/generated/android/c++/JStoredBackgroundEventEnvelope.hpp +115 -0
  74. package/nitrogen/generated/android/c++/JStoredBackgroundLocation.hpp +122 -0
  75. package/nitrogen/generated/android/c++/JVariant_NullType_Boolean_String_Double.cpp +34 -0
  76. package/nitrogen/generated/android/c++/JVariant_NullType_Boolean_String_Double.hpp +100 -0
  77. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/ActivityRecognitionOptions.kt +66 -0
  78. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/AndroidBackgroundLocationOptions.kt +66 -0
  79. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/AndroidBackgroundLocationStatus.kt +61 -0
  80. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/AndroidBackgroundProvider.kt +24 -0
  81. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/AndroidForegroundServiceOptions.kt +91 -0
  82. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundEventEnvelope.kt +96 -0
  83. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundEventType.kt +27 -0
  84. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundHttpMethod.kt +24 -0
  85. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundHttpSyncOptions.kt +101 -0
  86. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundHttpSyncResult.kt +71 -0
  87. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundLocation.kt +96 -0
  88. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundLocationOptions.kt +136 -0
  89. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundLocationSource.kt +28 -0
  90. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundLocationState.kt +27 -0
  91. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundLocationStatus.kt +116 -0
  92. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundPermissionResult.kt +71 -0
  93. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundPermissionStatus.kt +25 -0
  94. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BackgroundTrackingMode.kt +24 -0
  95. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/BatterySnapshot.kt +56 -0
  96. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/DetectedActivity.kt +61 -0
  97. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/DetectedActivityType.kt +29 -0
  98. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Func_void_BackgroundEventEnvelope.kt +80 -0
  99. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Func_void_BackgroundLocation.kt +80 -0
  100. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GeofenceEvent.kt +66 -0
  101. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GeofenceRegion.kt +96 -0
  102. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GeofenceTransition.kt +24 -0
  103. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GeofencingOptions.kt +56 -0
  104. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GetStoredBackgroundEventsOptions.kt +66 -0
  105. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/GetStoredBackgroundLocationsOptions.kt +66 -0
  106. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/HybridNitroBackgroundLocationSpec.kt +174 -0
  107. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/IOSBackgroundActivityType.kt +26 -0
  108. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/IOSBackgroundLocationOptions.kt +76 -0
  109. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/IOSBackgroundLocationStatus.kt +56 -0
  110. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/LocationProviderStatus.kt +7 -2
  111. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/StoredBackgroundEventEnvelope.kt +76 -0
  112. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/StoredBackgroundLocation.kt +111 -0
  113. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrogeolocation/Variant_NullType_Boolean_String_Double.kt +88 -0
  114. package/nitrogen/generated/android/nitrogeolocation+autolinking.cmake +3 -0
  115. package/nitrogen/generated/android/nitrogeolocationOnLoad.cpp +20 -0
  116. package/nitrogen/generated/ios/NitroGeolocation-Swift-Cxx-Bridge.cpp +104 -15
  117. package/nitrogen/generated/ios/NitroGeolocation-Swift-Cxx-Bridge.hpp +1107 -50
  118. package/nitrogen/generated/ios/NitroGeolocation-Swift-Cxx-Umbrella.hpp +102 -0
  119. package/nitrogen/generated/ios/NitroGeolocationAutolinking.mm +8 -0
  120. package/nitrogen/generated/ios/NitroGeolocationAutolinking.swift +15 -3
  121. package/nitrogen/generated/ios/c++/HybridNitroBackgroundLocationSpecSwift.cpp +11 -0
  122. package/nitrogen/generated/ios/c++/HybridNitroBackgroundLocationSpecSwift.hpp +416 -0
  123. package/nitrogen/generated/ios/swift/ActivityRecognitionOptions.swift +96 -0
  124. package/nitrogen/generated/ios/swift/AndroidBackgroundLocationOptions.swift +76 -0
  125. package/nitrogen/generated/ios/swift/AndroidBackgroundLocationStatus.swift +58 -0
  126. package/nitrogen/generated/ios/swift/AndroidBackgroundProvider.swift +44 -0
  127. package/nitrogen/generated/ios/swift/AndroidForegroundServiceOptions.swift +160 -0
  128. package/nitrogen/generated/ios/swift/BackgroundEventEnvelope.swift +110 -0
  129. package/nitrogen/generated/ios/swift/BackgroundEventType.swift +56 -0
  130. package/nitrogen/generated/ios/swift/BackgroundHttpMethod.swift +44 -0
  131. package/nitrogen/generated/ios/swift/BackgroundHttpSyncOptions.swift +259 -0
  132. package/nitrogen/generated/ios/swift/BackgroundHttpSyncResult.swift +87 -0
  133. package/nitrogen/generated/ios/swift/BackgroundLocation.swift +118 -0
  134. package/nitrogen/generated/ios/swift/BackgroundLocationOptions.swift +292 -0
  135. package/nitrogen/generated/ios/swift/BackgroundLocationSource.swift +60 -0
  136. package/nitrogen/generated/ios/swift/BackgroundLocationState.swift +56 -0
  137. package/nitrogen/generated/ios/swift/BackgroundLocationStatus.swift +124 -0
  138. package/nitrogen/generated/ios/swift/BackgroundPermissionResult.swift +81 -0
  139. package/nitrogen/generated/ios/swift/BackgroundPermissionStatus.swift +48 -0
  140. package/nitrogen/generated/ios/swift/BackgroundTrackingMode.swift +44 -0
  141. package/nitrogen/generated/ios/swift/BatterySnapshot.swift +60 -0
  142. package/nitrogen/generated/ios/swift/DetectedActivity.swift +39 -0
  143. package/nitrogen/generated/ios/swift/DetectedActivityType.swift +64 -0
  144. package/nitrogen/generated/ios/swift/Func_void_BackgroundEventEnvelope.swift +46 -0
  145. package/nitrogen/generated/ios/swift/Func_void_BackgroundHttpSyncResult.swift +46 -0
  146. package/nitrogen/generated/ios/swift/Func_void_BackgroundLocation.swift +46 -0
  147. package/nitrogen/generated/ios/swift/Func_void_BackgroundLocationStatus.swift +46 -0
  148. package/nitrogen/generated/ios/swift/Func_void_BackgroundPermissionResult.swift +46 -0
  149. package/nitrogen/generated/ios/swift/Func_void_std__optional_BackgroundLocationOptions_.swift +46 -0
  150. package/nitrogen/generated/ios/swift/Func_void_std__vector_GeofenceRegion_.swift +46 -0
  151. package/nitrogen/generated/ios/swift/Func_void_std__vector_StoredBackgroundEventEnvelope_.swift +46 -0
  152. package/nitrogen/generated/ios/swift/Func_void_std__vector_StoredBackgroundLocation_.swift +46 -0
  153. package/nitrogen/generated/ios/swift/GeofenceEvent.swift +50 -0
  154. package/nitrogen/generated/ios/swift/GeofenceRegion.swift +195 -0
  155. package/nitrogen/generated/ios/swift/GeofenceTransition.swift +44 -0
  156. package/nitrogen/generated/ios/swift/GeofencingOptions.swift +66 -0
  157. package/nitrogen/generated/ios/swift/GetStoredBackgroundEventsOptions.swift +102 -0
  158. package/nitrogen/generated/ios/swift/GetStoredBackgroundLocationsOptions.swift +96 -0
  159. package/nitrogen/generated/ios/swift/HybridNitroBackgroundLocationSpec.swift +81 -0
  160. package/nitrogen/generated/ios/swift/HybridNitroBackgroundLocationSpec_cxx.swift +654 -0
  161. package/nitrogen/generated/ios/swift/IOSBackgroundActivityType.swift +52 -0
  162. package/nitrogen/generated/ios/swift/IOSBackgroundLocationOptions.swift +125 -0
  163. package/nitrogen/generated/ios/swift/IOSBackgroundLocationStatus.swift +34 -0
  164. package/nitrogen/generated/ios/swift/LocationProviderStatus.swift +19 -1
  165. package/nitrogen/generated/ios/swift/StoredBackgroundEventEnvelope.swift +54 -0
  166. package/nitrogen/generated/ios/swift/StoredBackgroundLocation.swift +120 -0
  167. package/nitrogen/generated/ios/swift/Variant_NullType_Bool_String_Double.swift +34 -0
  168. package/nitrogen/generated/shared/c++/ActivityRecognitionOptions.hpp +95 -0
  169. package/nitrogen/generated/shared/c++/AndroidBackgroundLocationOptions.hpp +100 -0
  170. package/nitrogen/generated/shared/c++/AndroidBackgroundLocationStatus.hpp +93 -0
  171. package/nitrogen/generated/shared/c++/AndroidBackgroundProvider.hpp +80 -0
  172. package/nitrogen/generated/shared/c++/AndroidForegroundServiceOptions.hpp +116 -0
  173. package/nitrogen/generated/shared/c++/BackgroundEventEnvelope.hpp +140 -0
  174. package/nitrogen/generated/shared/c++/BackgroundEventType.hpp +92 -0
  175. package/nitrogen/generated/shared/c++/BackgroundHttpMethod.hpp +80 -0
  176. package/nitrogen/generated/shared/c++/BackgroundHttpSyncOptions.hpp +129 -0
  177. package/nitrogen/generated/shared/c++/BackgroundHttpSyncResult.hpp +101 -0
  178. package/nitrogen/generated/shared/c++/BackgroundLocation.hpp +134 -0
  179. package/nitrogen/generated/shared/c++/BackgroundLocationOptions.hpp +174 -0
  180. package/nitrogen/generated/shared/c++/BackgroundLocationSource.hpp +96 -0
  181. package/nitrogen/generated/shared/c++/BackgroundLocationState.hpp +92 -0
  182. package/nitrogen/generated/shared/c++/BackgroundLocationStatus.hpp +158 -0
  183. package/nitrogen/generated/shared/c++/BackgroundPermissionResult.hpp +107 -0
  184. package/nitrogen/generated/shared/c++/BackgroundPermissionStatus.hpp +84 -0
  185. package/nitrogen/generated/shared/c++/BackgroundTrackingMode.hpp +80 -0
  186. package/nitrogen/generated/shared/c++/BatterySnapshot.hpp +87 -0
  187. package/nitrogen/generated/shared/c++/DetectedActivity.hpp +92 -0
  188. package/nitrogen/generated/shared/c++/DetectedActivityType.hpp +100 -0
  189. package/nitrogen/generated/shared/c++/GeofenceEvent.hpp +103 -0
  190. package/nitrogen/generated/shared/c++/GeofenceRegion.hpp +123 -0
  191. package/nitrogen/generated/shared/c++/GeofenceTransition.hpp +80 -0
  192. package/nitrogen/generated/shared/c++/GeofencingOptions.hpp +90 -0
  193. package/nitrogen/generated/shared/c++/GetStoredBackgroundEventsOptions.hpp +98 -0
  194. package/nitrogen/generated/shared/c++/GetStoredBackgroundLocationsOptions.hpp +95 -0
  195. package/nitrogen/generated/shared/c++/HybridNitroBackgroundLocationSpec.cpp +47 -0
  196. package/nitrogen/generated/shared/c++/HybridNitroBackgroundLocationSpec.hpp +133 -0
  197. package/nitrogen/generated/shared/c++/IOSBackgroundActivityType.hpp +88 -0
  198. package/nitrogen/generated/shared/c++/IOSBackgroundLocationOptions.hpp +105 -0
  199. package/nitrogen/generated/shared/c++/IOSBackgroundLocationStatus.hpp +87 -0
  200. package/nitrogen/generated/shared/c++/LocationProviderStatus.hpp +5 -1
  201. package/nitrogen/generated/shared/c++/StoredBackgroundEventEnvelope.hpp +108 -0
  202. package/nitrogen/generated/shared/c++/StoredBackgroundLocation.hpp +146 -0
  203. package/package.json +17 -6
  204. package/src/NitroGeolocation.nitro.ts +4 -4
  205. package/src/api/getCurrentPosition.ts +1 -1
  206. package/src/api/requestLocationSettings.ts +3 -2
  207. package/src/background/NitroBackgroundLocation.nitro.ts +83 -0
  208. package/src/background/index.ts +200 -0
  209. package/src/background/index.web.ts +120 -0
  210. package/src/background/task.ts +13 -0
  211. package/src/background/types.ts +328 -0
  212. package/src/compat/index.web.ts +141 -0
  213. package/src/index.tsx +3 -0
  214. package/src/index.web.tsx +41 -0
  215. package/src/publicTypes.ts +6 -5
  216. package/src/types.ts +3 -0
  217. package/src/web/browser.ts +171 -0
  218. package/src/web/index.ts +167 -0
  219. package/src/web/useWatchPosition.ts +76 -0
  220. package/src/web/watch.ts +81 -0
  221. package/src/devtools/index.test.ts +0 -54
  222. package/src/utils/errors.test.ts +0 -65
  223. package/src/utils/provider.test.ts +0 -303
package/README.md CHANGED
@@ -4,10 +4,13 @@
4
4
 
5
5
  **Nitro-powered geolocation for modern React Native apps**
6
6
 
7
- A native iOS/Android geolocation module for React Native 0.75+ and New
8
- Architecture apps. Start by replacing
7
+ A native iOS/Android geolocation module for React Native 0.75+ apps using the
8
+ New Architecture and Nitro Modules. Start by replacing
9
9
  [`@react-native-community/geolocation`](https://github.com/michalchudziak/react-native-geolocation)
10
10
  with `/compat`, then move to a typed Modern API when you are ready.
11
+ The current release line adds web support for Modern and `/compat` foreground
12
+ geolocation plus a native Background Location API for tracking, geofencing,
13
+ storage recovery, Headless JS, and HTTP sync.
11
14
 
12
15
  - 🎯 **Simple functional API** — Direct function calls, no complex abstractions
13
16
  - ⚡ **JSI-powered performance** — Direct native calls without Bridge overhead
@@ -31,23 +34,25 @@ Full documentation available at:
31
34
 
32
35
  | Use case | Recommendation |
33
36
  |---|---|
34
- | Bare React Native 0.75+ app | Use Nitro Geolocation |
37
+ | Bare React Native 0.75+ app with New Architecture/Nitro enabled | Use Nitro Geolocation |
35
38
  | Migrating from `@react-native-community/geolocation` | Start with `/compat` |
36
39
  | New Architecture / Nitro-based app | Recommended |
37
40
  | Expo development build or custom native build | Supported with native setup |
38
41
  | Expo managed app without native rebuild | Use `expo-location` |
39
- | Web support required | Use `@react-native-community/geolocation` or `expo-location` for now |
40
- | Full background tracking / geofencing | Use a dedicated background-location library |
42
+ | Web support required | Use the Modern API root import or `/compat` callback API |
43
+ | Full background tracking / geofencing | Use `react-native-nitro-geolocation/background` |
41
44
 
42
- Web is not supported in `v1.2.x`. The community package handles web by
43
- delegating to the browser `navigator.geolocation` API; this package currently
44
- targets native Nitro bindings. A `/compat` web fallback is planned for `v1.3`.
45
+ Web support is available for the Modern API root import and the `/compat`
46
+ subpath. Browser builds resolve both entries to implementations backed by
47
+ `navigator.geolocation` and do not load Nitro native bindings. Background
48
+ location remains native-only.
45
49
 
46
50
  ---
47
51
 
48
52
  ## 🧭 Introduction
49
53
 
50
- React Native Nitro Geolocation provides **two APIs** to fit your needs:
54
+ React Native Nitro Geolocation provides **three public API surfaces** to fit
55
+ your needs:
51
56
 
52
57
  ### 1. Modern API (Recommended)
53
58
 
@@ -57,88 +62,27 @@ React Native Nitro Geolocation provides **two APIs** to fit your needs:
57
62
  import {
58
63
  setConfiguration,
59
64
  requestPermission,
60
- requestLocationSettings,
61
- getLocationAvailability,
62
65
  getCurrentPosition,
63
- getLastKnownPosition,
64
- geocode,
65
- reverseGeocode,
66
- getHeading,
67
- watchHeading,
68
- unwatch,
69
- getAccuracyAuthorization,
70
- requestTemporaryFullAccuracy,
71
- useWatchPosition,
72
66
  } from "react-native-nitro-geolocation";
73
67
 
74
- // Configure once at app startup
75
68
  setConfiguration({
76
69
  authorizationLevel: "whenInUse",
77
70
  locationProvider: "auto",
78
71
  });
79
72
 
80
- // Request permission
81
73
  const status = await requestPermission();
82
74
 
83
- // Android, v1.2+: ask the user to enable settings required for accurate location
84
- await requestLocationSettings({ accuracy: { android: "high" } });
85
-
86
- // v1.2+: check whether the platform can currently provide locations
87
- const availability = await getLocationAvailability();
88
-
89
- // Get current location
90
- const position = await getCurrentPosition({
91
- accuracy: { android: "high", ios: "best" },
92
- granularity: "permission",
93
- waitForAccurateLocation: true,
94
- });
95
-
96
- // v1.2+: read cached location explicitly without starting a fresh request
97
- const cached = await getLastKnownPosition({
98
- maximumAge: 60_000,
99
- accuracy: { android: "balanced", ios: "hundredMeters" },
100
- });
101
-
102
- // v1.2+: convert between addresses and coordinates with native geocoders
103
- const locations = await geocode("City Hall, Seoul, South Korea");
104
- const addresses = await reverseGeocode({
105
- latitude: 37.5665,
106
- longitude: 126.978,
107
- });
108
-
109
- // v1.2+: inspect precise/reduced accuracy authorization
110
- const accuracyAuthorization = await getAccuracyAuthorization();
111
- if (accuracyAuthorization === "reduced") {
112
- await requestTemporaryFullAccuracy("TurnByTurnNavigation");
113
- }
114
-
115
- // v1.2+: read and watch compass heading
116
- const heading = await getHeading();
117
- const headingToken = watchHeading((nextHeading) => {
118
- console.log(nextHeading.magneticHeading);
119
- });
120
- unwatch(headingToken);
121
-
122
- // Continuous tracking with hook
123
- function LocationTracker() {
124
- const { position, error, isWatching } = useWatchPosition({
125
- enabled: true,
126
- accuracy: { android: "high", ios: "bestForNavigation" },
127
- distanceFilter: 10,
75
+ if (status === "granted") {
76
+ const position = await getCurrentPosition({
77
+ accuracy: { android: "high", ios: "best" },
78
+ timeout: 15_000,
128
79
  });
129
-
130
- if (error) return <Text>Error: {error.message}</Text>;
131
- if (!position) return <Text>Waiting...</Text>;
132
-
133
- return (
134
- <Text>
135
- {position.coords.latitude}, {position.coords.longitude}
136
- </Text>
137
- );
138
80
  }
139
81
  ```
140
82
 
141
- **Benefits**:
83
+ See the [Modern API guide](https://react-native-nitro-geolocation.pages.dev/guide/modern-api)
84
+ for watches, geocoding, heading, cached reads, Android settings, and iOS
85
+ accuracy authorization.
142
86
 
143
87
  ### 2. Compat API (Compatibility)
144
88
 
@@ -158,18 +102,22 @@ const watchId = Geolocation.watchPosition((position) => console.log(position));
158
102
  Geolocation.clearWatch(watchId);
159
103
  ```
160
104
 
161
- #### Compat API coverage
105
+ The `/compat` subpath covers the core native community API, including
106
+ `setRNConfiguration`, `requestAuthorization`, `getCurrentPosition`,
107
+ `watchPosition`, `clearWatch`, and `stopObserving`. It also has a browser entry
108
+ for callback-style foreground geolocation. See the
109
+ [Compat API guide](https://react-native-nitro-geolocation.pages.dev/guide/compat-api)
110
+ for the full compatibility matrix and option notes.
111
+
112
+ ### 3. Background API
162
113
 
163
- | Community API | Nitro `/compat` | Notes |
164
- |---|---:|---|
165
- | `setRNConfiguration` | Supported | Android `auto` currently maps to the platform provider; set `playServices` explicitly for fused location. |
166
- | `requestAuthorization` | Supported | iOS authorization follows configured `Info.plist` keys and `authorizationLevel`. |
167
- | `getCurrentPosition` | Supported | Keeps the legacy callback and error shape. |
168
- | `watchPosition` | Supported | Returns a numeric watch id. |
169
- | `clearWatch` | Supported | Clears a watch id from `watchPosition`. |
170
- | `stopObserving` | Supported | Preserved for legacy cleanup compatibility. |
171
- | `navigator.geolocation` polyfill | Not supported in `v1.2.x` | Planned for `v1.3`. |
172
- | Web | Not supported in `v1.2.x` | Planned as a `/compat` browser fallback in `v1.3`. |
114
+ Native background tracking, geofencing, activity events, Android Headless JS,
115
+ HTTP sync, and stored event recovery should use the explicit background subpath.
116
+
117
+ Background location is native-only. Browser builds expose unsupported stubs so
118
+ web bundles can still import shared code safely. Start with the
119
+ [Background Location guide](https://react-native-nitro-geolocation.pages.dev/background/overview)
120
+ for permissions, start/stop, geofencing, storage recovery, and native sync.
173
121
 
174
122
  ---
175
123
 
@@ -204,6 +152,9 @@ Add permissions to your **Info.plist**:
204
152
  <string>This app requires access to your location at all times.</string>
205
153
  ```
206
154
 
155
+ For background tracking, also enable the `location` background mode in
156
+ `UIBackgroundModes`.
157
+
207
158
  ---
208
159
 
209
160
  ### 3. Android Setup
@@ -221,200 +172,24 @@ Optional (for background):
221
172
  <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
222
173
  ```
223
174
 
224
- ---
225
-
226
- ### 4. Android Reliability
227
-
228
- - Uses Google Play Services fused location when `locationProvider:
229
- "playServices"` is set.
230
- - Keeps `locationProvider: "auto"` on Android's platform `LocationManager` by
231
- default. Set `playServices` explicitly when you want fused location behavior.
232
- - Supports native settings resolution through `requestLocationSettings`.
233
- - Supports approximate/coarse location handling through permissions and
234
- Android `granularity`.
235
- - Supports explicit cached reads through `getLastKnownPosition`.
236
- - Provides structured Modern API errors such as `PLAY_SERVICE_NOT_AVAILABLE`,
237
- `SETTINGS_NOT_SATISFIED`, and `TIMEOUT`.
238
-
239
- ---
240
-
241
- ### 5. Expo Development Builds
242
-
243
- This package requires native Nitro bindings, so it is not an Expo Go module.
244
- Use Expo prebuild, a development build, or another custom native build flow,
245
- then apply the same iOS and Android native permission setup shown above.
246
-
247
- Managed Expo apps that cannot rebuild native code should use `expo-location`.
248
- See the [Expo development build guide](https://react-native-nitro-geolocation.pages.dev/guide/expo-development-build)
249
- for the supported setup path.
250
-
251
- ---
252
-
253
- ### 6. Development Tools (Optional)
254
-
255
- #### DevTools Plugin (Rozenite)
256
-
257
- > **Prerequisites**: Requires [Rozenite DevTools](https://github.com/rozenite/rozenite) to be installed.
258
- >
259
- > **API Compatibility**: Only works with the Modern API. Does not support the Compat API (`/compat`).
260
-
261
- Mock geolocation data during development with an interactive map interface:
262
-
263
- ![DevTools Plugin](https://raw.githubusercontent.com/jingjing2222/react-native-nitro-geolocation/main/devtools.gif)
264
-
265
- ```bash
266
- npm install @react-native-nitro-geolocation/rozenite-plugin
267
- # or
268
- yarn add @react-native-nitro-geolocation/rozenite-plugin
269
- ```
270
-
271
- **Setup**:
272
-
273
- ```tsx
274
- import {
275
- useGeolocationDevTools,
276
- createPosition,
277
- } from "@react-native-nitro-geolocation/rozenite-plugin";
278
-
279
- function App() {
280
- // Enable location mocking in development
281
- useGeolocationDevTools({
282
- initialPosition: createPosition("Seoul, South Korea"),
283
- });
284
-
285
- return <YourApp />;
286
- }
287
- ```
288
-
289
- **Features**:
290
-
291
- - 🗺️ Interactive Leaflet map interface
292
- - 📍 Click to set location instantly
293
- - ⌨️ Arrow key navigation for precise control
294
- - 🏙️ 20 pre-configured city presets
295
- - ✏️ Manual latitude/longitude input
296
- - 📊 Real-time heading, speed, and accuracy calculation
297
- - 🌓 Dark mode support
298
-
299
- [See full DevTools guide →](https://react-native-nitro-geolocation.pages.dev/guide/devtools)
175
+ Full background tracking uses a foreground service on Android. Add the full
176
+ permission set from the Android background setup guide when using
177
+ `react-native-nitro-geolocation/background`, including Android 13+
178
+ `POST_NOTIFICATIONS` for the tracking notification.
300
179
 
301
180
  ---
302
181
 
303
- ### 7. Usage
304
-
305
- #### Modern API (Recommended)
306
-
307
- ```tsx
308
- // Get current location
309
- const position = await getCurrentPosition({
310
- accuracy: { android: "high", ios: "best" },
311
- });
312
-
313
- // Real-time tracking with hook
314
- const { position, error } = useWatchPosition({
315
- enabled: true,
316
- accuracy: { android: "balanced", ios: "nearestTenMeters" },
317
- distanceFilter: 10
318
- });
319
- ```
320
-
321
- Accuracy presets are available since `v1.2`.
322
-
323
- `getLastKnownPosition(options?)`, `getLocationAvailability()`, `getHeading()`,
324
- `watchHeading()`, `geocode(address)`, `reverseGeocode(coords)`, selected
325
- Android request options (`granularity`, `waitForAccurateLocation`,
326
- `maxUpdateAge`, `maxUpdateDelay`, and `maxUpdates`), iOS tuning options
327
- (`activityType`, `pausesLocationUpdatesAutomatically`, and
328
- `showsBackgroundLocationIndicator`), `getAccuracyAuthorization()`, and
329
- `requestTemporaryFullAccuracy(purposeKey)` are available since `v1.2`.
182
+ ### 4. Continue In The Docs
330
183
 
331
- `enableHighAccuracy` is deprecated in the Modern API and remains supported only
332
- for v1 compatibility. Prefer `accuracy`; when `accuracy.android` or
333
- `accuracy.ios` is provided for the current platform, that explicit preset takes
334
- precedence over the boolean. `enableHighAccuracy` is expected to be removed from
335
- the Modern API in v2.
184
+ Use the docs site for the detailed flows:
336
185
 
337
- The `/compat` API keeps `enableHighAccuracy` for drop-in compatibility with
338
- `@react-native-community/geolocation`.
339
-
340
- #### Compat API (Compatibility)
341
-
342
- ```tsx
343
- import Geolocation from "react-native-nitro-geolocation/compat";
344
-
345
- Geolocation.getCurrentPosition((pos) => console.log(pos));
346
- const watchId = Geolocation.watchPosition((pos) => console.log(pos));
347
- Geolocation.clearWatch(watchId);
348
- ```
349
-
350
- ---
351
-
352
- ---
353
-
354
- ## 🔄 Migration from `@react-native-community/geolocation`
355
-
356
- The safest migration is two-step: switch imports to `/compat` first, verify
357
- the app, then move call sites to the Modern API where it improves ownership,
358
- permission timing, cache behavior, or Android settings handling.
359
-
360
- For Modern API migration, install the Agent Skills-compatible migration
361
- playbook from this repository. It is migration assistance for coding agents, not
362
- a fully automatic migration. The skill first runs a package-manager-aware
363
- compat bootstrap script that installs the Nitro packages, rewrites legacy import
364
- sources to `/compat`, and removes `@react-native-community/geolocation`. After
365
- that safe mechanical step, it guides the agent to refactor compat call sites to
366
- Modern API best practices using explicit criteria for permission timing, React
367
- lifecycle ownership, watch cleanup, cache-vs-fresh location reads, accuracy, and
368
- Android provider/settings handling.
369
-
370
- With the Vercel Labs `skills` CLI:
371
-
372
- ```bash
373
- npx skills add jingjing2222/react-native-nitro-geolocation --skill react-native-nitro-geolocation-modern-migration
374
- ```
375
-
376
- The skill source is
377
- [`skills/react-native-nitro-geolocation-modern-migration/SKILL.md`](https://github.com/jingjing2222/react-native-nitro-geolocation/tree/main/skills/react-native-nitro-geolocation-modern-migration).
378
- The bundled bootstrap script is
379
- [`skills/react-native-nitro-geolocation-modern-migration/scripts/migrate-to-compat.mjs`](https://github.com/jingjing2222/react-native-nitro-geolocation/tree/main/skills/react-native-nitro-geolocation-modern-migration/scripts/migrate-to-compat.mjs).
380
-
381
- For a drop-in compatibility migration, change the import to use `/compat`:
382
-
383
- ```diff
384
- - import Geolocation from '@react-native-community/geolocation';
385
- + import Geolocation from 'react-native-nitro-geolocation/compat';
386
- ```
387
-
388
- Then migrate individual call sites to the Modern API:
389
-
390
- ```diff
391
- - Geolocation.getCurrentPosition(onSuccess, onError, {
392
- - enableHighAccuracy: true,
393
- - timeout: 15000,
394
- - });
395
- + const position = await getCurrentPosition({
396
- + accuracy: { android: "high", ios: "best" },
397
- + timeout: 15000,
398
- + });
399
- ```
400
-
401
- See the [migration demo](https://react-native-nitro-geolocation.pages.dev/guide/migration-demo)
402
- for the full community import → `/compat` → Modern API path.
403
-
404
- ---
405
-
406
- ## Benchmark scope
407
-
408
- The benchmark measures cached `getCurrentPosition` reads over 1000 iterations ×
409
- 5 runs on an iPhone 14 Pro with React Native 0.81.4. It measures the
410
- JS-to-native path for cached locations, not cold GPS acquisition, permission
411
- dialogs, provider availability, or OS throttling.
412
-
413
- For cached location reads, Nitro removes Bridge overhead. This does not make GPS
414
- acquisition itself 22x faster; it makes cached reads and the JS-to-native call
415
- path cheaper.
416
-
417
- ---
186
+ - [Quick Start](https://react-native-nitro-geolocation.pages.dev/guide/quick-start) - install, set native permissions, and read your first location.
187
+ - [Modern API](https://react-native-nitro-geolocation.pages.dev/guide/modern-api) - accuracy presets, watches, Android settings, cached reads, geocoding, heading, and iOS accuracy authorization.
188
+ - [Compat API](https://react-native-nitro-geolocation.pages.dev/guide/compat-api) - callback compatibility and web behavior.
189
+ - [Background Location](https://react-native-nitro-geolocation.pages.dev/background/overview) - native background tracking, geofencing, storage recovery, Headless JS, and HTTP sync.
190
+ - [Migration Assistance](https://react-native-nitro-geolocation.pages.dev/guide/migration-assistance) - choose the community or service migration path.
191
+ - [Expo Development Builds](https://react-native-nitro-geolocation.pages.dev/guide/expo-development-build) - use the package in Expo custom native builds.
192
+ - [DevTools Plugin](https://react-native-nitro-geolocation.pages.dev/guide/devtools) - mock locations during development.
418
193
 
419
194
  ## 📖 Learn More
420
195
 
@@ -422,7 +197,9 @@ path cheaper.
422
197
  - [Quick Start Guide](https://react-native-nitro-geolocation.pages.dev/guide/quick-start)
423
198
  - [Modern API Reference](https://react-native-nitro-geolocation.pages.dev/guide/modern-api)
424
199
  - [Compat API Reference](https://react-native-nitro-geolocation.pages.dev/guide/compat-api)
425
- - [Migration Demo](https://react-native-nitro-geolocation.pages.dev/guide/migration-demo)
200
+ - [Migration Skills](https://react-native-nitro-geolocation.pages.dev/guide/migration-assistance)
201
+ - [Community Migration](https://react-native-nitro-geolocation.pages.dev/guide/community-migration)
202
+ - [Service Migration](https://react-native-nitro-geolocation.pages.dev/guide/service-migration)
426
203
  - [Expo Development Build Guide](https://react-native-nitro-geolocation.pages.dev/guide/expo-development-build)
427
204
  - [DevTools Plugin Guide](https://react-native-nitro-geolocation.pages.dev/guide/devtools)
428
205
  - [Why Nitro Module?](https://react-native-nitro-geolocation.pages.dev/guide/why-nitro-module)
@@ -131,4 +131,5 @@ dependencies {
131
131
  implementation "com.google.android.gms:play-services-location:${getExtOrDefaultValue('playServicesLocationVersion', '21.3.0')}"
132
132
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
133
133
  implementation project(":react-native-nitro-modules")
134
+ testImplementation "junit:junit:4.13.2"
134
135
  }
@@ -1,2 +1,41 @@
1
1
  <manifest xmlns:android="http://schemas.android.com/apk/res/android">
2
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
3
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />
4
+ <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
5
+ <uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
6
+ <uses-permission android:name="android.permission.WAKE_LOCK" />
7
+
8
+ <application>
9
+ <service
10
+ android:name=".background.NitroBackgroundLocationService"
11
+ android:exported="false"
12
+ android:foregroundServiceType="location" />
13
+
14
+ <service
15
+ android:name=".background.NitroBackgroundHeadlessTaskService"
16
+ android:exported="false" />
17
+
18
+ <receiver
19
+ android:name=".background.NitroLocationUpdateReceiver"
20
+ android:exported="false" />
21
+
22
+ <receiver
23
+ android:name=".background.NitroGeofenceReceiver"
24
+ android:exported="false" />
25
+
26
+ <receiver
27
+ android:name=".background.NitroActivityRecognitionReceiver"
28
+ android:exported="false" />
29
+
30
+ <receiver
31
+ android:name=".background.NitroBootReceiver"
32
+ android:enabled="true"
33
+ android:exported="true"
34
+ android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
35
+ <intent-filter>
36
+ <action android:name="android.intent.action.BOOT_COMPLETED" />
37
+ <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
38
+ </intent-filter>
39
+ </receiver>
40
+ </application>
2
41
  </manifest>