Discussion and help from anything related to RevenueCat.
Recently active
Apple offers a new web service (pre-release): Retention Messaging API.When a customer goes to cancel a subscription, they are shown a message and/or a discounted offer right within the system iOS cancellation flow.This is a powerful mechanism to protect revenueCan RC offer drop-in support for this such that a developer can configure text, images and Products similar to the Paywall builder.If this is not already on your short-list, I’d strongly request it.
I found google remove the “Query Purchase History” method recently, so Purchases.restorePurchasesWith not work on RevenueCat SDK 9.x.Any solution for SDK 9.X for user restore their purchase? https://developer.android.com/google/play/billing/query-purchase-history
I’m building a mobile app where multiple users can log into the app on the same device, and each user should have their own individual subscription managed via RevenueCat and Google Play Billing. We’ve enabled restorePurchases() in our app before every new purchase attempt — as recommended. Also, we’ve set “Block Restores” in RevenueCat settings (i.e., Keep with original App User ID), so that subscriptions are not transferred between users.Here’s what happens: I log in as User A in the app. I subscribe to the monthly plan. I then log out and create a new account: User B. Even after manually switching to a different Google Play account in the Play Store app (Settings > Profile > Switch account), when I try to subscribe again under User B, I get the error: “There is already another active subscriber using the same receipt.” Expected Behavior:Each app user (e.g. User A, User B) should be able to: Have their own subscription Purchase separately even if they are on the same de
Can someone explain why feature items text are not showing on actual android device and on emulator?I have set the text colour to black as you can see from one of the screenshot but it doesn’t show up.If I change the Features background (top level) to some other colours then I can see the items appearing in white.Text properties on featured item.Feature items showing in preview.Feature items not visible on android phone. (Samsung Galaxy S21, Android 15)
Connection failed!We couldn't establish a link to the App Store. The App Store Connect API credentials are not valid or do not have sufficient permissions to list apps. Make sure the key has at least the App Manager role.I keep on getting this error and I 100% put everything in the right way. And I'm not sure why.
Hi, I'm building an iOS app using RevenueCat + Capacitor and encountered an issue when purchasing a non-consumable product (lifetime) via RevenueCat Paywall.I have three products configured in App Store Connect and RevenueCat: com.ddtapp.premium.weekly (weekly subscription) com.ddtapp.premium.monthly (monthly subscription) com.ddtapp.premium.lifetime (non-consumable) When I use the Paywall to purchase weekly and monthly, everything works as expected — the payment sheet appears and the purchase succeeds.However, when I try to purchase lifetime, the payment sheet does not appear, and I get the following error repeatedly:DEBUG: Will execute purchase logic provided by RevenueCat.INFO: 💰 Purchasing Product 'com.ddtapp.premium.lifetime' from package in Offering 'default'DEBUG: ℹ️ Found 0 unsynced attributes for App User ID: $RCAnonymousID:5d717e11cc7a….DEBUG: ℹ️ TransactionPoster: handling transaction '20000009...' for product 'com.ddtapp.premium.lifetime' (date: 2025-05-01 13:38:33 +00
I am completely lost on this one - posted already two times but somehow these posts are not showing up.Since I am completely stuck, all I can to is try again: I have already checked my setup multiple times and went through this guide (Why are offerings or products empty?) but I fail to see where I did my mistake.Is there any way for me to trouble shoot this issue?My staging environment has a released app which I installed via Google Play All my products IDs (SKU) exist and are active All SKUs are mirrored in RevenueCat The service account is happy products show up as active Bundle ID etc are fine - otherwise Firebase Authentication would not work either Checked my API keysI’ve checked with logcat but there’s nothing that would indicate an issue..Completely lost here :/
I integrated RC when StoreKit 1 was my only other option. I do not use or plan to use any of the various RC advanced features (experiments, paywalls, etc) and am still on the RC legacy Starter plan.I’ve looked into StoreKit2 and it does everything I need these days. I think that the analytics that ASC currently provides plus what Apple has promised in terms of new metrics this year is all I need there, too. So I am seriously considering migrating off of RC and only using StoreKit2 directly (reduces App complexity without having an intermediate layer on top of SK2, removes dependency on 3rd party, etc).I’m having trouble finding documentation regarding this, but I’m wondering exactly what the process is… and whether this means any new transactions I handle via StoreKit2 on new versions will not go to MTR.Existing/legacy versions of the app will of course still use RC as I can’t take back those versions out there in the wild ;)I do not have the “Track new purchases from server-to-server
Let’s say I have a NavController with 5 pages, and 3 of them should be behind paywall - whenever the user navigates to those routes, i would like to show the paywall if needed (thankfully this is handled within the paywall composable itself) - but i don't want the composable behind the paywall to render/run at all.The documentation shows this: @OptIn(ExperimentalPreviewRevenueCatUIPurchasesAPI::class)@Composableprivate fun NavGraph(navController: NavHostController) { NavHost( navController = navController, startDestination = Screen.Main.route, ) { composable(route = Screen.Main.route) { MainScreen() PaywallDialog( PaywallDialogOptions.Builder() .setShouldDisplayBlock { !it.entitlements.active.isEmpty() } .setListener( object : PaywallListener { override fun onPurchaseCompleted(customerInfo: CustomerInfo, storeTransaction: StoreTransacti
When I refer to the Google RTDN documentation to do the relevant setup, I encountered a problem when proceeding to the second step. Immediately after I selected the preset theme, an error message appeared in the web page's console, at which point the Connect to Google button remained disabled, and I'll post an image of the error below. Of course, I'm sure that each step has been set up correctly according to the documentation. all But I didn't find any answers about it in search engines and community, so any help there?
I set up Revenue Cat for my new app in February with a single monthly subscription option along with a six month free trial. So, everyone who signed up had to choose the monthly subscription option, because that was the only one available.We now want to add a yearly subscription option with a substantial discount. I understand that new users will now get to choose between the two. What I don’t understand is how existing subscribers (who chose the monthly subscription) could switch over to the yearly subscription model when their free trial comes to an end. Is that something that is automatically made available to them, or do I have to do something special?Thanks so much for any insight you can offer.Philip
I have removed RevenueCat SDK from my iOS app a couple of month ago and handle subscriptions and purchases using StoreKit 2.Question: What do I need to do to ensure that RevenueCat stops tracking and charging for this app? Is it sufficient to tap on “Delete App” red button in the App configuration in RevenueCat? I want to make sure that renewal for users who started their subscription when RevenueCat was integrated in the app are not going to be affected.Thanks
We’ve noticed that some purchases of non-subscription items (not made through RevenueCat) are missing. Should we call restore together with configure every time the app launches, or could there be another reason for this? We’ve noticed that for some users, calling getCustomerInfo() after configure is either delayed or returns empty due to an error. Is there an alternative way to access the user’s subscription status without relying on Purchases.getCustomerInfo()?
We’ve noticed that the stats have not been working properly over the last few days. Updates are significantly delayed, and in some cases, the values appear to be incorrect or even revert to earlier snapshots. This makes it difficult to trust the accuracy of the data being shown. We’re closely monitoring the situation and kindly ask that this issue be reviewed Thank you for your support.
Hi there,I am in production and I am experiencing this issue for many usersI use the getCustomerInfo function and it returns all products"activeSubscriptions": [ "com.x.app_credits10", "com.x.app_subscription_weekly", "com.x.app_credits50", "com.x.app_credits30", "com.x.app_nc_lifetime", "com.x.app_subscription_for3months", "com.x.app_subscription_monthly", "com.x.app_subscription_annual" ]Thanksreact-native-purchases": "^8.11.9
We are using RevenueCat paywalls to show a PaywallFooterView using originalTemplatePaywallFooter() on our SwiftUI view. In iOS26 beta3 (haven’t tried previous betas) when the paywall footer is shown and you click on the “Continue” button to make a purchase, instead of showing the iOS dialog to finalize the purchase, the transaction fails and shows the following in the Xcode terminal: [Presentation] Attempt to present <UIAlertController: 0x113e85200> on <UIViewController: 0x114ae8800> (from <UIViewController: 0x114ae8800>) whose view is not in the window hierarchy. The same code works fine on iOS18 and below but in iOS26 beta3 I can’t make a purchase. I updated to the latest RC SDK 5.32.0 and the issue is still there. One wrinkle is that our SwiftUI view that shows the paywall footer is hosted inside a UIKit UIView, so I’m not sure if that is causing an issue or not for RC in the latest build.
I am building a mobile app with Flutter and when testing on IOS using TestFlight and sandbox, future subscriptions are tied to the original appID that purchased subscriptions on the device for the first time instead of the current appID that is logged in.For example, my app flow goes like this:1. The user signs in to an account.2. The program signs in to Purchases with the user ID that is tied to the account.3. The user buys a subscription.4. After the subscription expires the user signs out of the account or deletes the account, which also signs out of Purchases.5. The user signs in to a different account.6. The program signs in to Purchases with the user ID that is tied to the account.7. When they buy a subscription on the new account it gets linked to the old account appUserId instead of the new appUserId.8. On RevenueCat, the ID of the old account has no aliases and no merges and the new account ID does not show up, and instead, the purchases are listed under the old account ID ins
Hi everyone,We’re experiencing an issue where users who go through a paid trial and then transition into a monthly subscription are still being marked as NON_RENEWING_PURCHASE in RevenueCat — even after a successful payment for the monthly plan.As a result, their premium access is revoked, despite having an active and paid subscription.We’ve reviewed our setup and reached out to support, but I wanted to check here in case anyone else has experienced something similar.Any insights or experiences would be greatly appreciated!Thanks in advance.
i have deleted the iap from app connect and in revenuecat in offerings added the new package in default but earlier packages are showing why also the product not able to delete they are associated with the some sandbox transaction i have added new packages in offerings but not showing why is ther any limit for that but old one are showing it is reflcting in my app
Hi RC Team,I just installed the latest iOS app update and found the new UI for filtering projects quite uncomfortable to use. I’d like to ask you to bring back the previous quick action chips, which made it much easier to filter stats and transactions by app with just one tap. As far as I remember this filter also shared picked option on both Overview & Transactions screens, now I have to pick project on both separately to quickly check app stats.I believe many other users would agree with me on this.
Hi everyone,I’m using the RevenueCat Web Billing connected to Stripe. One of my customers has initiated a dispute, and Stripe is now requesting evidence to resolve the issue.Could anyone advise on what kind of evidence I should provide in this case?Thanks in advance for your help!
I don’t care for the spacing in the paywall template I’m using. I’d like to move a component up, but I can’t figure out how to do it. Is there a way?
We’re facing an issue where RevenueCat is assigning an anonymous ID ($RCAnonymousID…) to some users, even though our app does not allow access without login, and we only call Purchases.configure() after the user signs up or logs in. Our Setup: • Platform: Flutter (with RevenueCat Flutter SDK) • Auth system: Firebase Auth • App flow: Users are required to sign in (via Firebase) before accessing any part of the app • RevenueCat config: We only call Purchases.configure() after confirming that the user is signed in and have access to FirebaseAuth.instance.currentUser.uid Issue Details: • In about 10% of cases, we’re seeing a RevenueCat event log that looks like this: • Created a new alias $RCAnonymousID:... • All these users are supposedly logged in before we initialize RevenueCat • For the remaining 90% of users, everything works correctly — i.e., the purchases are linked directly to our userIdSample Event Flow (from RevenueCat dashboard):
I’m using the flutter sdk and i can’t find a way to differentiate between renewing and non-renewing subscriptions on ios.
Localized subscription information is not displaying correctly in the app.Only the English version appears, even when the device language is switched to a supported, localized language configured in App Store Connect. Changing the device language to a non-English language (which is properly set up in App Store Connect localization) does not update the subscription group text — it still shows English. The code responsible for displaying the subscription description is:Text(pkg.storeProduct.localizedDescription)App Store and RevenueCat configuration is set up correctly because it retrieves the price and English subscription details from the App Store.
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.