react-native-nitro-geolocation 1.2.6 → 1.3.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.
Files changed (223) hide show
  1. package/README.md +61 -272
  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 +711 -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
113
+
114
+ Native background tracking, geofencing, activity events, Android Headless JS,
115
+ HTTP sync, and stored event recovery should use the explicit background subpath.
162
116
 
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`. |
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,218 +172,56 @@ 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.
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.
250
179
 
251
180
  ---
252
181
 
253
- ### 6. Development Tools (Optional)
254
-
255
- #### DevTools Plugin (Rozenite)
182
+ ### 4. DevTools Plugin
256
183
 
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`).
184
+ Use the Rozenite DevTools plugin to mock locations during development with an
185
+ interactive map. It works with the Modern API root import.
260
186
 
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)
187
+ ![DevTools Plugin Demo](https://raw.githubusercontent.com/jingjing2222/react-native-nitro-geolocation/main/devtools.gif)
264
188
 
265
189
  ```bash
266
- npm install @react-native-nitro-geolocation/rozenite-plugin
267
- # or
268
190
  yarn add @react-native-nitro-geolocation/rozenite-plugin
269
191
  ```
270
192
 
271
- **Setup**:
272
-
273
193
  ```tsx
274
194
  import {
275
- useGeolocationDevTools,
276
195
  createPosition,
196
+ useGeolocationDevTools,
277
197
  } from "@react-native-nitro-geolocation/rozenite-plugin";
278
198
 
279
199
  function App() {
280
- // Enable location mocking in development
281
200
  useGeolocationDevTools({
282
201
  initialPosition: createPosition("Seoul, South Korea"),
283
202
  });
284
203
 
285
- return <YourApp />;
204
+ return <RootNavigator />;
286
205
  }
287
206
  ```
288
207
 
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)
300
-
301
- ---
302
-
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`.
330
-
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.
336
-
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
355
-
356
- ### From `@react-native-community/geolocation`
357
-
358
- The safest migration is two-step: switch imports to `/compat` first, verify
359
- the app, then move call sites to the Modern API where it improves ownership,
360
- permission timing, cache behavior, or Android settings handling.
361
-
362
- For Modern API migration, install the Agent Skills-compatible migration
363
- playbook from this repository. It is migration assistance for coding agents, not
364
- a fully automatic migration. The skill first runs a package-manager-aware
365
- compat bootstrap script that installs the Nitro packages, rewrites legacy import
366
- sources to `/compat`, and removes `@react-native-community/geolocation`. After
367
- that safe mechanical step, it guides the agent to refactor compat call sites to
368
- Modern API best practices using explicit criteria for permission timing, React
369
- lifecycle ownership, watch cleanup, cache-vs-fresh location reads, accuracy, and
370
- Android provider/settings handling.
371
-
372
- With the Vercel Labs `skills` CLI:
373
-
374
- ```bash
375
- npx skills add jingjing2222/react-native-nitro-geolocation --skill community-migration
376
- ```
377
-
378
- The skill source is
379
- [`skills/community-migration/SKILL.md`](https://github.com/jingjing2222/react-native-nitro-geolocation/tree/main/skills/community-migration).
380
- The bundled bootstrap script is
381
- [`skills/community-migration/scripts/migrate-to-compat.mjs`](https://github.com/jingjing2222/react-native-nitro-geolocation/tree/main/skills/community-migration/scripts/migrate-to-compat.mjs).
382
-
383
- For a drop-in compatibility migration, change the import to use `/compat`:
384
-
385
- ```diff
386
- - import Geolocation from '@react-native-community/geolocation';
387
- + import Geolocation from 'react-native-nitro-geolocation/compat';
388
- ```
389
-
390
- Then migrate individual call sites to the Modern API:
391
-
392
- ```diff
393
- - Geolocation.getCurrentPosition(onSuccess, onError, {
394
- - enableHighAccuracy: true,
395
- - timeout: 15000,
396
- - });
397
- + const position = await getCurrentPosition({
398
- + accuracy: { android: "high", ios: "best" },
399
- + timeout: 15000,
400
- + });
401
- ```
402
-
403
- See [Community Migration](https://react-native-nitro-geolocation.pages.dev/guide/community-migration)
404
- for the full community import → `/compat` → Modern API path.
405
-
406
- ### From `react-native-geolocation-service`
407
-
408
- Apps currently using `react-native-geolocation-service` should migrate directly
409
- to the Modern API. Do not route this path through `/compat`; the service package
410
- has Android fused-provider, settings-dialog, `mocked`/`provider`, and
411
- provider-related error behavior that maps more naturally to Modern APIs.
412
-
413
- Install the dedicated Agent Skills-compatible migration playbook:
414
-
415
- ```bash
416
- npx skills add jingjing2222/react-native-nitro-geolocation --skill service-migration
417
- ```
418
-
419
- See [Service Migration](https://react-native-nitro-geolocation.pages.dev/guide/service-migration)
420
- for the direct service → Modern API path.
208
+ The plugin requires Rozenite DevTools in your app. See the
209
+ [DevTools Plugin guide](https://react-native-nitro-geolocation.pages.dev/guide/devtools)
210
+ for setup, presets, troubleshooting, and the demo.
421
211
 
422
212
  ---
423
213
 
424
- ## Benchmark scope
214
+ ### 5. Continue In The Docs
425
215
 
426
- The benchmark measures cached `getCurrentPosition` reads over 1000 iterations ×
427
- 5 runs on an iPhone 14 Pro with React Native 0.81.4. It measures the
428
- JS-to-native path for cached locations, not cold GPS acquisition, permission
429
- dialogs, provider availability, or OS throttling.
216
+ Use the docs site for the detailed flows:
430
217
 
431
- For cached location reads, Nitro removes Bridge overhead. This does not make GPS
432
- acquisition itself 22x faster; it makes cached reads and the JS-to-native call
433
- path cheaper.
434
-
435
- ---
218
+ - [Quick Start](https://react-native-nitro-geolocation.pages.dev/guide/quick-start) - install, set native permissions, and read your first location.
219
+ - [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.
220
+ - [Compat API](https://react-native-nitro-geolocation.pages.dev/guide/compat-api) - callback compatibility and web behavior.
221
+ - [Background Location](https://react-native-nitro-geolocation.pages.dev/background/overview) - native background tracking, geofencing, storage recovery, Headless JS, and HTTP sync.
222
+ - [Migration Assistance](https://react-native-nitro-geolocation.pages.dev/guide/migration-assistance) - choose the community or service migration path.
223
+ - [Expo Development Builds](https://react-native-nitro-geolocation.pages.dev/guide/expo-development-build) - use the package in Expo custom native builds.
224
+ - [DevTools Plugin](https://react-native-nitro-geolocation.pages.dev/guide/devtools) - mock locations during development.
436
225
 
437
226
  ## 📖 Learn More
438
227
 
@@ -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>