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

Google Play rejection

Payments policy rejection: when your Android app must use Google Play Billing and when Stripe is allowed

Outside a few regional programs, digital goods sold inside an Android app have to go through Google Play Billing. Physical goods and real-world services stay on Stripe. Most rejected web-wrapped apps simply show their web checkout for a subscription inside the app; here are the three ways to fix that, and what the 2025 and 2026 regional changes do and do not change.

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 Payments policy says

Google's Payments policy has a simple core. If users pay for an app or buy digital things inside it (premium features, subscriptions, content, credits or virtual currency, an ad-free version, access to cloud software), the transaction goes through Google Play's billing system, unless an exception or one of Google's regional programs applies. Purchases of physical goods (groceries, clothing, electronics) and physical services (transport, food delivery, gym memberships, event tickets) are exempt and use your own payment provider, such as Stripe. A few other categories are exempt as well, including peer-to-peer payments, online auctions and tax-exempt donations.

The second half of the rule is about steering. Inside the app you may not lead users to another way of paying for digital goods: no links or buttons to a web checkout, no WebView that opens your Stripe page, no wording that encourages buying outside the app, unless a program you are enrolled in allows it. Google explicitly allows consumption-only apps: users log in and use what they paid for elsewhere, as long as nothing can be bought inside the app. For those apps, Google's Payments policy FAQ even allows mentioning other purchase options, as long as there is no direct link.

How the rejection reads

The Policy status entry cites the Payments policy and usually says that the app offers digital content, features or subscriptions through a payment method other than Google Play's billing system, or that it links users to one. The screenshot is typically your pricing page, an Upgrade banner or the Stripe Checkout page opened inside the app. For a live app the issue can arrive as a warning with a deadline and escalate to a removal if it is not fixed.

What you sell decides how the Android app may charge

You sellInside the Android appNotes
A subscription to your app (SaaS plan, Pro tier)Google Play Billing, or no purchase at all in the appThe most common Payments rejection for vibe-coded apps
AI credits, tokens, generationsGoogle Play Billing (consumable product)Credits bought on your website can still be used in the app
Courses, templates, downloadable contentGoogle Play BillingDigital content consumed in the app
An ad-free versionGoogle Play BillingWith the manual API, disableadmob=true turns ads off after the purchase
Physical products from your shopStripe or your shop checkoutPlay Billing is not meant for physical goods
In-person services: bookings, cleaning, rides, food delivery, event ticketsStripePhysical services are exempt
DonationsDepends on the recipientTax-exempt donations are exempt; check the policy for your case

My iOS WebView is finally approved. Thanks!!

Taha Farooqui · CodeCanyon

Regional programs, status November 2026: check before you rely on them

The core rule has a growing number of regional exceptions, and this is the part of Play policy that changed most in 2025 and 2026:

  • United States. Following the Epic v. Google case, Google's US help page says that since October 29, 2025 it no longer requires Google Play Billing for US users and no longer prohibits links to outside offers. Developers who offer alternative billing or external links do so through Google's US alternative billing and external content links programs, and enrolled developers report transactions and pay service fees since October 1, 2026. Google and Epic agreed on a revised settlement in March 2026, so more changes may follow.
  • EEA and UK. User choice billing and alternative billing programs let eligible developers offer their own billing next to Google's, and since June 2026 Google's billing choice program adds options for users in these markets.
  • Fees. Google announced in June 2026 a structure, starting June 30, 2026 in the US, UK and EEA, that separates a service fee (charged whichever payment method you use, including alternative billing and external links) from a billing fee that applies only when you use Google Play Billing.
  • Other countries. Several other markets have alternative billing programs with their own rules.

What this means for you: these programs are opt-in, come with enrollment, user-interface and reporting requirements, apply only to users in the covered region, and do not make your web checkout fee-free. Until you are enrolled and compliant, treat the core rule as binding, and check Play Console and the Help Center for the current terms before you build anything around them.

Three ways to fix the rejection (plus one exemption)

Sell through Google Play Billing

WebViewGold triggers Play purchases from your web app: revenuecat://purchase?external_id=…&product=… with RevenueCat, or the manual inapppurchase:// and inappsubscription:// links, plus restoreinapppurchases:// and cancelinapppurchase://. It requires the Extended License; setup is in the Android in-app purchase docs and the RevenueCat guide.

Go consumption-only

Hide every way to buy digital goods inside the app: the pricing page, upgrade buttons, credit top-ups, the billing portal. Subscribers who paid on your website log in and get everything. It is the fastest fix and needs no new products, but it earns nothing inside the app.

Use a regional program

If most of your users are in a covered region and the numbers work, enroll in the matching program, follow its user-interface and reporting rules, and offer the alternative only to eligible users. getstorelocation:// puts the Play Store country into storeLocation, which helps with regional pricing; check how the program defines eligible users before you branch on it.

Physical goods stay on Stripe

