Location permissions

When the device's location technology is active, Inloco collects sensor data 📶 in order to infer its presence in places such as stores, malls, parks, public squares, etc.

We do not collect data from visits to sensitive places such as religious temples, hospitals, political parties, places of adult entertainment and others that might be used to make sensitive inferences.

📍 Why is the location permission important?

The location permission is required in order to allow Inloco to provide value to the user. Once allowed, Inloco SDK can start detecting location points, which translate to push notifications or validated addresses. Users that don't accept the location permissions won't generate location data, thus, not being able to receive benefits from Inloco features.

The Inloco SDK requires the following runtime permissions in order to fully work: ACCESS_FINE_LOCATION and ACCESS_BACKGROUND_LOCATION.

Not being able to acquire the ACCESS_FINE_LOCATION permission blocks the SDK from acquiring any location data, while not having the ACCESS_BACKGROUND_LOCATION permission only makes it possible to collect it when the application is in the foreground.

The Inloco SDK checks the status of these permissions and changes its behavior accordingly. The SDK will work as usual when in the foreground if only the ACCESS_FINE_LOCATION is granted.

👮♂ Asking for runtime permissions

According to Nielsen Norman Group, world-reference in user experience research, it is easier for people to understand the context of the permission request when it is directly related to the action happening at that moment. For example, it makes more sense to ask for location permission when the person is searching for nearby stores than when they are just looking at the product catalog. The point is: always try to find out in which moment you should ask for permission and when the user will receive the benefits of that permission.

Keep in mind that, to maximize the power of Inloco's technology, as many users as possible must grant location permissions. The description of why location is used must be clear and present direct value to the user. If the permission request is hidden or linked to a feature that does not give real value, the acceptance percentage will be small and fewer users will be able to benefit from Inloco services.

We recommend that the permissions are requested as shown in the Android documentation. If your application is targeting Android 11, you must ask for ACCESS_FINE_LOCATION and ACCESS_BACKGROUND_LOCATION separately, as well as following the new background location access guidelines (more information can be found in the Android 11 Preview documentation).

We provide examples of how runtime permissions can be prompted below, for both applications targeting older versions and those targeting Android 11.

🕚 Apps targeting Android 11

It is now necessary to ask for both location permissions separately. You have to first ask for the ACCESS_FINE_LOCATION permission.

After the ACCESS_FINE_LOCATION is granted. You now must provide a disclosure to the user of background location usage. It must describe the data being collected, how it is being used and enumerate the features that will make use of it. All the requirements can be found here. An example of such disclosure is as follows:

This app needs Background Location permission

This app collects location data to enable you to receive coupons and offers from our nearby stores, even when the app is closed or not in use. In order to be able to do that, the app and our partner Inloco need to have access to your background location. Inloco will collect GPS, Wifi, Telephony and Bluetooth data and use it to provide context to your current location, sending you relevant information through push notifications. The data collected will not have any personal information associated.

You are free to accept or deny this usage. If accepted, you will be taken to your phone settings in order to change the location access to "Allow all the time".

After the user interacts with your disclosure, you can then request the ACCESS_BACKGROUND_LOCATION permission.

🤖 Apps not targeting Android 11

In this case, you may request both permissions together, if applicable (since ACCESS_BACKGROUND_LOCATION is only available on Android devices on version 10 or newer).

An example of how runtime permissions can be prompted is shown below.

Kotlin
Java
Kotlin
// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
// Permission is not granted
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.ACCESS_FINE_LOCATION)) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(thisActivity,
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION),
MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION)
// MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION is an
// app-defined int constant. The callback method gets the
// result of the request.
}
} else {
// Permission has already been granted
}
Java
// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
// Permission is not granted
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.ACCESS_FINE_LOCATION)) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed; request the permission
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
// MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION is an
// app-defined int constant. The callback method gets the
// result of the request.
}
} else {
// Permission has already been granted
}

You should show the user a message explaining why this permission is important.

An example of a clear message that shows the benefits of accepting the location permissions is as follows:

"Receive personalized offers? To receive coupons and offers from our nearby stores, do you allow the app and our partner Inloco to have access to your location?"