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

Payments

RevenueCat setup for web-wrapped apps, end to end

RevenueCat turns two store billing systems into one product catalog, one webhook and one "is this user subscribed?" answer. WebViewGold ships with the RevenueCat integration built in: paste two keys, trigger purchases from a link in your web app, and let the webhook update your backend. This guide goes from store products to a working paywall.

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

1. Create the products in both stores

Use identical product IDs on both platforms; it keeps RevenueCat and your backend simple.

  1. App Store Connect

    Your app → Monetization → Subscriptions → create a subscription group, then the products (reference name, product ID such as premium_monthly, duration, price, localized display name, review screenshot). One-time items go under In-App Purchases as consumable or non-consumable.

  2. Google Play Console

    Monetize → Products → Subscriptions → product ID premium_monthly → a base plan (monthly, auto-renewing) and optional offers such as a free trial. One-time items under In-app products. Activate them.

  3. Status check

    Apple products must reach "Ready to Submit"; the first in-app purchase is reviewed together with a build, so attach it to the version in App Store Connect. Play products must be active and the app must be published at least to a testing track.

2. Set up the RevenueCat project

Fifteen minutes in the RevenueCat dashboard.

  1. Add the App Store app

    Project → Apps → App Store: enter the bundle ID (it must match the Xcode project and App Store Connect exactly), the App-Specific Shared Secret or an In-App Purchase Key from App Store Connect, and optionally an App Store Connect API key so products can be imported.

  2. Add the Play Store app

    Package name plus a Google Cloud service account JSON with access to the Play Developer API, as the RevenueCat docs describe.

  3. Products, entitlement, offering

    Import or add the product IDs for both apps. Create an entitlement called premium and attach every product to it. Create an offering (default) with packages such as monthly and annual; if you want RevenueCat's hosted paywall, design it under Paywalls for that offering.

  4. Copy the keys

    Project settings → API keys: the public SDK key per platform (appl_… for iOS, goog_… for Android) and the project ID from the project settings. These are the two values WebViewGold needs.

I am very happy I bought this app! Extremely easy and great documentation. Was in contact with the customer service, they replied very quickly and very friendly. They solved my question within a day. 10/10 would recommend.

Nelis Geiger · CodeCanyon

3. Config keys in WebViewGold

Two lines per platform, then rebuild. The iOS in-app purchase docs and the Android docs show the surrounding options.

text
// Config.swift (iOS)
static let revenueCatAPIKey = "appl_xxxxxxxxxxxxxxxxxxxx"
static let revenueCatProjectID = "projxxxxxxxx"

// Config.java (Android)
public static final String REVENUECAT_API_KEY = "goog_xxxxxxxxxxxxxxxxxxxx";
public static final String REVENUECAT_PROJECT_ID = "projxxxxxxxx";

4. Trigger purchases from the web app

external_id becomes the RevenueCat app user ID, so pass your own stable user ID (not an email that can change). Only call these links inside the app; on the web, show Stripe.

javascript
const userId = currentUser.id;   // your Supabase / Firebase user id
const inApp = /WebViewGoldApp/.test(navigator.userAgent);

// Buy one specific product (ID as shown in the RevenueCat dashboard); works on iOS and Android
function buy(productId) {
  if (!inApp) return showStripeCheckout(productId);
  window.location.href = "revenuecat://purchase?external_id=" + encodeURIComponent(userId) + "&product=" + productId;
}

// Or open a RevenueCat paywall built from an offering
function openPaywall() {
  window.location.href = "revenuecat://launchPaywall?external_id=" + encodeURIComponent(userId) + "&offering=default";
}

// Restore after reinstall or on a new device (required by Apple for subscriptions and non-consumables)
function restore() { window.location.href = "restoreinapppurchases://"; }

// Manage or cancel: opens the store's subscription screen
function manage() { window.location.href = "cancelinapppurchase://"; }

5. Webhooks to your backend

The purchase sheet is native; your database learns about it through RevenueCat's webhook. In RevenueCat go to Integrations → Webhooks, enter the URL of a Supabase edge function, Cloud Function or API route, and set an Authorization header value that your endpoint checks. Handle at least INITIAL_PURCHASE, RENEWAL, PRODUCT_CHANGE, CANCELLATION, BILLING_ISSUE, EXPIRATION and TRANSFER. Each event carries app_user_id (your user ID from external_id), the product, the store and the expiration date; write them into a subscriptions table and let the web app read "active until" from there. Never trust a flag stored on the device.

After the native sheet closes, the webhook usually arrives within seconds. Have the web app poll your backend for up to ten seconds and then unlock, with a "still processing, pull to refresh" fallback. For support cases, RevenueCat's REST API returns the subscriber state on demand, and the customer view in the dashboard shows every transaction. If you sell on the web through Stripe as well, its webhooks write the same table, so one entitlement check serves both channels.

6. Restore, sandbox testing and review

  • A visible Restore Purchases button (settings or paywall) calling restoreinapppurchases://. Apple checks for it.
  • Show price, duration, renewal terms and links to Terms of Use and Privacy Policy on the paywall; Guideline 3.1.2 rejections are mostly missing paywall text. See the 3.1.2 guide.
  • iOS sandbox: App Store Connect → Users and Access → Sandbox testers; on the test iPhone sign in under Settings → App Store → Sandbox Account. TestFlight builds use the sandbox automatically; subscriptions renew every few minutes there so you can test expiration.
  • Android: Play Console → Setup → License testing, add tester Gmail accounts, install from the internal testing track; test purchases are not charged.
  • RevenueCat shows sandbox transactions with a sandbox toggle in the dashboard; your webhook receives them with an environment flag, so your table can ignore or mark them.
  • For review, give Apple a demo account without an active subscription and describe the paywall in the notes (template in the review notes guide). Reviewers purchase in sandbox.
  • Localized prices: call getstorelocation:// (or enable auto-injection) to read storeLocation and show the price of the user's storefront on your web paywall.

Frequently asked questions

Does RevenueCat replace Stripe?

No. Stripe stays on the website for web purchases. RevenueCat handles the store purchases, and both write the same entitlement table in your backend.

What should external_id be?

A stable user identifier from your auth system. If a user can buy before logging in, use a device identifier from the WebViewGold UUID API (get-uuid://) and alias it to the account later.

Is the webhook mandatory?

Strongly recommended. Without it, your backend would have to query RevenueCat on every check. With it, your database is the source of truth.

Can the same product have different prices in the two stores?

Yes. Prices are set per store; RevenueCat maps both to the same entitlement.

What happens if someone opens the purchase link on the website?

Nothing; revenuecat:// is only understood by the app. Guard the button with the user agent check and show Stripe on the web.

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.