๐Ÿ’ธIn-App Purchases

Before reading this page, please make sure you've set up your RevenueCat account.

๐ŸˆSetup RevenueCat App

To offer a seamless purchasing experience across platforms, use In-app Purchases for your mobile app users and your preferred web payment processor for website users. The Browser Info feature helps you identify the user's platform to apply the correct payment method.

๐Ÿง‹ Bubble.io Plugin

[Element] Natively - Purchases

Events:

  • Purchase Success

  • Purchase Failed

  • Set Customer Success

  • Set Customer Failed

  • Purchase Cancelled

  • Customer ID Received

  • Get Price Success

  • Get Price Failed

  • Restore Purchase Success [iOS]

  • Restore Purchase Failed [iOS]

  • Paywall - purchase success

  • Paywall was not presented //Paywall was not presented.

  • Paywall - cancelled //Paywall was presented and the user cancelled without executing an action.

  • Paywall - error //Paywall was presented and an error occurred performing an operation.

  • Paywall - Entitlement ID missing //Only returned when using [Action] Show Paywall if needed and Entitlement ID is not provided.

  • Paywall - Offering ID was not found //Only returned when provided Offering ID is not valid.

  • Paywall - restore purchase success [iOS]

States:

  • Latest Transaction Id - Transaction Id after Purchase Package

  • Latest Customer Id - Customer Id after Set Customer ID or Purchase Package

  • Latest Error - Empty if no error

  • Latest GetPrice price - 9.99

  • Latest GetPrice price (Localized) - "$9.99" / "9.99 USD"

  • Latest GetPrice currency - "USD", "UAH", etc.

  • Latest PurchasePackage packageId

Actions:

  • Purchase Package - Initiate purchase of product or subscription

    • Old Product ID (Android) - Specify this field when you want to upgrade/downgrade the current Android subscription.

  • Set Customer ID - Link your user's id with RevenueCat customer

    • Customer Identifier - (We're recommending using a Current User's unique id to identify customers in the RevenueCat dashboard)

  • Reset Customer ID - Unlink Customer ID from a device

  • Get Package Price - Returns a price for specific product

  • Get Customer ID - Returns a current customer id

  • Show Paywall - displays the paywall

    • Offering ID - if not provided, will be shown the default offering.

  • Show Paywall if needed - automatically displays the paywall only if the user doesn't have an active entitlement

    • Offering ID - if not provided, will be shown the default offering.

    • Entitlement ID - this field is required.

  • Restore Purchase [iOS] - Restores purchases (Handled by RevenueCat automatically)

How to use?

  1. Make sure you've set up your Revenue Cat for your app

  2. Add revenuecat_apiKey in plugin settings. To find API Key, go to RevenueCat App > API keys > Secret API keys.

  3. Call Set Customer ID

  4. When the Set Customer Success event fires, call Purchase Package action

How to verify User's subscription?

Make sure you've added revenuecat_apiKey in plugin settings. To find API Key, go to RevenueCat App > API keys > Secret API keys. โš ๏ธโš ๏ธโš ๏ธ MAKE SURE YOU'RE USING API KEY V1

RevenueCat - Verify Subscription

  • Customer ID - Revenue cat user id that was used on RevenueCat Login.

  • Entitlements ID - your entitlements id, more details here.

Returns a result as:

  • Product ID - text

  • Purchase Date - date

  • Grace Period Expires Date - date

  • Expiration Date - date

  • Is Active - yes / no (Expiration Date > Current Date)

  • Error - empty text if no error

Bubble Setup example:

  1. On each User Login or first Signup you need to set the RevenueCat customer ID to your own user's unique id.

  2. Purchase a subscription (package) with action

  3. Verify user's subscription whenever you need it

  4. If you have any issues and, for some reasons, purchases doesn't work. You can check Latest Error value from Natively Purchases element

  5. You can also use RevenueCat API for your purpose (for example, validation of purchases)

๐Ÿ›  JavaScript SDK

NativelyPurchases

const purchases = new NativelyPurchases();
const login_callback = function(resp) {
    console.log(resp.status); // SUCCESS or FAILED
    console.log(resp.customerId); // Customer Id
    
    // Empty if no error (should contain an error if status === "FAILED"
    console.log(resp.error); 
};

// Link your user with the customer on RevenueCat
const userId = "sdfdsr-2345-3rsd-fsd3432";
const userEmail = "[email protected]";
purchases.login(userId, userEmail, login_callback);

// Unlink your user with the customer on RevenueCat
const logout_callback = function(resp) {
    console.log("Logged out");
}
purchases.logout(logout_callback);

// Get the current user's customer id (Useful in case you're not linking the user with the RevenueCat customer)
const customer_id_callback = function(resp) {
    console.log(resp.customerId);
}
purchases.customerId(customer_id_callback);

// Make a purchase
const packageId = "$rc_monthly";
const oldProductID = "$rc_yearly"; // Android only. Specify this field when you want to upgrade/downgrade the current Android subscription.
const purchases_package_callback = function(resp) {
    console.log(resp.status);
    console.log(resp.transactionId); //Legacy. Will not have value in a recent build
    console.log(resp.error);
};
purchases.purchasePackage(packageId, purchases_package_callback, oldProductID);

// Get price
const packageId = "$rc_monthly";
const price_callback = function(resp) {
    console.log(resp.status); // SUCCESS / FAILED
    console.log(resp.price); // "9.99"
    console.log(resp.localized); // "$9.99" or "9.99 USD"
    console.log(resp.currency); // "USD"
    console.log(resp.error); // Empty if no error
};
purchases.packagePrice(packageId, price_callback);

// Restore a purchase
const restore_callback = function(resp) {
    console.log(resp.status); // SUCCESS / FAILED
    console.log(resp.customerId);
    console.log(resp.error);
};
purchases.restore(restore_callback);

// --- Paywalls ---

const show_paywall_callback = function(resp) {
    console.log(resp.status); // SUCCESS or FAILED
    
    // Contains a result message if status === "FAILED" (not_presented, cancelled, error) or status === "SUCCESS" (purchased, restored)
    console.log(resp.message); 
    
    // Empty if no error (should contain an error if status === "FAILED", e.g. entitlement_id_missing, offering_not_found)
    console.log(resp.error); 
};

// Show a paywall
const offeringId = "my_main_offering"; // Optional: specify which offering to show. If not specified, the default will be used
const showCloseButton = true; //This parameter will be overwritten by the paywall's template
purchases.showPaywall(showCloseButton, offeringId, show_paywall_callback);

// Show a paywall if the user doesn't have an active entitlement
const entitlementId = "pro_access"; // This parameter is required
const showCloseButton_ifNeeded = true; // This parameter will be overwritten by the paywall's template
const offeringId_ifNeeded = "my_main_offering"; // Optional: specify which offering to show. If not specified, the default will be used
purchases.showPaywallIfNeeded(entitlementId, showCloseButton_ifNeeded, offeringId_ifNeeded, show_paywall_callback);

How to verify subscription with JS?

You need to fetch a user from RevenueCat API and verify it's entitlements. More details can be found here.

Where to find Package ID?

You can find it in your RevenueCat App dashboard, more details here

We recommend checking this guide if you plan to use a Stripe subscription through RevenueCat.

Create a request in API Connector (more details about the endpoint you can find here)

Where fetch_token & app_user_id is:

Last updated

Was this helpful?