- [Fixed] Android & iOS will ensure old location samples are ignored with
getCurrentPosition
- [Fixed] Android
providerchange
event would continue to persist a providerchange location even when plugin was disabled for the case where location-services is disabled by user. - [Fixed] Don't mutate iOS
url
to lowercase. Just lowercase the comparison when checking for301
redirects. - [Changed] Android will attempt up to 5 motionchange samples instead of 3.
- [Changed] Android foregroundService notification priority set to
PRIORITY_MIN
so that notification doesn't always appear on top. - [Fixed] Android plugin was not nullifying the odometer reference location when
#stop
method is executed, resulting in erroneous odometer calculations if plugin was stopped, moved some distance then started again. - [Added] Android plugin will detect presense of Sensors
ACCELEROMETER
,GYROSCOPE
,MAGNETOMETER
andSIGNIFICANT_MOTION
. If any of these sensors are missing, the AndroidActivityRecognitionAPI
is considered non-optimal and plugin will add extra intelligence to assist determining when device is moving. - [Fixed] Bug in broadcast event
GEOFENCE
not being fired whenMainActivity
is terminated (only applies to those using aBroadcastReceiver
). - [Fixed] Android scheduler issue when device is rebooted and plugin is currently within a scheduled ON period (fails to start)
- [Fixed] (Android) Fix error calling
stopWatchPosition
before#configure
callback has executed. Also add support for executing#getCurrentPosition
before#configure
callback has fired. - [Added] (Android) Listen to LocationResult while stopTimeout is engaged and perform manual motion-detection by checking if location distance from stoppedAtLocation is > stationaryRadius
- [Fixed] Bug in literal schedule parsing for both iOS and Android
- [Fixed] Bug in Android scheduler after app terminated. Configured schedules were not having their
onTime
andoffTime
zeroed, resulting in incorrect time comparison.
- [Fixed] Bug in Android scheduler after app terminated. Configured schedules were not having their
SECOND
andMILLISECOND
zeroed resulting in incorrect time comparison.
- [Added] New config
stopOnStationary
for both iOS and Android. Allows you to automatically#stop
tracking when thestopTimeout
timer elapses. - [Added] Support for configuring the "Large Icon" (
notificationLargeIcon
) on AndroidforegroundService
notification.notificationIcon
has now been aliased ->notificationSmallIcon
. - [Fixed] iOS timing issue when fetching
motionchange
position after initial#start
-- since the significant-location-changes API (SLC) is engaged in the#stop
method and eagerly returns a location ASAP, that first SLC location could sometimes be several minutes old and come from cell-tower triangulation (ie: ~1000m accuracy). The plugin could mistakenly capture this location as themotionchange
location instead of waiting for the highest possible accuracy location that was requested. SLC API will be engaged only after themotionchange
location has been received. - [Fixed] On Android, when adding a massive number of geofences (ie: thousands), it can take several minutes to perform all
INSERT
queries. There was a threading issue which could cause the main-thread to be blocked while waiting for the database lock from the geofence queries to be released, resulting in an ANR (app isn't responding) warning. - [Changed] Changing the Android foreground-service notification is now supported (you no longer need to
#stop
/#start
the plugin for changes to take effect). - [Fixed] Improved Android handling of simultaneous
#getCurrentPosition
,#start
,#configure
requests when location-services are not yet authorized by the user (the plugin will buffer all these requests and execute them in order once location-services are authorized). - [Added] New config option
httpTimeout
(milliseconds) for configuring the timeout where the plugin will give up on sending an HTTP request. - [Fixed] When iOS engages the
stopTimeout
timer, the OS will pause background-execution if there's no work being performed, in spite ofstartBackgroundTask
, preventing thestopTimeout
timer from running. iOS will now keep location updates running at minimum accuracy duringstopTimeout
to prevent this. - [Fixed] Ensure iOS background "location" capability is enabled before asking
CLLocationManager
tosetBackgroundLocationEnabled
. - [Added] Implement ability to provide literal dates to schedule (eg:
2017-06-01 09:00-17:00
) - [Added] When Android motion-activity handler detects
stopTimeout
has expired, it will initiate amotionchange
without waiting for thestopTimeout
timer to expire (there were cases where thestopTimeout
timer could be delayed from firing due likely to vendor-based battery-saving software) - [Fixed] Android
emailLog
method was using oldadb logcat
method of fetching logs rather than fetching from#getLog
- [Fixed] iOS has a new hook to execute an HTTP flush when network reachability is detected. However, it was not checking if
autoSync: true
or state ofautoSyncThreshold
.
- [Added] When iOS detects a network connection with
autoSync: true
, an HTTP flush will be initiated. - [Fixed] Improve switching between tracking-mode location and geofence. It's not necessary to call
#stop
before executing#start
/#startGeofences
. - [Fixed] iOS issue with
cordova-plugin-cocoalumberjack
dependency issue with Cordova 7.0: plugin version (should be~0.0.2
, not^0.0.2
) - [Fixed] iOS
maximumAge
withgetCurrentPosition
wasn't clearing the callbacks when current-location-age was<= maximumAge
- [Fixed] iOS when
#stop
is executed, nullify the odometer reference location. - [Fixed] iOS issue with
preventSuspend: true
: When amotionchange
event withis_moving: false
occurred, the event was incorrectly set toheartbeat
instead ofmotionchange
. - [Fixed] Android null pointer exception when using
startOnBoot: true, forceReloadOnBoot: true
: there was a case where last known location failed to return a location. The lib will check for null location in this case. - [Changed] iOS minimum version is now
8.4
. Plugin will log an error when used on versions of iOS that don't implement the methodCLLocationManager#requestLocation
- [Fixed] iOS bug executing
#setConfig
multiple times too quickly can crash the plugin when multiple threads attempt to modify anNSMutableDictionary
- [Fixed] Android was rounding
battery_level
to 1 decimal place - [Fixed] iOS geofences-only mode was not using significant-location-change events to evaluate geofences within proximity.
- [Changed] iOS now uses
CLLocationManager requestLocation
to request themotionchange
position, rather than counting samples. This is a more robust way to get a single location - [Fixed] iOS crash when providing
null
values inObject
config options (ie:#extras
,#params
,#headers
, etc) - [Added] New config param
locationsOrderDirection [ASC|DESC]
for controlling the order that locations are selected from the database (and syned to your server) - [Added] iOS now supports geofence
DWELL
withloiteringDelay
with my own custom implementation, just as Android does natively. - [Fixed] iOS was creating
backgroundTask
inlocation
listener even if no listeners were registered, resulting in growing list of background-tasks which would eventually beFORCE KILLED
.
- [Fixed] iOS bug when composing geofence data for peristence. Sometimes it appended a
location.geofence.location
due to a sharedNSDictionary
- [Fixed] Android issue with applying default settings the first time an app boots. If you execute
#getState
before#configure
is called,#getState
would return an empty{}
. - [Changed] The licensing model of Android now enforces license only for release builds. If an invalid license is configured while runningin debug mode, a Toast warning will appear "BackgroundGeolocation is running in evaluation mode.", but the plugin will work.
- [Fixed] iOS bug with HTTP
401
handling. - [Added] The Android plugin now broadcasts all its events using the Android
BroadcastReceiver
mechanism. You're free to implement your own native Android handler to receive and react to these events as you wish.
- [Changed] Refactor Android settings-management. Plugin will always load previously known state as soon as plugin comes alive.
#configure
will reset all settings to default before applying supplied{Config}
. - [Fixed] Android database migration issue when upgrading from a very old version missed
geofences
table migration.
- [Changed] Refactor iOS settings-management. Plugin will always load previously known state as soon as plugin comes alive.
#configure
will reset all settings to default before applying supplied{Config}
. - [Fixed] iOS Schedule evaluation edge-case when a current-schedule is referenced but expired: When evaulating, always check if current-schedule is expired; query for next if so.
- [Fixed] GeofenceManager edge-case: GeofenceManager should not receive current location when plugin is disabled (eg: executing
#getCurrentPosition
when plugin is disabled). - [Fixed]
geofence
event not passing configured geofence#extras
. - [Changed] Removed
taskId
fromgeofence
event callback. This change is backwards compatible. If you want to do a long-running task, create your ownbgTask
with#startBackgroundTask
(the plan is to removetaskId
from all callbacks. Eg:
bgGeo.on('geofence', function(geofence) { // <-- taskId no longer provided!
// Start your own bgTask:
bgGeo.startBackgroundTask(function(taskId) {
performLongRunningTask(function() {
bgGeo.finish(taskId);
});
});
});
- [Fixed] iOS geofence identifiers containing ":" character were split and only the last chunk returned. The plugin itself prefixes all geofences it creates with the string
TSGeofenceManager:
and the string-splitter was too naive. Uses aRegExp
replace to clear the plugin's internal prefix. - [Changed] Refactored API Documentation
- [Added] HTTP JSON template features. See HTTP Features. You can now template your entire JSON request data sent to the server by the plugin's HTTP layer.
- [Changed] BREAKING I've finally figured out how to configure a number of key variables required by the plugin within your
config.xml
file, namely theNSLocationAlwaysUsageDescription
,NSLocationWhenInUseUsageDescription
,NSMotionUsageDescription
. The plugin now requires a<plugin />
config within yourconfig.xml
. BREAKING: With the introduction of this new config mechanism, I decided to use this also for the Androidlicense
config. You will no longer provide the<parameter name="cordova-background-geolocation-license" />
. See the README for details.
<widget id="com.your.company.app.id">
<plugin name="cordova-background-geolocation" spec="^2.4.0">
<variable name="LOCATION_ALWAYS_USAGE_DESCRIPTION" value="Background location-tracking is required" />
<variable name="LOCATION_WHEN_IN_USE_USAGE_DESCRIPTION" value="Background location-tracking is required" />
<variable name="MOTION_USAGE_DESCRIPTION" value="Using the accelerometer increases battery-efficiency by intelligently toggling location-tracking only when the device is detected to be moving" />
</plugin>
- [Fixed] Migrate Android
providerchange
mechanism out of theService
(which only runs when the plugin is#start
ed) to a place where it will be monitored all the time, regardless if the plugin is enabled or not. - [Fixed] Catch
IllegalStateException
reported when using#getLog
- [Changed] With new Android "Doze-mode", override "idle" on
stopTimeout
andschedule
alarms - [Changed] Tweak iOS accelerometer-only motion-detection system.
- [Fixed] Location-authorization alert being popped up after a
suspend
event because the plugin always attempts to ensure it has a stationary-region here. Simply check current authorization-status is not ==Denied
. - [Fixed] iOS Location Authorization alert is shown multiple time. Also discovered a bug where the
providerchange
enabled
value was calculated based upon hard-codedAlways
where it should have compared to the configuredlocationAuthorizationRequest
. - [Added] If plugin's
#stop
method is called, the Location Authorization Alert will be hidden (if currently visible).
- [Fixed] Locale issue when formatting Floats. Some locale use "," as decimal separator. Force Locale -> US when performing rounding. Proper locale will be applied during the JSON encoding.
- [Added] Ability to provide optional arbitrary meta-data
extras
on geofences. - [Changed] Location parameters
heading
,accuracy
,odometer
,speed
,altitude
,altitudeAccuracy
are now fixed at 2 decimal places. - [Fixed] Bug reported with
EventBus already registered
error. Found a few cases whereEventBus.isRegistered
was not being used. - [Added] Android will attempt to auto-sync on heartbeat events.
- [Changed] permission
android.hardware.location.gps" **android:required="false"**
- [Added] Implement
IntentFilter
to captureMY_PACKAGE_REPLACED
, broadcast when user upgrades the app. If you've configuredstartOnBoot: true, stopOnTerminate: false
and optionallyforeceRelaodOnBoot: true
, the plugin will automatically restart when user upgrades the app. - [Changed] When adding a geofence (either
#addGeofence
or#addGeofences
), if a geofence already exists with the providedidentifier
, the plugin will first destroy the existing one before creating the new one. - [Changed] When iOS Scheduler is engaged and a scheduled OFF event occurs, the plugin will continue to monitor significant-changes, since background-fetch events alone cannot be counted on. This will guarantee the plugin evaluates the schedule each time the device moves ~ 1km. This will have little impact on power consumption, since these sig.change events will not be persisted or
POST
ed, nor will they even be provided to Javascript. - [Changed] Android Scheduler will
setExact
Alarm triggers (only works for API>= KITKAT
or if OEM's OS doesn't override it (ie: Samsung)). - [Fixed] iOS Scheduler was not listening to
BackgroundFetch
events while plugin was disabled, preventing schedule evaluation from fetch-events (user would have to open the app for scheduler to evaluate). - [Fixed]
stopWatchPostion
callbacks not being called. - [Fixed] Use more precise Alarm mechanism for
stopTimeout
- [Fixed] Improve odometer accuracy. Introduce
desiredOdometerAccuracy
for setting a threshold of location accuracy for calculating odometer. Any location havingaccuracy > desiredOdometerAccuracy
will not be used for odometer calculation. - [Fixed] When configured with a schedule, the Schedule parser wasn't ordering the schedule entries by start-time.
- [Fixed] Had a report of null-pointer exception when processing an HTTP error response. I could not reproduce the issue but find a case where accessing a
String
could produce a NPE. - [Changed] Add ability to set odometer to any arbitrary value. Before, odometer could only be reset to
0
viaresetOdometer
. The plugin now usessetOdometer(Float, successFn, failureFn
.resetOdometer
is now just an alias forsetOdometer(0)
.setOdometer
will now internally perform a#getCurrentPosition
, so it can know the exact location where the odometer was set at. As a result, using#setOdometer
is exactly like performing a#getCurrentPosition
and thesuccess
/failure
callbacks use the same method-signature, where thesuccess
callback is provided thelocation
. - [Added] Added ability to create your own arbitrary background tasks with new
#startBackgroundTask
method. Some of the plugin's methods receive ataskId
which you've had to callbgGeo.finish(taskId)
upon. These automatically createdtaskId
will soon be removed. It will be up to you to create your own as desired, when you need to perform any long-running task in any of the plugin's callbacks.#finish
operates in the same manner as before.
- [Fixed] Bug with Android geofences not posting
event: geofence
and the actualgeofence
data was missing (The data sent to Javascript callback was ok, just the data sent to HTTP. - [Fixed] Logic bug in
TSGeofenceManager
; was not performing geospatial query when changing state from MOVING -> STATIONARY. - [Added] Geofences-only mode for both iOS and Android BETA. Start geofences-only mode with method
#startGeofences
. - [Changed] Add some intelligence to iOS motion-detection system: Use a Timer of
activityRecognitionInterval
seconds before engaging location-services after motion is detected. This helps to reduce false-positives, particularly when usingpreventSuspend
while walking around one's house or office. - [Changed] Add more intelligence to iOS motion-detection system: The plugin will be eager to engage the stop-detection, as soon as it detects
still
, regardless of confidence. When the plugin is currently in the moving state and detectsstill
, it will engage a timer ofactivityRecognitionInterval
milliseconds -- when this timer expires and the motion-detector still reportsstill
, the stop-detection system will be engaged. If any moving type activity occurs during this time, the timer will be cancelled. - [Fixed] Bug in Android Scheduler, failing to
startOnBoot
. - [Added]
#removeListeners
method. Removes all listeners registered with plugin via#on
method. - [Changed] With
preventSuspend: true
, the plugin will no longer immediately engage location-services as soon as it sees a "moving"-type motion-activity: it will now calculate if the current position is beyond stationary geofence. This helps reduce false-positives engaging location-services while simply walking around one's home or office. - [Fixed] iOS
batchSync
: When only 1 record in batch, iOS fails to pack the records in a JSONlocation: []
, appending to alocation: {}
instead. - [Fixed] Android was only handling the first geofence event when multiple geofences fire simultaneously.
- [Changed] The plugin will ignore
autoSyncThreshold
when amotionchange
event occurs. - [Fixed] Fixed ui-blocking issue when plugin boots with locations in its database with
autoSync: true
. Found a case where the plugin was executing HTTP Service on the UI thread. - [Fixed] Return current
state {Object}
in callback tosetConfig
- [Fixed] iOS Scheduler puked when provided with a
null
or[]
schedule. - [Changed] iOS Scheduler behaviour changed to match Android, where
#stopSchedule
does not execute#stop
on the plugin itself. - [Fixed] FMDB has issues binding array arguments (eg: DELETE FROM locations WHERE id IN(?)). Solution is to simply compose the query string with concatenation. Sanitization isn't required here anyway, since the ids come directly from my own query.
- [Changed] Extract
CococaLumberjack
static-libary from compiled binary TSLocationManager. It causes problems if other libs also use this dependency. Extracted CocoaLumberjack to its own distinct plugincordova-plugin-cocoalumberjack
, which background-geolocation installs as a dependency. This change should be completely transparent. - [Changed] Introduce database-logging for Android with logback-android. Same API as iOS
- [Fixed] iOS geofencing issue where multiple geofences trigger simultaneously, only the last geofence event would be transmitted to the client and persisted to database.
- [Fixed] Remove iOS motion-activity-based filtering of locations. If a location was recorded while the motion-recognition system said the device was
still
, the location was ignored. - [Changed] Implemented ability for iOS to trigger a geofence
ENTER
event immediately when device is already inside the geofence (Android has always done this). This behaviour can be controlled with the new config@param {Boolean} geofenceInitialTriggerEntry [true]
. This behaviour defaults totrue
. - [Changed] Android will filter-out received locations detected to be same-as-last by comparing
latitude
,longitude
,speed
&bearing
. - [Fixed] Bug in
stopDetectionDelay
logic - [Fixed] Geofencing transistion event logging wouldn't occur when configured for
debug: false
- [Fixed] Bug in Android geofencing
- [Changed] Refactor iOS Logging system to use popular CocoaLumberjack library. iOS logs are now stored in the database! By default, logs are stored for 3 days, but is configurable with
logMaxDays
. Logs can now be filtered by logLevel:
logLevel | Label |
---|---|
0 |
LOG_LEVEL_OFF |
1 |
LOG_LEVEL_ERROR |
2 |
LOG_LEVEL_WARNING |
3 |
LOG_LEVEL_INFO |
4 |
LOG_LEVEL_DEBUG |
5 |
LOG_LEVEL_VERBOSE |
#getLog
, #emailLog
operate in the same manner as before.
- [Fixed] If user declines "Motion Activity" permission, plugin failed to detect this authorization failure and fallback to the accelerometer-based motion-detection system.
- [Changed] Refactored Geolocation system. The plugin is no longer bound by native platform limits on number of geofences which can be monitored (iOS: 20; Android: 100). You may now monitor infinite geofences. The plugin now stores geofences in its SQLite db and performs a geospatial query, activating only those geofences in proximity of the device (@config #geofenceProximityRadius, @event
geofenceschange
). See the new Geofencing Guide
- [Fixed] Bug in prevent-suspend where background-fetch operation, when booting app in background, left plugin in preventSuspend mode when not configured to do so
- [Fixed] Bug in prevent-suspend where background-fetch operation caused plugin to be left in preventSuspend mode when not configured to do do
- [Fixed] Bug in prevent-suspend where the plugin failed to re-start its prevent-suspend timer if no MotionActivity event occurred during that interval. Prevent-suspend system should now operate completely independently of MotionDetector.
- [Fixed]
#stop
method wasn't callingstopMonitoringSignificantChanges
, resulting in location-services icon failing to toggle OFF. Fixes issue #908
- [Fixed] Issue where iOS crashes when configured with null url.
- [Added]
#watchPosition
,#stopWatchPosition
mechanism for both iOS & Android - [Changed] Refactored iOS motion-detection system. Improved iOS motion-triggering when using
CMMotionActivityManager
(ie: when not usingdisableMotionActivityUpdates: true
). iOS can now trigger out of stationary-mode just like android, where it sees a 'moving-type' motion-activity (eg: 'on_foot', 'in_vehicle', etc). Note: this will still occur only when your app isn't suspended (eg: app is in foreground,preventSuspend: true
, or#watchPosition
is engaged). - [Changed] Refactored iOS "prevent suspend" system to be more robust.
- [Fixed] iOS locations sent to Javascript client had a different
uuid
than the one persisted to database (and synced to server). -[Added] new iOS 10 .plist required key for accelerometer updatesNSMmotionUsageDescription
toconfig.xml
- [Added] New required android permission
<uses-feature android:name="android.hardware.location.gps" />
.
- [Fixed] Issue #804, null pointer exeception on mGoogleApiClient
- [Fixed] Issue #806. PlayServices connect error event was fired before listeners arrive; Dialog to fix problem was never shown.
- [Changed] Removed
app-compat
from Gradle dependencies. - [Changed] Fire http error callback when HTTP request is not 200ish (ie: 200, 201, 204). Fixes issue #819. Contradicts #774.
- [Changed] Remove
play-services:app-compat-v7
from Gradle dependencies - [Fixed] Android heartbeat location wasn't having its meta-data updated (ie:
event: 'heartbeat', battery:<current-data>, uuid: <new uuid>
) - [Changed] Reduce Android
minimumActivityRecognitionConfidence
default from80
to75
(issue #825) - [Changed] Android will ask for location-permission when
#configure
is executed, rather than waiting for#start
. - [Changeed] Android will catch
java.lang.SecurityException
when attempting to request location-updates without "Location Permission" - [Fixed]
removeGeofences
was removing stationary-region. This would prevent stationary-exit if called while device is in stationary-mode
- [Fixed] Fixed parse error in Scheduler.
- [Changed] Implement latest
cordova-plugin-background-fetch
dependency v4.0.0. - [Changed] Execute HTTP sync on background-fetch event
- [Fixed] Android
addGeofences
error - [Fixed] iOS setting
method
not being respected (was always doingPOST
). Issue #770
- [Changed] Disable start-detection system when no accelerometer detected (ie: running in Simulator)
- [Changed] Improve iOS location-authorization system. Show an alert if user changes location-authorization state (eg: 'Always' -> 'When in use') or disables location-services. Alert directs user to [Settings] screen. Add new config param
#locationAuthorizationAlert
, allowing you to configure all the text-strings on Alert popup. - [Fixed] Incorrect Android binary uploaded in previous version
- Disable start-detection system when no accelerometer detected (ie: running in Simulator)
- Fix bugs with Android
- Fix bugs with Android
- Implement new event
providerchange
allowing you to listen to Location-services change events (eg: user turns off GPS, user turns off location services). Whenever aproviderchange
event occurs, the plugin will automatically fetch the current position and persist the location adding the event: "providerchange" as well as append the provider state-object to the location. - [Added] New event
activitychange
for listening to changes from the Activit Recognition system. See Events section in API docs for details. Fixes issue #703. - [Added] new
#event
typeheartbeat
added tolocation
params (#is_heartbeat
is @deprecated). - [Changed]
Scheduler
will useLocale.US
in its Calendar operations, such that the days-of-week correspond to Sunday=1..Saturday=7. Fixes issue #659 - [Changed] Refactor odometer calculation for both iOS and Android. No longer filters out locations based upon average location accuracy of previous 10 locations; instead, it will only use the current location for odometer calculation if it has accuracy < 100.
- [Fixed] When enabling iOS battery-state monitoring, use setter method
setBatteryMonitoringEnabled
rather than setting property. This seems to have changed with latest iOS - [Added] Implement the new
#getCurrentPosition
options#samples
and#desiredAccuracy
for iOS.
- [Changed]
Scheduler
will useLocale.US
in its Calendar operations, such that the days-of-week correspond to Sunday=1..Saturday=7. - [Fixed] iOS Added
event [motionchange|geofence]
to location-data returned toonLocation
event. - [Changed] Refactor odometer calculation for both iOS and Android. No longer filters out locations based upon average location accuracy of previous 10 locations; instead, it will only use the current location for odometer calculation if it has accuracy < 100.
- [Fixed] Missing iOS setting
locationAuthorizationRequest
after Settings service refactor
- [Changed] Refactor iOS motion-detection system. When not set to
disableMotionActivityUpdates
(default), the plugin will not activate the accelerometer and will rely instead purely upon updates from the M7 chip. WhendisableMotionActivityUpdates
is set tofalse
, the pure acceleromoeter based activity-detection has been improved to give more accurate results of the detected activity (ie:on_foot, walking, stationary
) - [Added] Implement new Scheduling feature
- [Fixed] Bugs in iOS option
useSignificantChangesOnly
- [Changed] Refactor HTTP Layer for both iOS and Android to stop spamming server when it returns an error (used to keep iterating through the entire queue). It will now stop syncing as soon as server returns an error (good for throttling servers).
- [Added] Migrate iOS settings-management to new Settings service
- [Fixed] bugs in Scheduler
- [Added] Better BackgroundFetch plugin integration. Background-fetch will retrieve the location-state when a fetch event fires. This can help to trigger stationary-exit since bg-fetch typically fires about every 15min.
- [Added] Improved functionality with
stopOnTerminate: false
. Ensure a stationary-geofence is created when plugin is closed while in moving state; this seems to improve the time it takes to trigger the iOS app awake after terminate. When plugin is rebooted in background due to geofence-exit, the plugin will briefly sample the accelerometer to see if device is currently moving.
- [Added] ios logic to handle being launched in the background (by a background-fetch event, for example). When launched in the background, iOS will essentially do a
changePace(true)
upon itself and let the stop-detection system determine engage stationary-mode as detected. - [Changed] ios halt stop-detection distance was using
distanceFilter
; changed to usestationaryRadius
. This effects users using the accelerometer-based stop-detection system: after stop is detected, the device must movestationaryRadius
meters away from location where stop was detected. - [Changed] When
maxRecordsToPersist == 0
, don't persist any record. - [Added] Implement
startOnBoot
param for iOS. iOS always ignoredstartOnBoot
. If you setstartOnBoot: false
now, iOS will not begin tracking when launched in background after device is rebooted (eg: from a background-fetch event, geofence exit or significant-change event) - [Changed] Modified the method signature of
#configure
. The config{}
will now be the 1st param and thecallbackFn
will now signal successful configuration. ThelocationCallback
andlocationErrorCallback
must now be provided with a separate event-listener#onLocation
. - [Added] Imported Android demo code so that users can test the Android plugin using the SampleApp
bundle ID
andlicense
- [Fixed] ios
stopOnTerminate
was defaulting tofalse
. Docs say default istrue
. - [Fixed] ios
useSignificantChangesOnly
was broken. - [Added] Add odometer to ios location JSON schema
- [Added] ios Log network reachability flags on connection-type changes.
- [Added]
maxRecordsToPersist
in plugin's SQLite database. - [Added] API methods
#addGeofences
(for adding a list-of-geofences),#removeGeofences
- [Changed] The plugin will no longer delete geofences when
#stop
is called; it will merely stop monitoring them. When the plugin is#start
ed again, it will start monitoringt any geofences it holds in memory. To completely delete geofences, use new method#removeGeofences
. - [Fixed] iOS battery
is_charging
was rendering as1/0
instead of booleantrue/false
- [Fixed] iOS Issue with timers not running on main-thread.
- [Fixed] iOS Issue with acquriring stationary-location on a stale location. Ensure the selected stationary-location is no older than 1s.
- [Fixed] iOS Removed some log messages appearing when
{debug: false}
- [Changed] Upgrade
emailLog
method to attach log as email-attachment rather than rendering to email-body. The result of#getState
is now rendered to the
##0.6.4
- Tweak stop-detection system. add
#stopDetectionDelay
- Introduce accelerometer-base stop-detection for ios.
@config {Boolean} useSignificantChangesOnly
- When a geofence event occurs, the associated location will have geolocation meta-data attached to the associated location. Find it in the POST data. See Wiki Location Data Schema for details.