SDK

Android in-app subscriptions backend (Google Play Billing) that works with the RevenueCat SDK

To run Android in-app subscriptions on RevenueDot, keep the RevenueCat Kotlin SDK and set Purchases.proxyURL to https://api.revenuedot.app before Purchases.configure, with EntitlementVerificationMode.DISABLED. RevenueDot reads each purchase from the Google Play Developer API and receives real-time developer notifications. The stock SDK still sends diagnostics to RevenueCat.

Free up to $10,000 a month in tracked revenue. Works with the RevenueCat SDK you already ship.

One line

Purchases.proxyURL points the SDK at RevenueDot. Kotlin packages stay com.revenuecat.purchases.*.

Google Play checked server-side

Purchase tokens are read from the Play Developer API and acknowledged.

Tested on an emulator

The unmodified Android SDK 10.24.0 passes a Test Store purchase on an Android 15 emulator.

Fork fixes the leaks

The fork sends diagnostics, paywall events and ad events to your proxy URL too.

Steps

How to add subscriptions to an Android app with RevenueDot

  1. 01

    Create a free Cloud project and a Google Play app

    Start free on Cloud and add a Google Play app with your package name. Copy its goog_ public key.

  2. 02

    Connect Google Play

    Upload a service account key and add a Pub/Sub push subscription for real-time developer notifications. See Google Play setup.

  3. 03

    Create your catalog

    Add products with store_identifier as subscriptionId:basePlanId, an entitlement such as pro and a current offering.

  4. 04

    Set the proxy URL before configure

    In Application.onCreate, set Purchases.proxyURL and configure with verification DISABLED, as in the code below.

  5. 05

    Buy and check the entitlement

    Call awaitPurchase and read customerInfo.entitlements["pro"]?.isActive. The purchase token goes to POST /v1/receipts.

  6. 06

    Test on a test track or with the Test Store

    Use a test_ key in a debug build, or a Play license tester on an internal test track.

Kotlin

The Android proxy URL change

The Android emulator reaches your computer at http://10.0.2.2:8787 when you self-host locally. Plain http needs a network security config that allows cleartext traffic to that host.

Point the SDK at RevenueDotKotlin
// Before Purchases.configure
Purchases.proxyURL = URL("https://api.revenuedot.app")
Purchases.configure(
    PurchasesConfiguration.Builder(this, "goog_...")
        // Default is INFORMATIONAL, which logs every response as a failed signature check.
        .entitlementVerificationMode(EntitlementVerificationMode.DISABLED)
        .build()
)

Kotlin

Check an entitlement and make a purchase

RevenueCat's coroutine API, unchangedKotlin
val customerInfo = Purchases.sharedInstance.awaitCustomerInfo()
val isPro = customerInfo.entitlements["pro"]?.isActive == true

val offerings = Purchases.sharedInstance.awaitOfferings()
val pkg = offerings.current?.availablePackages?.firstOrNull() ?: return
try {
    val result = Purchases.sharedInstance.awaitPurchase(PurchaseParams.Builder(activity, pkg).build())
    val nowPro = result.customerInfo.entitlements["pro"]?.isActive == true
} catch (e: PurchasesTransactionException) {
    if (e.userCancelled) return
}

Fork

The RevenueDot fork package for Android

The fork lives at github.com/revenuedot/purchases-android. Imports do not change. It also routes diagnostics, paywall events and ad events to your proxy URL, which the stock SDK still sends to RevenueCat. It is not published to Maven Central yet (checked October 2026). The planned coordinates:

Planned fork installGradle
// build.gradle.kts
implementation("app.revenuedot.purchases:purchases:<version>")
// still: import com.revenuecat.purchases.*

Notes

Android details worth knowing before you ship

  • Migrating from RevenueCat? Call syncPurchases() once on the first launch of the update. It also gives RevenueDot any Google purchase token the importer could not find.
  • Test Store keys work in debug builds only. A release build shows an error screen and stops on purpose.
  • Amazon: the same SDK runs on Fire devices with AmazonConfiguration. See Amazon Appstore setup.
  • Web purchases: an intent filter for your redemption scheme plus redeemWebPurchase gives buyers from a RevenueDot purchase link access in the app.
  • Before you ship: run a purchase with a license tester and check it on the customer page.

FAQ

Android: questions people ask

How do I add in-app subscriptions to an Android app?

Use the RevenueCat Kotlin SDK on the device and a server that checks Google Play purchases. With RevenueDot you set Purchases.proxyURL, add a Play service account and a Pub/Sub push subscription, create products as subscriptionId:basePlanId and call awaitPurchase.

Does the stock Android SDK still talk to RevenueCat after I set a proxy URL?

Purchases, customer info and offerings go to your proxy URL. Diagnostics, paywall events and ad events still go to RevenueCat's hosts in the stock SDK. The RevenueDot fork sends them to your server.

Do I need to acknowledge Google Play purchases myself?

No. RevenueDot acknowledges each purchase after reading it from the Play Developer API, because Google refunds purchases left unacknowledged for 3 days.

How do Google Play base plans map to RevenueDot products?

Set the product's store_identifier to subscriptionId:basePlanId, for example pro:monthly. Use the product ID for one-time products.

How do I test Android purchases without Play Console?

Create a Test Store app, use its test_ key in a debug build and tap the successful purchase in the SDK's dialog. For real Google test purchases, add license testers and use an internal test track.

Get started

Run subscriptions without the revenue share.

Start free on RevenueDot Cloud, free up to $10,000 a month in tracked revenue, or move an existing RevenueCat app with one line of code.

Already have an account? Sign in · Prefer your own servers? Self-host free