To test battery drain attributable to Radar background tracking in your iOS or Android app, you must isolate battery drain attributable Radar's usage of location services.
This means that you must control for confounding variables:
- In the context of your app, you must control for battery drain attributable to other code and other SDKs running in your app, having the app foregrounded, and notifications.
- In the context of your device, you must control for battery drain attributable to other apps, the OS, and your device state, including having the screen turned on.
Often, having the screen turned on and the app foregrounded are bigger sources of battery drain than usage of location services.
To isolate battery drain attributable Radar's usage of location services in your app, there are two ways to test:
- Install two builds of your app, one with Radar running background tracking and one without. Use your phone for a period of time, ideally a full day, and avoid opening either app (to avoid the confounding variables described above). At the end of the period, compare battery blame for each app on the Battery screen in the device settings.
- Install the Radar Toolkit app, a sample app that does nothing but run Radar. Use your phone for a period of time, ideally a full day, and avoid opening the app (to avoid the confounding variables described above). At the end of the period, inspect battery blame for the app on the Battery screen in the device settings.
Note that the Battery screen on iOS and Android shows battery drain attributable to each app not as an absolute percentage, but as a percentage of the absolute battery drain in the battery session.
For example, if the iOS Battery screen shows 2% battery blame attributable to your app and shows that your phone has drained 50% of its battery in the battery session, the absolute percentage attributable to your app is actually 2% * 50% = 1%.
When using the efficient and responsive tracking presets, the SDK will wake up while the user is moving (usually every few minutes), then shut down when the user stops. To save battery, the SDK will not wake up when stopped. For most users, background tracking with these presets uses only 1-2% battery per day (measured in absolute percentage).
See the SDK documentation and Navigating location services tradeoffs between accuracy, frequency, and battery efficiency for more information.
Many developers switch to Radar from other location SDKs. You can test Radar side-by-side with another location SDK, but keep in mind that there may be side effects on iOS.
On iOS, significant location change events,
CLRegion events, and
CLVisit events may be sent to all
CLLocationManager instances in the app. This may cause the Radar SDK to receive client-side location updates triggered by other SDKs even if you have not called
On Android, this is not an issue.
The Radar team is constantly working to improve data coverage for our geocoding, search, and routing APIs.
The following table describes data coverage for each of these APIs, by country, for consumer use cases (e.g., store locator, address autocomplete) and logistics use cases (e.g., ride sharing, delivery).
|⬤||Great data quality and availability|
|◐||Good data quality and availability|
|◯||Approximate data quality and availability|
|Coarse geocoding and autocomplete (regions)||Fine geocoding and autocomplete (address)||Place detection and search||Routing and distance matrix|
|🇺🇸 US (consumer)||⬤||⬤||⬤||⬤|
|🇺🇸 US (logistics)||◐||◐||◐||⬤|
|🇨🇦 CA (consumer)||◐||◐||◐||⬤|
|🇨🇦 CA (logistics)||◐||◐||◐||⬤|
|🇬🇧 UK (consumer)||◐||◯||◐||⬤|
|🇬🇧 UK (logistics)||◐||◯||◐||⬤|
|🌎 Other (consumer)||◐||◯||◐||⬤|
|🌎 Other (logistics)||◐||◯||◐||⬤|
Yes, Radar supports location verification and fraud detection for gambling, media, payments, and more.
You can use Regions to detect a user's country or state based on latitude and longitude and verify the device is not spoofing location or using a proxy via attributes associated with the Radar user. See the location verification tutorial for additional information.
Alternatively, you can use the IP geocoding API to detect a user's country or state based on IP address. You can check the
proxy flag in the response to determine if the user is using a known proxy, VPN, data center, or Tor exit node.
Yes, if background location permissions have been granted.
On iOS, if the app is killed (e.g., swiped up from the App Switcher), the SDK is able to wake up and start collecting locations again if it receives certain types of location updates from the OS. These services can be activated on iOS by enabling the location updates background mode and using at least one of following tracking options:
On Android, Radar will continue to receive location updates if the app is swiped out of the Recent Apps list. Radar will not receive location updates if the phone manufacturer aggressively kills background services or the user presses Force stop.
With just foreground location permissions, you can leverage the background location indicator on iOS or a foreground service on Android to continue to receive location updates in the background. These are activated via the
showBlueBar tracking option on iOS or the
foregroundService tracking option on Android. iOS devices will display a blue location icon when activated, and Android deivces will display a persistent notification. Use of these visual indicators is common for operational use cases such as fleet tracking and delivery.
Each listener can support different use cases and exposes different data to take actions. The client location listener (
onClientLocationUpdated on Android,
didUpdateClientLocation on iOS) is fired whenever the Radar SDK receives a location update from the device. It can be used to collect a stream of location updates before they hit Radar servers. The location updated listener (
onLocationUpdated on Android,
didUpdateLocation on iOS) delivers location updates processed by Radar servers and will return refreshed user context. This listener can be used to deliver in-app experiences based on user context, including when
Radar.trackOnce() is called on application launch. The Radar events listener (
didReceiveEvents on Android and iOS) can be used to listen for Radar events and trigger workflows.
The Radar SDK collects location data (latitude, longitude), device IDs, IP addresses, and device info by default. We also collect any other user IDs (e.g., user IDs) or metadata that you choose to send us. Radar does not collect personally identifiable information like name or email by default.
- Do not send any PII, like names, email addresses, or publicly available IDs, to the Radar SDK or API.
- Minimize the data you collect with Radar, turning on only the context types relevant to your use case (store visits for shopping apps, airport visits for travel apps, and so on).
For more information, see our location data privacy checklist.
The best location permission prompts are:
- Valuable: The prompt explains why the user should grant location permissions, like enabling a location-based feature or unlocking an offer.
- Timely: The prompt is shown when the user is engaged, like in an onboarding, when accessing a location-based feature, or after a transaction. Background permission prompts are shown after and incremental to foreground permission prompts.
Opt-in rates vary from app to app, but apps that follow best practices can expect 70-80% of users to grant location permissions, with 40-50% of users granting background ("always") location permissions on iOS.
For more information, see our location data privacy checklist.
By default, users and events are retained for 1 year, trips are retained for 90 days, and location updates are retained for 7 days.
Radar supports custom data retention settings. Admins can adjust these settings in the Radar dashboard under the Privacy section.
Yes, Radar is CCPA-compliant and GDPR-compliant. For more information, see our commitment to privacy.
For data deletion requests, you can delete a user manually from the user detail page in the dashboard or delete a user programmatically using the API. Deletions are immediate.
For data access requests, you can export a user and all of their events and locations manually from the user detail page in the dashboard.
If you need assistance, you can also forward requests to your customer success manager.
- Read accounts can read user, geofence, and event data.
- Write accounts can also create, update, and delete user, geofence, and event data.
- Admin accounts can also invite new accounts and update project settings, including API keys and integrations.
- Owner accounts can also edit account roles and project access.
Use the appropriate role (owner, admin, write, or read) for each co-worker's account. See Radar security best practices.
In addition to the account roles above, owners can also control:
- Project access: Access to specific projects in an organization
- Environment access: Access to test or live data across projects in an organization
- Data access: Access to specific data and pages across projects in an organization
- User locations: Access to data on the user details page (map and location information) and access to the user locations page
- Trip locations: Access to data on the trip details page (map and location information) and access to the trip tracking dashboard
Yes. For more information, see the Vulnerability Disclosure Policy.
- Use a strong password (at least 10 characters, at least 1 lowercase letter, at least 1 uppercase letter, at least 1 number, and at least 1 symbol).
- Use a password manager like 1Password or LastPass to generate and store passwords, and use a different password for each website.
- Use app- or SMS-based multi-factor authentication (MFA). Enable MFA on the Account page.
- Do not share your account with co-workers.
- Use the appropriate role (owner, admin, write, or read) for each co-worker's account.
- When a co-worker is terminated, delete their account.
- Use single sign-on (SSO) if supported by your organization.
- Use a password protected lock screen on employee workstations set to a short timeout, e.g., 5 minutes.
- Use Test keys for development and Live keys for production.
- Use Publishable keys, which are restricted in scope in client-side code. Never use Secret keys, which can read or write any data.
- Encrypt data stored outside of Radar (e.g., data sent to integrations or sent to webhooks and stored in a data warehouse).
- Do not send any PII, like names, email addresses, or publicly available IDs, to the Radar SDK or API. See also Radar privacy best practices.
Yes, Radar supports audit logs for enterprise customers. Audit logs include all requests made from the dashboard with the account, project, environment, IP address, and timestamp of each request. The 100 most recent audit logs can be viewed from the dashboard, and full audit logs can be exported to CSV.
Radar supports single sign-on (SSO) via SAML, LDAP, Open ID, and other identity providers.
SSO is an enterprise-only feature. Contact your customer success manager to enable this feature.
To set up your SAML identity provider, reach out to your customer success manager who will provide the assertion consumer service URL and application callback URL. They will need the following information in return:
- SAML protocol URL
- Sign-in URL
- Sign-out URL (optional)
- X509 Signing Certificate (.pem file)
- User ID attribute (defaults to http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier then http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn then http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name)
Yes, Radar is SOC 2 type II-certified. For more information, please ask your account executive for a copy of our attestation report.
Yes. The Radar SDK calls the Radar API over HTTPS using TLS version 1.2 or higher, so all data is encrypted in transit. API calls are authenticated using your Publishable keys, which are restricted in scope.
Statistics for location permissions are available for customers who have installed SDK 3.1 or later.
On iOS, the SDK checks
CLLocationManager to determine authorization status:
.authorizedAlways, meaning that the user has granted background location permissions.
.authorizedWhenInUse, meaning that the user has granted foreground location permissions.
.restricted, meaning that the user has denied location permissions.
.notDetermined, meaning that the user has not yet been prompted for location permissions.
On Android, the SDK checks the
ACCESS_BACKGROUND_LOCATION permissions to determine authorization status:
Granted Background: The
ACCESS_BACKGROUND_LOCATIONpermission is granted, meaning that the user has granted background location permissions.
Granted Foreground: The
ACCESS_FINE_LOCATIONpermission is granted, meaning that the user has granted foreground location permissions.
ACCESS_FINE_LOCATIONpermission is denied and
false, meaning that the user has denied location permissions and checked "Never ask again."
Not Determined: None of the above criteria are true, meaning that the user has not yet been prompted for location permissions.
A tracked user is any opted-in user whose location is tracked by Radar.
An active user is any user, regardless of permissions, that has an App Session with Radar’s SDK installed.
An app session represents a period of user activity within your app. A new app session is started whenever the app is opened, assuming at least 5 minutes have elapsed since the app was last closed.
A user may have an App Session (open the application) but not utilize features that require them to be tracked by Radar. They may also be tracked in the background (with appropriate permissions), but not open the application.