Skip to content

Limitations

We would rather you know the gaps up front than discover them after buying.

Android only

There is no native iOS counterpart to this package yet. If you need both platforms from one codebase today, the React Native and Flutter SDKs wrap the same engine on iOS and Android.

Play Services required

Tracking is built on the fused location provider and Play Services activity recognition. Devices without Google Play Services — some China-market ROMs, plain AOSP builds — are not supported, and the SDK will not fall back to LocationManager.

Accepted-but-no-op config keys

Accepted for API compatibility with the other BGeo SDKs, currently doing nothing on Android:

KeyStatus
foregroundServiceNo-op — the foreground service is always on while tracking, because Android requires it for background location.
backgroundPermissionRationaleNo-op — the SDK uses Android’s own shouldShowRequestPermissionRationale flow rather than a config-driven dialog.
debugNot a no-op, but plays audible sound cues only (location, heartbeat, motion change, stop timeout, geofence events). It changes nothing about tracking, filtering or upload.

iOS-only keys, stored but unread

These are part of the shared Config shape and are ignored here: showsBackgroundLocationIndicator, stationaryDistanceFilter, preventSuspend, useSessionEngine. You can leave them set — a config shared with an iOS build stays valid.

Behaviour worth knowing before you ship

Geofence transitions fire past the boundary. That is OS behaviour, not a bug: Android adds up to ~30 s of reporting latency (notificationResponsiveness) on top of fused-location detection lag, to keep GPS noise from flapping the region. The location attached to a geofence event is the last accepted fix at the moment the OS delivered the transition, so on a map the event marker lands where the device was when the OS decided, not on the circle’s edge. Size radii with that in mind — a 50 m geofence in a car is mostly a coin flip.

Doze and app standby throttle everything. With the screen off and the device stationary, Android batches location delivery and defers alarms. The engine’s stationary geofence and activity-recognition wakes are designed for this, but the first fix after a long Doze can be minutes late. This is the same constraint every background-location app on Android lives under.

Manufacturer battery managers can kill the service outright. Xiaomi, Huawei, Oppo, Vivo, OnePlus and Samsung ship aggressive process killers that ignore the foreground-service contract. The engine restarts with START_STICKY and re-arms on boot, but on those devices a user may need to whitelist your app in the vendor’s battery settings before background tracking is reliable. dontkillmyapp.com documents the per-vendor steps.

A killed process resumes at the next system event, not instantly. If the user force-stops your app from Settings, Android blocks every restart path until the app is launched again — no broadcast, no geofence, no alarm reaches it. This is by design in Android and cannot be worked around.

Deliberately out of scope

A large part of the Transistorsoft API is not here and is not planned: schedule/startSchedule, location/geofence templates, getLocations() pagination and SQL queries, startBackgroundTask/stopBackgroundTask, getDeviceInfo/getSensors, emailLog, reset(), startGeofences() geofence-only mode, and persistMode/timestampFormat/ locationsOrderDirection. The Methods reference is the complete list of what exists.