Android Geofence & Location

Netmera SDK does not gather any location information from the device:

By default, Netmera SDK does not gather any location information from the device. If you want to use Netmera features requiring location information such as geofence messages and filtering target users by location, you must enable location tracking for your application.

Geofence Push Notifications on Android 10 and Above

In order to send geofence push notifications on Android 10 and above, it's necessary to request background location permission from users. Ensure that you have added the required permission to your AndroidManifest.xml file. However, please note that Android does not allow apps to collect this permission directly within the app. Instead, you need to direct users to the settings screen, where they must manually select "Allow all the time" for the app to track geofences properly.

Before redirecting users to the settings, we recommend displaying a message to inform them why the permission is needed. Android guidelines encourage providing context before sending users to settings, ensuring transparency. You can use our widgets, to present this communication message to your users effectively. You may see Background Location Permission for further information.

Step 1: Add Permissions

Add following two location permissions to your AndroidManifest file.

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

Step 2: Request Permissions

Only for Android 6.0 (API Level 23) and later, location permission must be requested while app is running depending to your app's targetSdkVersion. For more info please refer to this link. The implementation of runtime permission request is complicated but Netmera has already have permission request flow for location permissions. All you have to do is calling following method in some appropriate place of your app's flow.

//Request runtime permission for location
Netmera.requestPermissionsForLocation();

After you call that method, default permission dialog will be shown to the user if app has not already been granted the location permission. After the user allows, Netmera will perform location operations according to your settings on Netmera Dashboard.

Setting max regions for geofence:

You can set max regions for Geofence with setNetmeraMaxActiveRegions method. If you set max active regions' number greater than 95 or smaller than 0, it will be set as the default which is 95.

Step 3: Location History Enabled

For using location to target your users, you should enable Location History from the web panel. In order to do that, follow these steps:

Developers > App Info > App Config > Location History Enabled

Done Now, your app can use location features of Netmera SDK.

Go to your app on Netmera Dashboard make following configurations according your needs:

  • Enable location history for location tracking

  • Add some Geofence places for region tracking

Optional: Android Manifest

For applications that require hardware, you must use the ** ** declaration to view the app in the store on devices that do not have this feature.

To use geofence or location-based push services via Netmera, location hardware is required in the devices. You need to add the following GPS declaration into your manifest file.

<uses-feature
      android:name="android.hardware.location"
      android:required="false" />
<uses-feature
      android:name="android.hardware.location.gps"
      android:required="false" />

Troubleshooting

1. Crash Resolution: Update to gms:play-services-location Version 21.0.1

If you encounter the following crash and are using gms:play-services-location, it is advisable to upgrade to version 21.0.1.

2. Geofence Update Events: Common Causes and Solutions

The Netmera SDK triggers the Geofence Update (n:gu) event when there is a change in the geofence area, prompted by the operating system. However, if the operating system does not trigger this event, you may not see the geofence update events. This can occur due to various reasons such as operating system limitations or device settings.

Possible Reasons for Not Seeing Geofence Update Events
  1. Operating System Does Not Trigger the Event: Geofence events are triggered by the operating system. However, due to power-saving policies or system restrictions, this trigger may not occur.

  2. Background Process Restrictions

    • Some Android devices, particularly those with low memory, may restrict background processes.

    • If the app has been "Force Stopped," geofence events will not be triggered.

  3. Battery Optimization Mode

    • If the device is in battery optimization mode, geofence services may operate with limited functionality.

    • For example, background location services may be disabled.

  4. Device and Operating System Manufacturer Restrictions

    • Some device manufacturers (e.g., Xiaomi, Oppo, Huawei) may restrict geofence events through their own power-saving mechanisms.

  5. Location Services Disabled

    • If the user has disabled location services on the device, geofence events cannot be triggered.

  6. Missing App Permissions

    • If Location Permission is not granted, or if the permission level is restricted (e.g., "Only While Using the App"), geofence events will not be received.

Suggestions for Optimizing Geofence Events

1. Prompt Users to Enable Permissions

You can show an informative message to remind users to keep location services and permissions enabled.

Example message:

"If your location services are off, you may not see geofence events. Go to Settings > Location > [App Name] > Allow Always to update your permissions."

You can also inform users through Netmera Widgets.

2. Check Battery Optimization Settings

Due to energy-saving modes, background processes may be restricted. Direct users to add your app to the battery optimization exceptions list.

Steps:

  1. Go to Settings > Apps > Find [App Name].

  2. Enter Battery settings.

  3. Enable Battery Optimization.

  4. Select Don’t Optimize or No Restrictions.

3. Disable Background Process Restrictions

Some device manufacturers may automatically restrict background app processes. To remove these restrictions, follow the steps according to the device type:

Xiaomi:

  1. Go to Settings > Battery & Performance > App Battery Saver.

  2. Select the app and choose No Restrictions.

Huawei:

  1. Go to Settings > Battery > App Launch Management.

  2. Disable Automatic Management for the app.

  3. Enable all permissions under Manual Management.

Oppo and Vivo:

  1. Go to Settings > Power Management > Background Restrictions.

  2. Ensure your app is not listed here.

4. Increase Location Accuracy

To improve geofence performance, check and adjust the device’s location accuracy settings.

Steps:

  1. Go to Settings > Location > Advanced.

  2. Enable Google Location Accuracy or High Accuracy Mode.

Ensure the above settings are properly configured on users' devices to enable geofence update events to be received correctly. Adding informative messages to guide users in optimizing these settings will help enhance geofence functionality.

Last updated