Discussion and help from anything related to RevenueCat.
Recently active
Hi all,I’m integrating RevenueCat with my React Native (Expo) IOS app, but my paywall is not displaying any products/packages. Instead, I see “No available packages. Please check your RevenueCat dashboard.” Here’s what I’ve done so far:My app uses the correct bundle ID in Expo, App Store Connect, and RevenueCat. I have a default offering with packages (monthly/yearly) set up in RevenueCat. My annual and monthly package is linked to a product. My subscriptions in App Store Connect are in “Ready to Submit” (not yet approved). I’m using the latest react-native-purchases SDK and calling Purchases.getOfferings() after Purchases is configured. No errors are thrown, but offerings.current is always null or has an empty availablePackages array.Questions:Is the “Ready to Submit” state in App Store Connect the reason my products don’t appear in the paywall? Is there anything else I should check in RevenueCat or my app setup? How long does it usually take for new products to propagate after approv
I’ve been trying to configure one of the new paywalls in my app but I keep getting the message that the offering has no configured paywall. find a simulator screenshot with the error message I keep getting. I think I’ve done everything the way I’m supposed to.
Error Description:TypeError: Cannot read property 'setupPurchases' of nullEnvironment Details:- Platform: React Native (Expo)- react-native-purchases version: 8.9.4- React Native version: 0.76.9- Expo version: ~52.0.42- OS: Android- Build type: Development Error Context:- Error occurs during RevenueCat SDK initialization- Android Manifest includes the billing permission (com.android.vending.BILLING)- Using Expo managed workflow with dev client (expo-dev-client ~5.0.19)Steps to Reproduce:1. Initialize RevenueCat SDK in app startup2. Error occurs immediately during the Purchases.configure() call3. The native module appears to be null when the app tries to access itAdditional Information:- The app is using Expo Router for navigation- RevenueCat configuration is attempted in the app root component- Billing permission is correctly declared in AndroidManifest.xml- Project is using the latest stable version of react-native-purchasesAttempted Solutions:1. Verified billing permission in Android
Dear RevenueCat Support,I'm encountering an issue where RevenueCat is automatically transferring entitlements between users, and I'd like to understand how to disable this behaviour.Preventing Entitlement Transfers In my use case, each user should retain their own subscription entitlements without automatic transfers happening when a subscription is detected on another App User ID (possibly due to device sharing or restored purchases). Is there a way to completely block entitlement transfers? I looked through the dashboard and documentation but couldn’t find a setting to control this. Is this something configurable per app or only through SDK behavior?
Manually Transferring Entitlements There are scenarios where I want to manually transfer entitlements from one user to another (e.g., merging accounts or correcting mistaken user assignments). I couldn’t find any API to transfer an entitlement from user_a to user_b. Is there any API or other way using which i can intentionally transfer entitlement ??
Hi, I wanted to go through an example and understand the current state of a subscriber. The dashboard has “Subscription expired 11 days ago” and my database still has the user marked with the subscription as active and entitled.The way I manage the user database record with entitlements is only via webhooks (I listen to them and grand and remove entitlements accordingly). I think I have some logic issues since in this example the record is not in sync. Example is for user ID: eL9WN4QjQpZgB36ZCPnGhuIC2cq1Customer History in the RC dashboard has these as last few events:My database has these records (event is central USA time): as you can see, the last events are a RENEWAL and then a CANCELLAION after 3 days (which is what my configured grace period is). I did not receive any “conclusion” event for this user. No BILLING_ISSUE, no EXPIRATION nothing like that.As you can see EXPIRATION came first and that is when I removed their entitlements. But then a RENEWAL came 8 days later so I added
Hi team is there any plan for releasing a sdk for electron in future? I know flutter does it however flutter team don’t focus much on macOS and web in general.It would be great if there is an electron sdk. Lot of popular apps are electron based.
I’m busy testing my app and subscriptions are happily going to RevenueCat dashboard, no issue there. When I trigger a cancellation for the subscription from Google Pay, I see it going to the pub/sub without a problem, I see that in my setup screen, the pub/sub shows the time the cancellation went through (Google Developer Notifications Topic IDLast received 2025-04-16 at 04:30 PM UTC) - yet, it doesn’t actually cancel from the dashboard or update in the SDK. Since subscriptions end after 30 minutes, there’s no way to test the “your subscription won’t renew functionality”. I’m fairly confident it generally works, but I’m worried that Google might reject it as they will be cancelling a subscription, but my app will happily show that it will renew.Am I missing something? (I’m yet to figure this out fully for Apple as I had a whole different nightmare with them).EDIT: Immediately after writing this, I decided to just go for it and send it for approval and saw the cancellation came thr
Hi!I am using the new Paywall V2 with Flutter and on Android the image at the top of my paywall is not at the top of the screen.There is a space above the image that is as large as the notification bar, almost as if it was wrapped with a SafeArea but also had a offset of notification bar height.I use RevenueCatUI.presentPaywallIfNeeded().I have set the background color of the paywall to red for these images to be as clear as possible.How it looks from Paywall editorThe componentsHow it looks on AndroidEdit:I have now also tried with text at the top, and that works with no problems. The editor updates the view so that the text is above the image. On the Android device the text appears on the red part and the image is not moved down any further (maybe some pixels)
Hi this is a continuation of the conversation that I missed here.I wanted to find out what are the expected events to come before RENEWAL. Specifically when the webhook sends them to my API.I was thinking that only SUBSCRIPTION_PAUSED can come before RENEWAL but today I got a RENEWAL a day after a SUBSCRIPTION_EXTENDED event. Is this expected? If so, what other event types are expected to come from the webhook before a RENEWAL?Customer History view seems to correctly order these events as well.
Hi there,We tested importing a historical iOS user using the POST /receipts endpoint, passing just these two parameters: app_user_id fetch_token (base64 encoded receipt) The call was successful, and when we search for the user in the dashboard by App User ID, we can see their full subscription history and entitlement details correctly reflected in their Customer Profile.However, this user is not appearing in: Any Customer Lists (Active, Cancelled, etc.) Revenue or MRR charts (even for All Time) Trial/Active Subscriber counts Is there something else we need to include in the payload for these users to be reflected in RevenueCat's aggregate reporting? We’re planning to import all historical users, so we want to confirm the behavior before running the full script.Appreciate any guidance here — thank you!
Hello,Despite deleting everything and trying it twice from scratch following this doc, we keep getting this error:Your Google service account credentials do not have permission to create a Google Cloud Pub/Sub topic. We have done everything by the books, I have no idea, why this doesn’t work. Any ideas, please?Thanks,
Hey team,I'm trying to build an admin view similar to the "Entitlements" card shown in the RevenueCat dashboard (see attached screenshot), but I'm struggling to figure out how to get this same level of detail through the API.Screenshot Here's what I’ve tried so far: API v1 (Get Customer): This gives me a list of all entitlements a user has ever had, but: There’s no connection to their subscriptions. (I cannot find out the different grant periods as in screenshot). It doesn’t tell me if a subscription will renew. (On the dashboard, I see “Will renew in X” — but there’s no equivalent field here.) API v2 (Subscriptions endpoint): I can list the subscriptions and join it with product data to infer durations, renewal status, etc. But promotional entitlements break this: Subscriptions created by granting entitlements don’t have product IDs. The entitlements field in the subscription only includes active entitlements. So if a promotional entitlement expi
Eight days ago, I could still see the subscription details without any issues. Please help me understand why this is happening. Has there been an update or change that could have caused this?"Let me know if you'd like to add more details or adjust the tone!
I have integrated RevenueCat webhooks with my backend. However, when I receive a webhook event, the response does not include the subscription ID. This makes it difficult to fetch subscription details using the API.Even in RevenueCat’s documentation, the sample webhook response does not contain a subscription ID. How can I reliably obtain the subscription ID from the webhook response to make an API call for subscription details?Any guidance or best practices would be appreciated!
When I was originally developing using the PurchasesAreCompletedBy.REVENUECAT mode, everything worked fine.However, since I needed to change the GoogleReplacementMode to DEFERRED, I had to switch to the PurchasesAreCompletedBy.MY_APP mode.To support this, I passed a custom purchaseLogic to PaywallOptions via PaywallOptions.Builder.But after switching to this approach, my subscription purchases started showing a “Confirm Plan” prompt, and the subscription would end up being automatically canceled.Even after I manually called Purchases.sharedInstance.syncPurchases(), the issue still persisted.Is there something wrong with my setup? // Implementation of PurchaseLogicoverride suspend fun performPurchase( activity: Activity, rcPackage: Package,): PurchaseLogicResult { onPurchaseStarted(rcPackage) val purchaseParams = PurchaseParams.Builder(activity, rcPackage) .googleReplacementMode(GoogleReplacementMode.WITHOUT_PRORATION) .build() return try { val resul
Hey guys, in my web billing app, the icon I upload doesn’t get saved although I get a “File uploaded successfully”. When I refresh the page it disappears as if it wasn’t uploaded. No matter the image or image size.Would love some help! 🙏Best regards,Alex
Hi everyone,I'm encountering a crash in my React Native app that appears to be coming from the react-native-purchases package. The error is showing up in Crashlytics and looks like this:```BillingWrapper.buildSubscriptionPurchaseParamsjava.lang.NoClassDefFoundError - com.android.billingclient.api.zzcecom.revenuecat.purchases.googleBillingWrapper.kt:885```My react-native-purchase version is 8.9.1Doing some search I can see this is related to `com.android.billingclient:billing` but the module should manage this dependence I should not add it Thanks for the help :)
Hi guys, pardon my ignorance but I was wondering why I get this error when doing a production build for ios via eas? There may have been a chance I skipped over a step but I am unsure what it could be. It works fine in eas dev builds and local.
I just added an entitlement to a user, but it doesn't appear in the object returned from RevenueCat.In the RevenueCat UI, it shows that the entitlement has been granted. I understand that RevenueCat caches data for around 5 minutes, but even after 30 minutes, I'm still getting null for the subscription.Here’s how I’m checking for active subscriptions in the app:```await Purchases.invalidateCustomerInfoCache();const customerInfo = await Purchases.getCustomerInfo();return Object.keys(customerInfo.entitlements.active).length > 0;```Am I missing something? I have both monthly and yearly subscriptions set up, but in this case, I granted the user a 3-month entitlement.
If I paste string with newline in paywall editor and display paywall in UIKit app it will behave like this:Notice the “\” symbol, that is added.If I try to add newline via enter key, and use UIKit to display paywall: If I paste string with newline and use SwiftUI app to display paywall: If I enter newline via enter key and use SwiftUI app, it will show it like this: Seems like there is inconsistency in paywalls behaviour, what should I do? Now I use UIKit mainly, and I just want to add newline without extra symbols.
Hello,To briefly describe, similar to Instagram, where users can subscribe to multiple content creators, our application follows the same approach.We conducted an experiment by creating 2 Subscription Groups on App Store Connect:subs_offer_1 includes two Renewable Subscription plans: A and B subs_offer_2 includes two Renewable Subscription plans: C and DOn the same device (meaning the same Apple ID), I performed the following steps:Created a new account X1 in our system with user_id = X1_id, then called the function: Purchases.logIn(X1_id). Successfully purchased plan A in subs_offer_1. Logged out and called the function: Purchases.logOut() Created another new account X2 in our system with user_id = X2_id, then called: Purchases.logIn(X2_id). Tried to purchase plan D in subs_offer_2 but encountered the following error:PlatformException(7, There is already another active subscriber using the same receipt., {readableErrorCode: RECEIPT_ALREADY_IN_USE, code: 7, message: There is already an
I am getting this error when I try to test subscription thru paywall. PayWall is never displayed.It works fine on iOS.
Hi there, I’m currently calling https://api.revenuecat.com/v2/projects/{project_id}/customers/{customer_id}/purchases for extracting all purchases and then check for a specific one using store_purchase_identifier.Is there a way to avoid extracting all purchases from the server every time I need to find a specific store_purchase_identifier? Thank you,Yury
I have different projects for different environments (dev, production) - cause I need a different bundle id (recommended here: https://www.revenuecat.com/docs/guides/environment-strategies). Can I somehow duplicate the paywall from one project to another? Rebuilding it takes a lot of time...
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.