If you sell physical products or in-person services, keep Stripe. Make sure nothing digital, such as a premium membership or downloads, is sold through the same checkout, because that part needs Play Billing.

Fix it in your web app and resubmit

Consumption-only takes an afternoon; Play Billing takes a day or two including product setup.

  1. Find every payment entry point

    Pricing pages, upgrade banners, paywalls, buy-more-credits buttons, the Stripe customer portal, links in emails that open inside the app, and server redirects to Checkout after sign-up or when a trial ends. The reviewer will find the one you forget.

  2. Recognize the app

    Set USER_AGENT in Config.java to the default user agent plus a token such as WebViewGoldApp, and check for it in the browser and on the server, so you can switch off redirects as well as buttons. The Stripe vs in-app purchase guide shows the full pattern.

  3. Decide per product

    Digital products: Play Billing or hidden. Physical products and services: Stripe. Write the decision down; your iOS app needs the same list, and Apple's rules differ (see the Guideline 3.1.1 guide).

  4. Hide what the app may not show

    The custom CSS file of the Android project applies only inside the app (custom CSS and JavaScript), so you can hide pricing and checkout elements there without touching your website, as shown below. Server-side redirects to Stripe need the user agent check.

  5. Or wire up Play Billing

    Create the products in Play Console, connect RevenueCat or use the manual links, give purchases a successful_url that unlocks the account on your server, and test with license testers before you submit.

  6. Check your external links

    Opening the Stripe page in Chrome through EXTERNAL_LINK_HANDLING_OPTIONS or BROWSER_WHITELIST does not help. A link from the app to a web checkout for digital goods is still steering, wherever it opens.

  7. Resubmit with a ready review account

    Give the review account in Sign-in details the paid entitlement, describe in the instructions how paying works in the app (Play Billing or consumption-only), upload the new version and reply in Policy status.

custom.css for a consumption-only Android app

Goes into the custom CSS file of the WebViewGold Android project. The selectors are examples; use the classes and IDs your web app really uses.

text
/* Hide every way to buy digital goods inside the Android app */
.pricing-table,
.upgrade-banner,
.buy-credits-button,
a[href*="checkout.stripe.com"],
a[href*="billing.stripe.com"],
a[href$="/pricing"] {
  display: none !important;
}

Prompt: make the web app Payments-compliant on Android

For the consumption-only route. The agent changes only what the app sees and leaves your website checkout alone.

Paste into Claude Code, Cursor, Codex or your builder chat
My web app runs inside an Android app built with WebViewGold. Google Play rejected it under the Payments policy because the app sells [our Pro subscription / AI credits] through Stripe.
The app sends a custom user agent that contains 'WebViewGoldApp'.
When a page or request comes from the app:
- Hide every pricing page, upgrade button, paywall, credit top-up and link to Stripe Checkout or the Stripe customer portal for digital products.
- Remove server-side redirects to Stripe after sign-up or when a trial ends; show the normal app instead.
- Show no text that encourages buying on the website, and no links to it.
- Keep the checkout for physical products [list them, or write: none] unchanged.
- Users who subscribed on the web keep full access after logging in.
Outside the app, change nothing.
List every payment entry point you found and every file you changed, so I can check each one on a phone.

Patterns that still get rejected

  • An "Upgrade on our website" button or link, even if it opens Chrome instead of the WebView.
  • A pricing page that is gone from the menu but still reachable from a banner or an email link inside the app.
  • Price comparisons such as "cheaper on the web" next to a link.
  • A sign-up flow that ends on Stripe Checkout for the Pro plan.
  • An alternative checkout for US or EEA users without being enrolled in the matching program.

Frequently asked questions

Can I keep selling subscriptions on my website?

Yes. Google regulates what happens inside the app. Your website, your emails and your marketing can sell any way you like, and people who subscribed there can log in to the app and use everything.

Does the US court case mean I can use Stripe in my Android app now?

For US users Google no longer requires Play Billing and allows links to outside offers, but it handles this through its US alternative billing and external content links programs, with enrollment, reporting and service fees. Read Google's US help page and enroll before you ship a Stripe button to US users, and keep it away from users in other countries.

My app sells physical products. Why was it rejected?

Usually because something digital is also for sale, such as a membership with app perks, digital downloads or a subscription for app features, or because the screens make it look like one. Check every product a reviewer can reach in the app.

Do I need RevenueCat for Google Play Billing?

No. WebViewGold also has manual links for one-time purchases and subscriptions. RevenueCat is useful when you sell on iOS and Android and want one place for entitlements and webhooks.

Do I need a special WebViewGold license for in-app purchases?

Yes. Using in-app purchases in an end product requires the WebViewGold Extended License, as the in-app purchase documentation states.

Does the same apply to my iOS app?

The principle is similar, but Apple's rules, exceptions and recent US changes differ in detail. Handle each store separately; the App Store side is covered in the Guideline 3.1.1 guide.

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.