Get help with your SDK implementation.
Recently active
I’m in the process of implementing RevenueCat. (Flutter-IOS)I followed the steps on the documents. My product appeared on the revenueCat UI I’ve created an offering and a base entitlement + created a paywall Attached entitlement a product (I have only one.) Made a subscription succesfully and that appears on the RevenueCat side. ***But no attached entitlement*** So I can’t use themAny help appreciated. Even if this is a known issue, I couldn’t find any source to solve it.thank you
Hi friends, i am working on project using swift revenuecat as the purchasing library,now i want to detect from my code if the paywall was not set for the offering, but i cant find any way to do that, the problem is the return value from offerings.current.paywall is always nil, ofcourse i already setup in the dashboard, event the paywall can be shown in appif there is some one who have any experience with this, please help?here is my code to make more clean, Purchases.shared.getOfferings { offerings, error in guard let offering = offerings?.current, error == nil else { print("❌ Failed to fetch offerings:", error?.localizedDescription ?? "") // fallback to custom popup if failed presentCustomSubscription(on: visibleController) return } print("Current offering:", offerings?.current?.identifier ?? "none") print(offering.paywall?.templateName ?? "none"); // Check if paywall is set if let paywall = offerin
After integrating RevenueCat into Unity, I conducted a test using a sandbox account. After logging into a sandbox account with VIP status in the game, when I switched the account in the iOS background, the game still showed VIP status. My game does not have its own account; it's a mini-game. Is there a solution to this? Is this normal?
Hi RevenueCat community,I’ve seen the following question here about the ETA of Paypal as payment method to a flutter app.As this question points to an In-App-Purchase and with that to a different SDK I wanted to ask the same question for RevenueCat Web Billing. In the docs I can see that the current possible payment methods are credit card, google pay and apple pay. Stripe however is providing Paypal amongst many other payment methods. As RC Web Billing is using Stripe as payment gateway, I’m curious if there is a plan / ETA of adding Paypal as payment method to Web Billing as well. Best,Moritz
I have configured “Keep with original App User ID” as transfer behaviour which leads to binding of a subscription to a single userID.Now lets say user has bought the subscription while being logged into accountA, later at some point user uninstalls the app and logins with accountB in app, now playstore being the same, when user tries to subscribe again, the error will come: Product Already Purchased ErrorUpon triggering Purchases.restore or Purchases.sync, we will get RECEIPT_ALREADY_IN_USE, I want to show the user accountA details so user can log back in with correct account, however I can’t as revenue cat doesnt surface any usable info in above errors, like appUserId / receipt / token of the purchase from the previous account which I can query in my backend to fetch accountA details.What is the correct way here ?
Hello,Currently, I am considering deleting old records for "customers who are not on a premium plan" using a regularly scheduled batch process.At this time, in order to filter the target customers, I would like to obtain a list of "customers who have premium plan entitlements."With the current REST API, it is only possible to check the entitlements of one customer at a time. Considering rate limits, it is not realistic to perform this for all users.(https://api.revenuecat.com/v2/projects/{project_id}/customers/{customer_id} )Is it possible to achieve the above scenario using the current REST API?Or, do you have plans to develop this in the future?
I am running ASA campaigns but i want them to receive a completely different offer when they open the app than a user who organically downloaded the app. I cant see a way to target them in the revenucat dashboard, is this something that can be done via code?
I just purchased something in sandbox mode but the operation doesn’t appear on the customer’s history. Looking through the logs, I’ve seen this error. Haven't seen any posts about it - any additional information?Note that I'm using Superwall as the main paywall provider and RC is just observing.
We are using RevenueCat only for non-subscription in-app purchases (e.g. consumables). We currently handle reward distribution exclusively via webhook events on our backend. However, we’ve encountered some cases where a purchase fails (e.g. credit card limit exceeded or other payment method failures), but the frontend has no way to detect this and may incorrectly treat the purchase as successful. We’d like to ask: For non-subscription products, is there any way on the client side (React Native SDK) to detect if a purchase has failed right after calling Purchases.purchasePackage()? What specific webhook events does RevenueCat send to indicate: a successful non-subscription purchase? a failed non-subscription purchase (e.g. payment declined, card limit, etc)? Based on your answers, we plan to distribute in-app rewards only after receiving the successful purchase webhook. Additionally, we would like to clarify the behavior for “Billing Issues” or “Pending” states.If a purc
Hi everyone,I’ve seen older posts about RevenueCat working on Paywalls UI support for Unity, but nothing concrete has been released yet. Our app is built in Unity, and right now managing paywalls requires developer work every time we want to test or update something.Does anyone know if there’s an official timeline for Unity Paywalls UI (similar to what’s available on iOS/Android/Flutter)? Has there been any word from the team recently, or are there recommended workarounds in the meantime?Thanks in advance!
We recently upgraded `react-native-purchases` from `^7.4.0` to `^9.1.0` in order to comply with the **latest Android billing policy changes**. Since then, on **iOS 18 (EAS build, Expo Managed Workflow)**:- In-app purchases succeed- App Store receipts are received correctly- BUT transactions **do not show up on the RevenueCat dashboard**- Entitlements are **not unlocked** ⚠️ Android is working fine — purchases are tracked correctly and entitlements are unlocked as expected. No changes were made to our RevenueCat dashboard configuration. --- ### Environment:- "expo": "^51.0.0"- "react-native": "0.74.5"- "react-native-purchases": "^9.1.0"- Build: EAS Build - Expo Managed Workflow - Platform: iOS 18 The issue started **immediately after upgrading the SDK** and deploying via EAS build on iOS 18. We’d appreciate guidance on whether additional configuration is required for SDK v9 on iOS 18.
Copied Hi, I am facing an issue with the iOS version of my react native app. As the title suggests, when I perform an action in the app which causes the paywall to open (subscription paywall), it closes itself after a second or two of being visible with PAYWALL_RESULT of CANCELLED. Versions:"react-native-purchases": "^9.6.0","react-native-purchases-ui": "9.6.0",I cannot seem to find any other people who have documented experiencing this issue, and there are no warnings or errors thrown in xcode or the metro terminal which can give me any further clues.If you require any more information from me in order to help, do not hesitate to ask for it!Updated: also same issue on physical device as well Ipad, simulator and emulatorVideo recording link: Thanks very much.
Hi RevenueCat Team, We are using RevenueCat only for non-subscription in-app purchases (e.g. consumables). We currently handle reward distribution exclusively via webhook events on our backend. However, we’ve encountered some cases where a purchase fails (e.g. credit card limit exceeded or other payment method failures), but the frontend has no way to detect this and may incorrectly treat the purchase as successful. We’d like to ask: For non-subscription products, is there any way on the client side (React Native SDK) to detect if a purchase has failed immediately after calling Purchases.purchasePackage()? What specific webhook events does RevenueCat send to indicate: a successful non-subscription purchase? a failed non-subscription purchase (e.g. payment declined, card limit, etc)? Based on your answers, we plan to distribute in-app rewards only after receiving the successful purchase webhook. Additionally, we would like to clarify the behavior for “Billing Issues” or “
I’ve seen this issue reported already, but there’s specific context which seems to justify opening a new one.It appears on Sentry (Android, Kotlin Multiplatform) and it seems always triggered by Google Play’s automated testing (note however that the app is not live yet, so reports in general are limited).I’m not using `PaywallActivity` in the app. I’m not using a pre-configured paywall, but my own views + SDK functions.RevenueCat is initialized early in app’s lifecycle, as instructed.# I: There is no singleton instance. Make sure you configure Purchases before trying to get the default instance. More info here: https://errors.rev.cat/configuring-sdk**Issue ID:** 69094325**Project:** pivot**Date:** 08/10/2025, 14:03:31## Issue SummaryPurchases SDK not configured before use in PaywallActivity**What's wrong:** The **Purchases SDK** is not configured before use. This occurs in **PaywallActivity**.**In the trace:** The issue occurs after the app enters the foreground and **PaywallActivity**
Recently I have released a new iOS which has no user login, and it generates and stores unique App User ID on device. Many users reported that they cannot use the app across multiple devices, and I figured it is because of your setting “Transferring purchases seen on multiple App User IDs”. Seems there currently is no setting that would support my use case, which I believe must be quite common.In my other apps, with similar setup, the setting for “Transferring purchases seen on multiple App User IDs” is “Share between App User IDs (legacy)” and there it works well. - Why this setting is no longer supported? 😕I have gone through your docs once again, and it seems you recommend not setting App User ID in setups like this, but without it many things become unusable - I don’t have the same id for user device across all services (e.g. diagnostics, analytics, etc.), some external integrations won’t work, also can I grant an entitlement or set a different offering for an anonymous user?To su
I’ve migrated an Android app to RevenueCat that previously used Google Play Billing v5 (or older). The app offered several non-consumable one-time purchases. These were acknowledged, not consumed, and users could restore them via queryPurchaseHistoryAsync() before the migration. My app did not require a user to authenticate and relied completely on Google Play Billing to restore purchases made by users.After integrating RevenueCat, no existing users show active entitlements - even after calling both restorePurchases() and syncPurchases(). New purchases made via RevenueCat work fine.I’ve verified: Old product IDs still exist in Play Console and are added under Products in RevenueCat, mapped to the correct entitlements. Users are using the same Google Play account. No backend was used previously to store purchase tokens. queryPurchasesAsync(INAPP) now returns empty results for these users. It seems older non-consumable purchases may have been acknowledged but are now invisible to t
My Kotlin Multiplatform app (iOS and Android) does not use any form of user authentication or account system, it relies entirely on Google Play Billing and App Store for entitlements. After integrating RevenueCat, I’m using the default anonymous user IDs that are automatically generated on each device install.My concern is whether this setup introduces a risk of users losing access to their entitlements under any of the following scenarios: The app is uninstalled and reinstalled. The user switches devices (but uses the same Google Play/Apple ID). The app data is cleared or restored via backup. The anonymous ID changes for any reason. Since RevenueCat identifies users by this anonymous ID, and my app has no backend or custom user IDs, it seems that if a user’s anonymous ID changes, they could lose their entitlement records unless RevenueCat re-syncs their purchases from Google Play.Questions: Is it safe to rely solely on anonymous IDs when my app depends on RevenueCat for entitlem
Problem Description:I'm experiencing an issue where getCustomerInfo() and getOfferings() hang indefinitely and never resolve, but only on my personal device. The app works perfectly fine for all other users and on all other test devices.What I'm Seeing:The SDK initializes successfully, but when I call getCustomerInfo() or getOfferings(), they never complete:LOG 🔑 [RC] isSDKConfigured: trueLOG 🔑 [RC] Refreshing subscription status...LOG 🔍 [RC] getUserSubscriptionStatus - StartingLOG 🔍 [RC] Checking if SDK is configured...LOG 🔍 [RC] isConfigured: true (took 4ms)LOG 🔍 [RC] Calling Purchases.getCustomerInfo...LOG ⏳ [RC] getCustomerInfo still waiting... 10s elapsedLOG ⏳ [RC] getCustomerInfo still waiting... 20s elapsedLOG ⏳ [RC] getCustomerInfo still waiting... 30s elapsed[continues indefinitely...]Additional Context:Once, early on, I received this error: "RevenueCat.OfferingsManager.Error error 0." but haven't seen it again since The app works fine on all other devices and f
I was wondering if there was an option (or if there isn’t, whether an option could be added) to use the in-app browser for app-to-web purchases instead of redirecting users to an external browser?Thanks and please let me know!
Hi,For each transaction of the same customer I get multiple duplicate customers in Stripe that all have the correct rc_customer_id and associated email.I thought a way to solve was to retrieve the stripe customer ID and pass it during the purchase process but i cant retrieve it from RC web billing sdk. Is there any other way ?Thanks for you help !
In our app we have basic and pro subscription and we are showing it with a regular price. Now we want to show a discounted subscription price to those user who is not using our app for a certain period. Maybe we will send a email with deeplink.If user click the deeplink app will trigger and after validating deeplink we will show the discounted price?What is the best way to do that?Currently, in the paywall I can see that there is a option to add promotional offer id. But it is for app store only. But for Android (Google Play Offer) where to set that? Check the below screenshot of Adapty. They have a nice option to add both id. Again clean documentation.Our expectation is two create two paywall or offering.One is regular another is 20 percent discount. For example blackfridayoffering. So in the blackfridaypaywall we want to connect those apple and google offers. We don’t want to use promo code as google promo code doesn’t provide discounted price of the subscription.
RC is throwing “Must provide product parameter”and when i send pkg it throws “must provide discount parameter” error. both discount and pkg exist.snippet: const offerings = await Purchases.getOfferings(); if (offerings.current?.availablePackages?.length > 0) { const packages = offerings.current.availablePackages; for (const pkg of packages) { if (pkg.product && pkg.product.discounts && pkg.product.discounts.length > 0) { const discount = pkg.product.discounts[0]; // Use the original, unmodified product and discount objects if (discount && discount.identifier) { try { addLog(`Found discount for ${pkg.identifier}. Fetching offer...`); const paymentDiscount = await Purchases.getPromotionalOffer(pkg.product, discount); // Attach the promotional offer to the original package object
Hello,So today I got a notification that a user has purchased an in-app subscription from my app. Everything was fine, until I checked the product that was purchased. To my surprise, it was offered from an inactive paywall (was moved to inactive for more than month now, as I’ve created a new, more enhanced paywall with a totally different products).Does this mean that an inactive paywall may still be visible for some users, and it’s not guaranteed to show only the currently active one?
I am using purchases-kmp, and I keep getting Undefined symbol: _OBJC_CLASS_$_RCCommonFunctionality error when I build on Xcode.
In App Store Connect, I’ve set up one subscription group that contains the following four auto-renewable subscriptions: PREMIUM – Monthly PREMIUM – Weekly SIGNATURE – Monthly SIGNATURE – Weekly im currently testing my application in Sandbox and Testflight but when user upgrade from one plan to another as long as its not the same plan the auto renew turns off automatically im confused is it just a sandbox and testflight thing? coz the autorenew keep working 5 6 times if its the same subscription but when user upgrade or downgrade to another plan it turns off
Already have an account? Login
No account yet? Create an account
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.