The Config.java switches
requireLocation enables location at all; requireBackgroundLocation adds background tracking on Android and only takes effect when requireLocation is true. See the Android geolocation documentation.
Google Play rejection
Most web apps that ask for location need it only while the user is looking at the screen. If yours is one of them, the fix is to remove background location from the build, not to argue with Google. If tracking with the app closed really is your core feature, this guide shows what the declaration, the disclosure and the 30-second video must show.
From $109 one-time per platform, or let our team do it all from $698.
Background location means your app receives location while it is not visible: the screen is off, another app is open, or your app was swiped away. Google allows it only when it is part of the app's core functionality, meaning the app would be broken without it, and when it gives the user a clear benefit such as safety, health and fitness, or a job the user is actively doing. Convenience, personalization, analytics and ads do not qualify, and requests made only for ads or analytics are denied. The user must reasonably expect the tracking, and the same experience must not be possible in the foreground.
Apps that keep it complete a declaration in Play Console (App content → Sensitive app permissions → Location permissions). It names one location-based feature, explains why that feature needs background access and links a video of 30 seconds or less. You also need a prominent in-app disclosure before the permission prompt, and the reviewer must be able to reach the feature. The details are on Google's background location help page.
Either Play Console blocks the release until the location declaration is complete, or the declaration itself is rejected. The reasons Google lists match what reviewers see in wrapped apps: the feature is unclear or more than one feature was declared, the feature could not be verified (often because of the login), the disclosure is missing or incomplete, the privacy policy does not mention background location, or the feature simply does not qualify. When the permission is not needed, the notice asks you to remove it from every track, including closed and open testing.
| Feature | Verdict | What to use |
|---|---|---|
| Store finder, "near me" list, check-in button | Foreground only | HTML5 geolocation while the screen is open |
| Customer watching a courier on a map | Foreground only; Google lists customer-side delivery tracking as a typical failure | Live map while the screen is open, push for status changes |
| Courier or field worker sharing location during a shift | Can qualify if it is the core of the app | Tracking the user starts and stops, with an ongoing notification |
| Recording a run or ride with the screen off | Can qualify (fitness) | Tracking started for the workout and stopped at its end |
| Safety alert when a family member leaves an area | Can qualify (safety) | One clearly declared feature with a disclosure |
| Local news, weather or offers by region | Does not qualify | Foreground or coarse location, or a city picker |
| Ad targeting, analytics, attribution | Never | Remove it |

Great way of converting your web app to a native app! Fast turn-around, and a great way to get your apps into the app stores without the need to develop a full native app!
requireLocation enables location at all; requireBackgroundLocation adds background tracking on Android and only takes effect when requireLocation is true. See the Android geolocation documentation.
Background tracking also needs the FOREGROUND_SERVICE_LOCATION permission and the GPSService block in AndroidManifest.xml, which you uncomment to enable the feature. If they are active, Play Console sees a location service.
backgroundlocationon:// and backgroundlocationoff:// start and stop tracking from your web app. Calling them from a user action is what makes the tracking user-initiated.
A map, analytics or geofencing library can add ACCESS_BACKGROUND_LOCATION to the merged manifest without telling you. The Merged Manifest tab in Android Studio shows which one.
About thirty minutes plus review time.
Set requireBackgroundLocation to false in Config.java. Keep requireLocation true if your web app uses the geolocation API while it is open; set it to false as well if the app does not use location at all.
Comment out (or delete) the FOREGROUND_SERVICE_LOCATION permission and the GPSService block in AndroidManifest.xml, and remove any ACCESS_BACKGROUND_LOCATION entry. If a library adds it, strip it with tools:node="remove" as shown in the permissions guide.
Delete backgroundlocationon:// calls from your web app, and any text in the app or the store listing that promises tracking while the app is closed.
Request location from the feature screen after a short explanation, as described in the prominent disclosure guide. Foreground location from the HTML5 API keeps working exactly as before while the app is open.
Build a new bundle with a higher version code in Android Studio or the Cloud Builder, confirm in the App bundle explorer that the background permission is gone, and replace older builds on the internal, closed and open testing tracks as well.
If Play Console still shows the location permissions declaration, update it to say the app no longer accesses location in the background, then send the changes for review.
Only when tracking with the app closed is the reason your app exists. All of these must be true at the same time.
backgroundlocationon://) and Stop (backgroundlocationoff://). Tracking never starts silently.One feature, one purpose, the user in control. Replace the example with your own feature, but keep the structure.
Feature: Shift tracking for couriers. What it does: While a courier is on shift, [App name] shares the courier's location with the dispatch team every [30 seconds], so customers receive accurate arrival times and dispatchers can reassign orders when a courier is delayed. Why it needs background access: Couriers drive with the phone locked or with a navigation app in the foreground. If location stopped while [App name] is not visible, dispatch would lose the courier for the whole drive, which defeats the core purpose of the app. How the user controls it: The courier taps Start shift. The app shows an in-app disclosure and the Android permission prompt, then an ongoing notification while tracking runs. Tapping End shift stops tracking immediately. No location is collected outside a shift. Video: [YouTube link], [28] seconds, showing the disclosure, the permission prompt, the start of a shift, the app in the background with tracking active, and the end of the shift. Test account: see Sign-in details, instruction set 'Courier'.
requireBackgroundLocation, the manifest blocks and the backgroundlocationon:// calls agree with that decision.Only if the feature qualifies. The video proves how a qualifying feature works; it cannot turn a store finder or a personalized feed into a core background use case.
No. The HTML5 geolocation API works while the app is open as long as requireLocation is true and the foreground location permissions stay in the manifest. Only tracking while the app is closed goes away.
No. The customer watches the map while the screen is open, which is foreground use, and Google names customer-side delivery tracking as a typical failure. Send push notifications for status changes instead.
If it keeps collecting location while the user is elsewhere, Google applies the background location requirements to it. A foreground service is only acceptable as the continuation of something the user started, and it must stop as soon as that task is done.
Usually an older bundle on a testing track still contains it, or the declaration was not updated. Replace every active bundle and update the declaration, then send the changes for review.
Same result, different amount of work on your side. All three come with the approval guarantee and 24/7 human support.
$109 per platform, one-time
The WebViewGold license: a finished Xcode or Android Studio project. Paste your URL, set name and icon, switch on features, build and submit. Free updates forever.
See plans on the main page$349 per license, one-time add-on
No Mac, no Xcode, no Android Studio: configure in the browser, we build both apps in the cloud and hand them to App Store Connect and the Play Console.
How the Cloud Builder works Try the free demo$698 per platform $798
Send us your URL and icon. Our team configures, builds and delivers your app within 72 hours, white-label, with source projects. Both platforms for $1,158.
Full Service details Powered byWinter Sale prices valid until December 31, 2026.
App Store & Google Play approval guarantee – or your money back within 14 days
Rather hand it over? Full Service: we configure, build and deliver within 72 hours, from $698 per platform. Questions? Chat with us 24/7.
Refunds are granted under the conditions listed in our FAQ: a non-content rejection by Apple and/or Google, claimed within 14 days after purchase.