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 pagePayments
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.
Use identical product IDs on both platforms; it keeps RevenueCat and your backend simple.
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.
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.
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.
Fifteen minutes in the RevenueCat dashboard.
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.
Package name plus a Google Cloud service account JSON with access to the Play Developer API, as the RevenueCat docs describe.
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.
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.
Two lines per platform, then rebuild. The iOS in-app purchase docs and the Android docs show the surrounding options.
// 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";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.
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://"; }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.
restoreinapppurchases://. Apple checks for it.getstorelocation:// (or enable auto-injection) to read storeLocation and show the price of the user's storefront on your web paywall.No. Stripe stays on the website for web purchases. RevenueCat handles the store purchases, and both write the same entitlement table in your backend.
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.
Strongly recommended. Without it, your backend would have to query RevenueCat on every check. With it, your database is the source of truth.
Yes. Prices are set per store; RevenueCat maps both to the same entitlement.
Nothing; revenuecat:// is only understood by the app. Guard the button with the user agent check and show Stripe on the web.
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.