Discussion and help from anything related to RevenueCat.
Recently active
I am trying to keep track of which consumables have been awarded to the player and need to track it with a unique identifier for each purchase. In the Unity SDK, the StoreTransactions that I get in the CustomerInfo.NonSubscriptionsTransactions have a property called TransactionIdentifier. However, this does not match the transaction_id I see online in RevenueCats front end.Question 1: Why does the TransactionIdentifier not match the tranaction_id that i see in RevenueCat online?Question 2: Since I cannot access the tranaction_id in Unity, is the TransactionIdentifer that right way to uniquely track a consumable purchase and will this value persist for the lifetime of the user?
About ¼ of our users’ attempted subscription purchases on iOS are failing with errorcode 2 (store problem). There are no underlying errors that we can see, but this error message in the logs is present for almost all of them (PID is different each time):Product purchase for 'pro_plan_quarterly_24' failed with error: systemError(Error Domain=NSCocoaErrorDomain Code=4097 "connection to service with pid 13290 named com.apple.storekitd" UserInfo={NSDebugDescription=connection to service with pid 13290 named com.apple.storekitd})We’ve found this difficult to reproduce on our own devices. We’ve found that when it does happen, then if we press the button to start the subscription purchase again then it does usually work the second time.Our integration involves AppsFlyer, Superwall, and Amplitude.We put in additional logging to try to catch whatever the problem is. Since then we are seeing this happening across iOS 18.3.1 and 18.1.1, but it’s happened on other versions before then.
I am upgrading to use the RevenueCat’s own configurable paywall (most likely going to use V2 so I dont have to upgrade later). I am currently using custom hardcoded UI for various versions of the paywall in my app.I am wanting to use slightly different messaging on my paywall depending on where in the app it is opened from - for example one when you initially introduce a premium offer, vs one where someone is trying to access content that is only available in the premium offer. I have one offering. Is this possible?
is there a way to show dynamic text in my paywall ? For example when user selects the yearly plan they see the text "START MY 7-DAY FREE TRIAL" and for monthly plan they see the "START MY JOURNEY" in the CTA button.Currently when the user selects either of the pricing plan, they see “START MY JOURNEY”
I'm integrating the RevenueCat Web Billing SDK into my web app, and I'm experiencing an issue where the Stripe checkout iframe does not fully display.Issue Details:When I click "Start Free Trial", the RevenueCat paywall opens as expected. After entering my email, the next screen (where Stripe should load the secure checkout UI) only shows the title and a grayed-out "Start Trial" button—but no credit card form appears. The Stripe iframe is present in the DOM, but its height remains 2px, and its opacity stays 0. I tried putting height at auto, didn’t change anything. (see screenshots below)What I’ve Tried:Verified that the user appears in the RevenueCat dashboard after authentication. Ensured that the correct offering and products are configured in RevenueCat. Checked browser console logs—no specific errors related to Stripe, but I randomly get 400 Bad Request errors from https://e.revenue.cat/v1/events. Confirmed that RevenueCat properly initializes and fetches offerings before triggeri
Hi team, I saw there are new templates for Paywalls v2, so what templates are good for one-time-purchase (Non-Consumable IAP)?
Hi,Clearly I don't understand what RevenueCat is suppose to do. I must be missing something. I have an App on the App Store and Play Store that already has a number of subscriptions, been live for a year. I’d like to start aggregating data, Rev Cat to the rescue! So I set up the project, the access keys and everything all. I get “Valid credentials”. All seems to be happy days so far! So a tap on Charts and … nada.Cleary I must be too dumb for RevenueCat...
Hey i get an error when i paste in the json file in te android app config. Could not validate subscriptions API permissions Could not validate inappproducts API permissions Could not validate monetization API permissions any ideas where i can read how to troubleshoot? they dont have anything on theyr website (or i cant find it)
How do I create a footer-only v2 Paywall and display it in native Android below another @Composable?
Greetings. We have two account types; one is for regular users (A) and one is for companies (B), and respectively have two subscription groups. Regardless of what transfer configuration I pick in the RC settings, switching account and purchasing a subscription will either transfer subscriptions from account type A to account type B (Transfer to new app user id) or subscriptions made in type B will always be set to account type A (Keep with original app user id).How can I resolve it? Each of these subscriptions cost and behave differently.
Hello RevenueCat,I can see some similar topics, but i didn’t understand clearly the solution. As there are multiple topics on Stack Overflow, discords and more I think no one can find easily a clear solution.ContextI’m inside my test app using the SandBox mode. I’ve set the option ‘Keep with original App User Id’ because I don’t want to let an user the ability to transfer to someone else his subscription. All users have an account and I well use the `Purchases.configure()` and or `Purchases.logIn()` methods to handle that. I’ve 2 google accounts on my Android Emulator (ex: bob-example@gmail.com and alice-example@gmail.com). My app have a subscription mode to let creators access some premium contents. ScenarioI open the app and I login to bob-example@gmail.com, then I open the RevenueCat Paywall to buy a subscription. It works well, bob got his subscription.I logout bob.I login alice-example@gmail.com and I open the RevenueCat Paywall, as alice has no subscription. I try to buy a subs
I don’t understand how this is possible. I have got my ios app(flutter) published in app store some time ago. Before I tried some purchases with sandbox account (german). And they are listed in sandbox purchases without issues. I also had some production purchases as well. Then it stopped.Today when I check my sandbox account, I see some american accounts made in app purchases. It is definitely not me as I have only 1 sandbox account and it is german account.Firebase also reports in_app_purchase events.I thought RC detects prod vs debug environments.Am i overlooking something? Did anyone experienced something like this before?I build my app for app store with: flutter build ipa --release
I’ve integrated RevenueCat into my Flutter app, and subscriptions are working perfectly in local development (tested on a real device using StoreKit). However, when testing the same build on TestFlight and Production, in-app purchases fail.What I Have Tried:✅ Verified that the same bundle ID is used across development, TestFlight, and production. ✅ Checked that RevenueCat is correctly initialized with the right API key. ✅ Ensured that the App Store "Paid Apps Agreement" is accepted in App Store Connect > Agreements, Tax, and Banking. ✅ Created and assigned sandbox accounts (iOS 18 moved this to Settings > Developer > Sandbox Account). ✅ Removed the StoreKit configuration file from the Release Scheme in Xcode to ensure real App Store purchases. ✅ Checked that my in-app purchase products are approved and in "Ready to Submit" or "Waiting for Review" state in App Store Connect. ✅ Ensured the App-Specific Shared Secret is added to RevenueCat.✅ Tried waiting a few hours in case purc
I am trying to implement the new RC v2 paywall into my app without bothering my usual developer friend. I can get the paywall to load perfectly in xcode preview but when I try running in the simulator I keep getting an error message stating that “purchases has not been configured”. Any ideas?
I’m unable to get the onPurchaseCompleted handler working while testing the purchase. This handler manages the post-purchase UI updates. I am using paywall version 2 PaywallView().onPurchaseStarted{ _ inprint("onPurhaseStarted: ")}.onPurchaseCompleted{ _ inprint("onPurchaseCompleted: ")isPaywallPresented = false}.onRestoreStarted {print("onRestoreStarted: ")}.onRestoreCompleted{ _ inprint("onRestoreCompleted: ")isPaywallPresented = false}.onPurchaseFailure { error inprint("purchase error \(error)")isPaywallPresented = false}.onRequestedDismissal {print("onRequestedDismissal: ")isPaywallPresented = false}.onDisappear {print("ModalView dismissed") // Action when dismissed}
My first app with subscriptions just went live!Are App Store purchases made with promo codes displayed in the RevenueCat dashboard?I see purchases for my new app, but I also sent out promo codes. When I click on the transaction details, it states that it is production environment and the takehome_percentage is 0.85.I do see a “offer_code” is null, but nothing else about if it is a promo code or not.If anyone could shed some light on the subject I would appreciate it.
When an account expires on my app/website, the user will still have access to read their data if they choose not to pay. Therefore, I need a close button on the web billing page. Right now it appears to only support hard paywalls.
Does revenue cat, display the statistics for paywall rate % (% of users that viewed the paywall)
Hello,The question is about Flutter SDK on iOS.I noticed the following behaviour for RevenueCatUI.presentPaywallIfNeeded and RevenueCatUI.presentPaywall:- If the app was in the background, and I call “await RevenueCatUI.presentPaywall(...)” right after the app is resumed, the call never returns (awaiting forever).- Everything works if I add 500-1000 ms delay after the app is resumed.Could someone explain why is this happening? How can I wait for the SDK to be ready to show the paywall without adding an explicite delay?I tried:- await Purchases.getCustomerInfo();- await Purchases.getProducts();- await Purchases.getOfferings();Nothing from this list helps, only the actual delay does.Thank you.
Hello,We have started using Revenue Cat to manage in-app purchases, but we are having trouble recovering purchases that were not made via RevenueCat on Android. We login the user via SDK using Purchases.sharedInstance.logInWith("our-custom-user-id"). We wait for a successful response and if the user is logged in for the first time, we call Purchases.sharedInstance.syncPurchases() to sync the purchases not made via RevenueCat. The problem is the "timeline" of events. See screenshot.The webhook for the purchase was sent with an anonymous user ID because an alias was not created at the time. We are unable to sync purchases on our backend with an anonymous user id. Since the "SUBSCRIBER_ALIAS" webhook is deprecated, we are unable to wait for this webhook and sync purchases after that. Please help. Do you have any solution for this?Thank you in advance for your reply.
Hi,How can I check if a user has canceled a subscription or trial?If a user has canceled a subscription, his status is active until its expiration date. It's the same with the trial period. Is it possible to determine it was canceled, but at the same time it is still valid? Thanks
Hello,url = f"https://api.revenuecat.com/v2/projects/{project_id}/customers/{customer_id}/active_entitlements"The above URL returns a list of active entitlements for my sandbox environment which is great - I noticed for some of the other endpoints there is an “environment” field which looks to toggle between sandbox/production - does the above endpoint have an equivalent ?Couldn’t find any reference on how to distinguish between the sandbox/production data for this particular endpoint - there was mention of their being a “sandbox” flag but I can’t seem to find it.Hope that makes sense!
Hi!The product (Flutter) I’m currently building has users both on a web app and in a mobile app.One use case I’m struggling with currently is that a user might buy a premium subscription from the web app through Stripe and then open the mobile app which might have cached the CustomerInfo object for at ~5 minutes.Due to the caching, the user will not immediately see the subscription in the app which is not ideal as it can cause confusion. What are the best practices to deal with something like this?Edit:I know about the invalidateCustomerInfoCache() function. I’m interested to know if there is a recommended way to use that function. Any help and tips are appreciated!
I am encountering the following errors while testing my app’s integration with the Amazon Store.😿‼️ PurchasesError(code=UnknownError, underlyingErrorMessage=Timeout error trying to get Amazon user data., message='Unknown error.')I have already implemented purchases using RevenueCat for Google Play and Apple, and everything works fine on those stores.However, when I try to connect to Amazon, I receive this error. I am testing with a user account that is a tester on LAT, using an Amazon Fire HD 8 (2022) with Amazon App Tester (with a loaded JSON configuration).Any ideas on what might be going wrong and how to resolve this? I'm stuck on this issue. The app is ready for the Amazon Appstore, but the subscription issue is blocking it from functioning properly. Flutter 3.29.0purchases_flutter: ^8.6.0Log:D/[Purchases] - DEBUG(12948): ℹ️ Debug logging enabledD/[Purchases] - DEBUG(12948): ℹ️ SDK Version - 8.13.0D/[Purchases] - DEBUG(12948): ℹ️ Package name …...D/[Purchases] - DEBUG(12948): 👤 I
Hey,I have an issue where, when a user cancels a lifetime subscription, it doesn't show up anywhere — not in Purchases.getCustomerInfo nor in the customer's history.I've set up Google and Apple server notifications, but that hasn't changed the situation.Is there any other way to track when a user requests a refund?
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.