7.9.0 - 2024-11-22
HyperTrack.location
returns the latest location (previously distance filtered)
7.8.4 - 2024-10-18
- Data batching configuration changes now take effect immediately
Permissions.Notification.Denied
Error is deprecated, the Notifications permission is not required for tracking anymore
- A rare issue that could cause location events to be dropped under certain conditions
7.8.3 - 2024-09-24
- Fixed the issue with starting foreground service from background in some cases
7.8.2 - 2024-09-11
- Fixed the issue that prevented device registration if the Activity Service plugin wasn't provided
7.8.1 - 2024-09-10
- Fixed the issue preventing the SDK to work when the app is installed in Work profile
7.8.0 - 2024-09-05
- Support for Motion & Activity detection
- If your app asks for permission and the user grants it, you will have better activity detection in polylines
7.7.0 - 2024-08-21
- Support for on-device geofencing via new
HyperTrack.orders["my_order"].isInsideGeofence
property- To learn more about how to best use this new feature see our guide here: https://developer.hypertrack.com/docs/clock-in-out-tagging#verify-shift-presence-before-starting-work
Example use for worker clock in:
fun handlePresence(isInsideResult: Result<Boolean, HyperTrackLocationError>) {
when (isInsideResult) {
is Result.Success -> {
val isInside = isInsideResult.getOrNull() ?: false
if (isInside) {
// allow worker to clock in for the shift
} else {
// "to clock in you must be at order destination"
}
}
is Result.Failure -> {
// resolve any tracking errors to obtain geofence presence
}
}
}
// Check if a worker is inside an order's geofence
handlePresence(HyperTrack.orders["my_order"]?.isInsideGeofence)
// Or, listen to order.isInsideGeofence changes
HyperTrack.subscribeToOrders { orders ->
handlePresence(orders["my_order"]?.isInsideGeofence)
}
7.6.0 - 2024-06-05
- 🆕 New
HyperTrack.workerHandle
property can be used to identify workers- We observed our customers identify worker devices via
HyperTrack.metadata
, so we decided to make it a first class citizen in our API! - If you previously used
metadata
to identify workers, we suggest usingworkerHandle
for this purpose instead. 👈
- We observed our customers identify worker devices via
7.5.5 - 2024-05-24
- SDK failing to track on Android 14 if the host app has
targetSDK
34 if the user started tracking with disabled Location services
7.5.4 - 2024-05-13
- Improved documentation for
addGeotag()
methods
- Fixes and improvements for internal error reporting
- Fixed a bug that led to a small event loss
7.5.3 - 2024-04-23
- Fixed an edge case when a battery update would be skipped
7.5.2 - 2024-04-17
- Crash on Android API 22 and lower caused by incompatible binary version
7.5.1 - 2024-04-06
- Issue with error reporting
7.5.0 - 2024-04-03
- Support for tracking orders with geotags.
- New
addGeotag(orderHandle, orderStatus, metadata)
method. OrderStatus
can be.ClockIn
|.ClockOut
|.Custom("your_status")
- Use this API when users clock in/out of work in your app to honor their work time (see Clock in/out Tagging guide for more info)
- New
- New
HyperTrackAllowMockLocation
AndroidManifest.xml metadata parameter to enable testing the app with mock locations. - Foreground service notification customization (to enable better communicate of why the users are being tracked).
- New
HyperTrackForegroundNotificationTitle
AndroidManifest.xml metadata parameter to change foreground notification title. - New
HyperTrackForegroundNotificationText
AndroidManifest.xml metadata parameter to change foreground notification message.
- New
- Support for Android 14 (targetSdk 34)
- Data batching to optimize battery usage
7.4.3 - 2024-02-26
- Resolved an issue where the SDK would enter an undefined state if the tracking service was restarted by the OS due to low memory conditions, specifically on some Samsung and Motorola devices.
7.4.2 - 2024-02-13
- Fixed timestamp data lagging behind after the phone went through a deep sleep while the SDK was tracking.
7.4.1 - 2024-02-12
- Reduced instances where memory and network spikes could cause crashes or excessive battery drain.
7.4.0 - 2024-01-26
- Improved reporting of battery status and percentage changes.
- Fixed over-reporting of
location_unavailable
outage.
7.3.0 - 2024-01-20
- Reports drivers who change the time on the phone. Changing time doesn't affect the data.
- Prevents data corruption by forcing OS to write the data to disk on every write.
7.2.0 - 2024-01-16
- Uses NTP servers to synchronize time independantly from the OS. Avoids sending data with wrong time information for users who override phone's settings with incorrect values.
- Mitigates SDK cache file corruption that led to some Android devices loading to device_id values with all zeroes.
- Reduced network traffic.
7.1.0 - 2023-12-29
- New Dynamic publishable key API allows to set the publishable key later in the app lifecycle. It should be used only when there is no other way around it and it's impossible to know the publishable key in advance at the build time. Please contact us if this matches your use case.
7.0.11 - 2023-12-12
- Added more comprehensible error message for the case when one of the SDK plugins is missing
7.0.10 - 2023-12-06
- Crash when setting the name with non-ASCII characters
- Freeze on canceling the subscription multiple times
7.0.9 - 2023-11-20
- Unicode representation of strings (to address crashes in case of non-unicode symbols in device name)
7.0.8 - 2023-11-10
- This version of the SDK now automatically migrates device_id, name and metadata from versions before 7.0.0. After the user updates the app, those values stay the same, no additional steps required.
7.0.7 - 2023-11-07
- Added native methods to Proguard exceptions
- Reduced a chance of generating a null (all zeroes) device_id.
7.0.6 - 2023-10-10
- Sending unnecessary events to the server on
locate()
call when tracking is active. - Improve handling of invalid system location events.
7.0.5 - 2023-10-06
location-services-google
,location-services-google-19-0-1
plugins: Not sending location and push token values.
7.0.4 - 2023-10-05
- An intermittent crash on Samsung devices.
location-services-google
,location-services-google-19-0-1
plugins: A crash when usinglocate()
method when Google Location Services return null Location value .
7.0.3 - 2023-09-28
- Propagation SDK killed reason to the server.
7.0.2 - 2023-09-26
- Fixed
addGeotag()
andlocation
returning Errors when there is no intent to track.
7.0.1 - 2023-09-13
- New plugin
location-services-google-19-0-1
that usescom.google.android.gms:play-services-location
version19.0.1
(to workaround the breaking change in20.0.0
).
push-service-firebase
plugin: the plugin now usescom.google.firebase:firebase-messaging
version23.1.1
to make the Plugin work with Kotlin 1.5+.
location-services-google
plugin: Added missing permissions to AndroidManifest.- Resolved an issue that could lead to data corruption if the app crashed during a write operation.
- Ensured that absence of disk storage does not hinder caching of location data when available.
- Enhanced resilience during outages, especially when the OS suspends the app.
7.0.0 - 2023-09-01
We are excited to announce the release of HyperTrack Android SDK 7.0.0, a major update to our location tracking SDK. This release ensures highest tracking performance, reduces deployed app sizes and comes with an improved API to simplify the integrations. We highly recommend upgrading, but please note this is a breaking change from the previous major version.
- WARNING
⚠️ : The device ID will be changed after the update to this version. - The Plugin architecture was introduced. It enables the SDK to adapt to different dependencies and add configurable logic. See Plugins page for more details.
- The SDK API was fully redesigned to be more ergonomic and to require less code to use.
- All the API methods can be accessible at any time from any place in the app by calling them on the static HyperTrack class.
- No need to initialize the SDK by setting publishable key. Now set the key in
AndroidManifest
as Applicationmeta-data
entry with keyHyperTrackPublishableKey
.- Example:
<meta-data android:name="HyperTrackPublishableKey" android:value="Put_your_publishable_key_here" />
- Example:
- Minimal required Android SDK level set to API 19.
- Target Android SDK level set to API 31.
- Added support for Android API 33.
- New
locate()
API. Allows to get a one-time location and sends it to the cloud even when the device is not tracking or available. - The SDK is always in sync with our cloud (if internet connection is present), there is no need to call
syncDeviceSettings()
anymore. subscribeToErrors()
to get the errors updates.subscribeToIsAvailable()
to get the availability updates.subscribeToIsTracking()
to get the tracking state updates.subscribeToLocation()
to get the location updates.errors
variable to get the errors state.isTracking
getter/setter to get/set the tracking intent of the device.isAvailable
getter/setter to get/set the availability state of the device.location
variable to get the last known location or error.name
variable to get/set the name associated with the device.metadata
variable to get/set the metadata associated with the device.- The SDK now is working in the
x86
32bit Emulators.
- Activity permission is no longer required.
HyperTrack.getInstance()
.start()
,stop()
(useisTracking
variable setter instead)setDeviceMetadata()
(usemetadata
variable setter instead)setDeviceName()
(usename
variable setter instead)addTrackingListener()
,removeTrackingListener()
(usesubscribeToIsTracking
,subscribeToErrors
instead).addAvailabilityListener()
,removeAvailabilityListener()
(usesubscribeToIsAvailable
,subscribeToErrors
instead).getLatestLocation()
(uselocation
variable getter instead).getAvailability()
,setAvailability()
(useisAvailable
variable getter/setter instead).getCurrentLocation()
(uselocate
API instead).HyperTrack.getBlockers()
(useerrors
variable instead).setTrackingNotificationConfig()
syncDeviceSettings()
.requestPermissionsIfNecessary()
.backgroundTrackingRequirement()
allowMockLocations()
isRunning()
enableDebugLogging()
.
- ANRs caused by
com.hypertrack.sdk.service.HyperTrackSDKFirebaseMessageReceiver
.
- Fixed crash on invalid remote config format
- SDK Uses Google Play Services Location in version 19.0.1
- Kotlin version downgraded to 1.6.21 (to fix compatibility issues)
- Support for the newest version of com.google.android.gms:play-services-location.
- New outage for API 31 specific crash on starting the foreground service.
- Kotlin version upgraded to 1.7.10
- Foreground service start crash on API 31.
- When the app is uninstalled completely from the device and then installed back, the device_id will change. This improves the stability of the data coming from the SDK. Now this behavior is the same between Android SDK and iOS SDK.
- If the user simulates locations when it's prohibited, the SDK still passes real locations through if there are any.
- Decreased the time sensitivity for first location detection. Results in fewer location_unavailable outages when tracking starts.
- Now, all logs are disabled by default and can be enabled by enableDebugLogging()
- Resolved all potential native library conflicts while reducing the SDK size
- Adding geotag failure
- Crash on location services changes
- Android 12 precise location outage
- The SDK size was reduced by 75% to 4 MB
- Immediately reports all outages and their changes in realtime
- Starts tracking immediately when outages are resolved
- Reliably reports killed events
- Reliably reports battery saver status
- Registers the device during Firebase errors and reports them
- Retries on network failures
- Issues with tracking and availability listeners
- Crashes on initialising the SDK in background threads
- Crashes on Android 6 and 7
- ANR issues
- Added Availability API
- Project no longer exposes ThreeTenBP library
- Syncronization issues in SDK key-value storage
- The project that uses Hypertrack SDK can be compiled with Android SDK API 30
- Crash in SDK internals
- Added GPS outage detection.
- Added battery status reporting. You can check the battery level in our APIs.
- Added robust location spoofing detection. Any location spoofing attempt is reported in our APIs and dashboards.
- Improved tracking quality. Now the movement is captured with greater fidelity. This in turn improves visit detection and distance calculations.
- Improved time to the first location.
- Improved battery life. SDK now tracks less frequently when there is less movement, which conserves battery life.
- Improved location mocking in development mode. Use
allowMockLocations()
API in conjunction with disabling cellular/Bluetooth/WiFi assistance in Settings > Location to test how your app reacts to mocked movement. - Improved activity recognition detection.
- Improved configurability of the SDK.
- Fixed getLatestLocation API, now it properly returns the latest location sent to the cloud.
- Fixed automatic config updates in runtime.
- Fixed step detection bugs.
- Fixed ANR triggers.
- Added FLAG_MUTABLE to PendingIntents to avoid crashes on Android 12
- Crash related to notification icon on some Android 11 devices
- SDK_KILLED outage description (added "description" field to health event)
- Critical bug in whitelisting prompt
- Battery data in location events
- Whitelisting instructions for more device manufacturers
- SDK_KILLED outage description
- Mock location outage
- Sync on app going to background and foreground
- start/stop commands are stacked to queue and processed one-by-one to prevent race conditions.
- SDK now can start tracking if Firebase isn't enabled for the app.
- Added explicit check to ensure we do not add lifecycle observer on the background thread (we relied on framework guarantees before)
- Ignored start/stop commands are reported as status updates. No concealing on permission change.
- Cached location has timestamp that was previously missing. Now it can be examined, if that's matters. We still invalidate locations based on accelerometer data when we believe they are no longer relevant.
- Permission denial on a first run wasn't reported on Android 11 (now fixed).
- Fixed caching issue, that could lead to
isRunning
returns true with service been stopped. - Added a separate button to the whitelistening prompt. Now it's possible to review the steps, since the dialog remains visible until Done is clicked. The behavior is also changed, since the state resets back to default when application was terminated by OS with meaningless reason.
- SDK now sends outage start timestamp when restarted by push notification.
- Disk access from the main thread on Android 11 devices
- Switched from range dependency versions declaration to a single version one. Google Services plugin doesn't work with range version, so this change is intended to ease the integration effort by compromising explicit dependency version specification.
- Automatic tracking restart on device reboot wasn't working on Android 11 but it's fixed now. Background location access permission is required for this flow to work.
- Outage resolution API. Use
HyperTrack.getBlockers()
to get the tracking impediments details.
- Removed push token caching to resist bug in firebase-sdk v20.1.1
- Sync service (internal) bug fixed
- Compatibility with Firebase Messaging extended to be from 17.0.0 to 22.0.0
- Methods to retrieve current (async) and the latest known (blocking) location.
- NPE crash in Gson trying to deserialize empty collection
- Geotag method returns current device location or the reason, why it can't be retrieved
- Restricted Geotag method removed
- Android Strict mode compliance
- Crash that occurred on network response been delivered after app context is invalidated
- Main thread API contract violation bug fixed.
- Crash on concurrent start from multiple threads was fixed.
- Whitelisting hint will appear on devices, that are known to have additional permissions (Huawei, Samsung, Realme etc.).
sdk.requestPermissionsIfNecessary()
orsdk.start()
trigger that prompt.
- HyperTrackSDKService lifecycle improved.
startForeground
is called immediately, without any disk access operations.
- Bug when SDK didn't inform about GPS signal unavailability, if it was unavailable from the tracking start.
- Unknown outages won't be reported like restarted by user.
- Restricted geotag interface method, that creates geotag when device is within specified region and fails otherwise.
- Fixed concurrency bug resulted in multiple outages being genrated
- Dynamic publishable key change support (comes in handy for test/prod switching)
- Background Location permission was made optional (with a dedicated setter on SDK instance)
- Handler based scheduler replaced with coroutines as a workaround to a memory leek in OS APIs
- Fixed race conditions that could causes involuntary tracking stops
- Human readable explanation of process exit reason on Android 11
- Constant device id (was only on Oreo or later before)
HypeTrackMessagingService
was removed to avoid requirement of overriding it instead ofFirebaseMessagingService
.
- Backend and local tracking state conflict fix via their timestamps comparison.
- Sparse locations after exits from stops are no longer appears.
- Android 11 compartibility: SDK will ask for background location access permission on Android 11 and correctly detect location access restrictions, that caused by new permission policy.
- Fixed a bug when SDK had delay in increasing locations frequency after stops.
- Removed default large icon in tracking notification as per Material Design Guidelines
- Small icon is now also configurable through overridden resources.
Vector drawable with name
ic_hypertrack_notification
will be used as a default small notifiation icon.
- Automatic sync on internal triggers (sdk init, publishable key set etc).
- SDK dynamic configuration from remote.
- Steps counter reporting total instead of increment
- Invalid locations client-side check
- Fixed a database migration bug that could result in inability of creating geotags
- Bug that blocked metadata propagation from device to platform on Android 4.4 (API 19).
- Stability: switched from Parceable serialization to avoid deserialization issues on reboot.
- Device name and metadata changes are propagated to platform immediately.
- Missing permission error is only reported on tracking start.
- Added logic to mark tracking segments where location updates weren't available.
- Custom markers were renamed to geotags
- Expected location in custom Marker
- Enabled network payload compression
- Events batching on stops was disabled in fake location mode to ease testing
- Added HyperTrackMessaging service to sdk manifest to ease the integration process.
- Custom markers (formerly known as trip markers or custom events) were made propagating errors on invalid payload, instead of throwing errors.
- Crash on notification click with unserializable Pending Intent fixed.
- Minor changes
- Added changes to device 2 platform contract to improve disconnected devices detection consistency
- End of trial period handling logic changed to avoid unnecessary networking (retries etc.)
- Fixed a crash due to uninformative exception in underlying SQLite Db initialization call.
- Switched from grandcentrix's tray library to custom local sqlite storage implementation
- Firebase dependency version specified as required (was strict before)
- Notification about 403 authentication error is propagated to SDK state observer.
- Removed possibility to create a trip for this device directly from the sdk.
- Fixed recursion bug that led to battery drain
- Remote tracking intent is distinguished from sdk API intent and visible in dashboard
- Fixed a crash due to onNewToken call outside of looped thread
- Fixed a crash due to broken lifecycle invariants
- Added possibility to create a trip for the device directly from SDK.
- Android 10 background data access issue fixed
- SDK startup time reduced due to programmatic detection of auth token expiration
- Excessive wake lock usage eliminated via switching from
AlarmManager
toHandler
based tasks scheduling.
- Null device metadata bug fixed
- New, instance centric, interface for SDK (old methods are kept, but marked deprecated).
- Possibility to configure persistent notification via config
- Android 10 support
- Device ID generator changed to have publishable key among seeds, so device ids will be different for the same physical device if sdk is initialized with different publishable Key (addresses dev/prod credentials usage on the same device).
- Updated push notification feature to support token fetch during integration in app, that already received it from Firebase
- Fixed bugs in tracking observer functionality
isTracking
bug fixed.
- Possibility to attach an observer, that is notified on SDK state changes
- Displacement sensivity increased to finer tracking
- Trip markers replaced custom events.
- Server to device communication support added. It is possible to start/stop tracking from platform.