Skip to content
WebViewGold Vibe Coding to App Store
English
Get WebViewGold

Google Play rejection

Background location rejected on Google Play: qualify with a declaration or switch to foreground location

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.

  • Approval guarantee – or money back within 14 days
  • No coding needed
  • One-time payment, free updates
  • 24/7 human support
  • Made in Germany since 2014 · ISO 27001

What the background location policy allows

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.

How the rejection reads

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.

Does your feature really need background location?

FeatureVerdictWhat to use
Store finder, "near me" list, check-in buttonForeground onlyHTML5 geolocation while the screen is open
Customer watching a courier on a mapForeground only; Google lists customer-side delivery tracking as a typical failureLive map while the screen is open, push for status changes
Courier or field worker sharing location during a shiftCan qualify if it is the core of the appTracking the user starts and stops, with an ongoing notification
Recording a run or ride with the screen offCan qualify (fitness)Tracking started for the workout and stopped at its end
Safety alert when a family member leaves an areaCan qualify (safety)One clearly declared feature with a disclosure
Local news, weather or offers by regionDoes not qualifyForeground or coarse location, or a city picker
Ad targeting, analytics, attributionNeverRemove 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!

Kevin Joling · FlightConnections & TrainConnections · Trustpilot

Where background location comes from in a WebViewGold app

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.

The manifest blocks

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.

The URL schemes

backgroundlocationon:// and backgroundlocationoff:// start and stop tracking from your web app. Calling them from a user action is what makes the tracking user-initiated.

Libraries

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.

Path A: switch to foreground location (the right fix for most apps)

About thirty minutes plus review time.

  1. Turn off the background switch

    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.

  2. Disable the service in the manifest

    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.

  3. Remove the calls and the promises

    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.

  4. Ask in context

    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.

  5. Rebuild and replace every track

    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.

  6. Update the declaration

    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.

Path B: keep background location and get it approved

Only when tracking with the app closed is the reason your app exists. All of these must be true at the same time.

  • One feature, clearly named. "Shift tracking for couriers", not "location features". Declaring several features leads to a rejection.
  • User-initiated. The user taps Start (your web app calls backgroundlocationon://) and Stop (backgroundlocationoff://). Tracking never starts silently.
  • A prominent disclosure before the location prompt, containing the word location, a phrase such as "when the app is closed or not in use", every feature that uses it, and whether the data is used for ads.
  • A video of 30 seconds or less (an unlisted YouTube link works well) that shows the disclosure, the runtime permission prompt and the feature working with the app in the background.
  • Reviewer access: a demo account in Sign-in details that reaches the feature directly; see the sign-in details guide.
  • Matching paperwork: the privacy policy and the Data safety form declare precise location collected in the background, and the store description mentions the feature.
  • The foreground service declaration for the location type as well, because the GPSService block runs as a location foreground service; see the foreground service guide.

Template: the declaration text for a qualifying feature

One feature, one purpose, the user in control. Replace the example with your own feature, but keep the structure.

Adapt for the Location permissions declaration in Play Console
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'.

Checklist

  • Background location is either removed from every track or tied to one declared core feature.
  • requireBackgroundLocation, the manifest blocks and the backgroundlocationon:// calls agree with that decision.
  • Location is requested from the feature screen, after an in-app disclosure.
  • The App bundle explorer shows only the location permissions you intend to use.
  • If you keep it: declaration, video, disclosure, privacy policy, Data safety form and demo account all describe the same single feature.

Frequently asked questions

Will a better video get my feature approved?

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.

Will removing background location break the geolocation in my web app?

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.

My customers track their delivery on a map. Do I need background location?

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.

Is a location foreground service the same as background location?

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.

I removed the permission. Why is my update still blocked?

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.

Three ways to get your app into the stores

Same result, different amount of work on your side. All three come with the approval guarantee and 24/7 human support.

Do it yourself

$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

Cloud Builder

$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

Full Service

$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 by WeSetupYourWebViewApp

Winter Sale prices valid until December 31, 2026.

Ready to ship your app?

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.