Discussion and help from anything related to RevenueCat.
Recently active
I’m using the Web Billing in Product catalog but when I use the production web purchase link (https://pay.rev.cat/[ID]/[USERID]), the form is missing to input the payment info. When I use the sandbox purchase link (https://pay.rev.cat/sandbox/[ID]/[USERID]), it works as expected showing the payment info form.I’m using Stripe as the payment processer I have Products, Offerings, and Entitlements setup Things I’ve tried with same result:Firefox and Chrome browsers Trying valid User ID Try in InCognito
The issue:When testing a Mac Catalyst app built and run from Xcode, I now receive the following Xcode-console-logged errors, in the order listed here, upon attempting a non-consumable in-app purchase using a sandbox user account:No UI context available for payment sheet request. Received error that does not have a corresponding StoreKit Error: Error Domain=SKInternalErrorDomain Code=4 "An unknown error occurred. Please try again." Purchase did not return a transaction: Error Domain=SKInternalErrorDomain Code=4 "An unknown error occurred. Please try again." There was a problem with the App Store. This could also indicate the purchase dialog was cancelled.Potentially relevant additional info:The errors have occurred consistently over a 24-hour period, suggesting that it is not just a temporary problem with Apple’s sandbox server. The errors only occur during sandbox testing of the Mac Catalyst version of the app; they do not occur during sandbox testing of the iOS and iPadOS versions of
I know a company who’s evaluating some options and I was wondering if I refer them to RevenueCat, is there any referral bonus of some sort?
Hi,I was uploading a new version of my app to App Store, but got rejected because the prices in the subscriptions did not match. Upon further investigation, I noticed that the promotional offer that was active, wasn’t being showed properly, it only showed the original price for the subscription. I went to check in RevenueCat, and saw this Could not check label. I do not understand why now it is not working, this promotional offer was added last year and was working with no issue until now. What could have happened?I think I had already added the key, how can I verify that?
Hi all, I have a little question about localizing price strings. In English the variable {{ product.price_per_period_abbreviated }} returns $9.99/mo which is perfect but I can’t find in the docs what variables are localized so would that translate automatically for users in other locals? or should I provide the abbreviation myself (in this case Chinese) {{ product.price_per_period }}/月Thanks so much
With macOS Tahoe released today, I wanted to see how my app ran on it. But I ran into a compile error when using the RevenueCate Flutter package:Swift Compiler Error (Xcode): Protocol 'StoreKit2PurchaseIntentType' requires 'id' to be available in iOS 16.4 and newerbut I wanted to post my issue here to get the ball rolling on using RevenueCat with the new OS 26 versions.This error was within the StoreKit2PurchaseIntentListener.swift file.I am using this purchases_flutter: ^8.10.1
I want to be able to change the trial period on a product, or the grace period, and I’m realizing none of this is editable in the RevenueCat dashboard. Does it have to be set when the product is created, and then I need to create new products every time I want to make a change? I ask because: We have a field in our DB that stores if a customer is annual or monthly (which are two products at the moment), and we are getting this info from the customer info in the Web SDK. The only place there we can identify the subscription duration is from the product name. But, if we need to change product names regularly to change things like trial period, we need to make code changes on our side every time. It’d be nice if we either could modify products, or if the Web SDK could return duration in the customer info.
While using RevenueCat’s PaywallView (PaywallV2), I’ve noticed that some UI customizations do not reflect on the live preview or actual device.For example: Changes to a text component (e.g., color, content) don’t persist or appear on screen. Similar issues occur with other component edits — it’s as if certain elements are locked or cached Any insights would be appreciated!
Hi - I’m working on adding Paywalls (V2) to our iOS app, and I sometimes run into a built in skeleton loading screen. The skeleton doesn’t match the app’s design, so I’d love to hide it, or ideally be able to observe the loading state of the paywall in some way and display custom UI until it’s ready.I noticed this prior post asking a similar question:In my case, the paywall is being shown after offerings have synced. (It doesn’t always appear, but it does frequently enough I’d like to handle the loading state a little differently.)I’m using PaywallViewController, via “custom” display logic. (I’m using the initializer that takes an offering identifier, and presenting the view controller manually.)Any chance anyone can provide guidance about how to suppress the UI / observe when the paywall is ready to go?
My iOS app store submission cannot pass review due to reviewers being unable to pass paywall. Specifically, they said: “App remained on the same page after we tapped Continue”. With the screenshots apple reviewers provided, I can see that they see a“You’re currently subscribed to this.” and then they are unable to pass the paywall Do you know why this is happening?From what I can tell from RevenueCat documentation, I should be able to reproduce this in test environment. However, on both dev builds and TestFlight, subscriptions work fine and I am able to bypass the paywall, so I can’t reproduce it. My reviewer IDs are$RCAnonymousID:dff309041d794b93917e86553d198090 From United States $RCAnonymousID:b787ad4444d74214bb4850824894f8ad From Singapore $RCAnonymousID:73ec69c7c27e4e9aa2671ffba606d8d8 From Ireland I can tell from looking at the RevenueCat Dashboard, that they were all able to start a free Trial, and then convert to paid subscription, so I don’t think it’s a RevenueCat integrat
❓ RevenueCat Anonymous User Confusion — Purchases Made Without LoginHi everyone,I'm currently integrating RevenueCat in a Flutter app and I've run into an issue where a user made a successful purchase anonymously, even though I've explicitly configured the SDK to use Purchases.logIn(userId) after login.📦 My SetupI initialize RevenueCat in main.dart only after the user has logged in. Here's the relevant initialization code: 🔍 My Questions Can I safely call Purchases.logOut() if the user is anonymous? Will it throw or is it a no-op? Does Purchases.logIn(userId) guarantee that the userId will be used for future purchases? Or is there any chance of fallback to an anonymous ID? Why is originalAppUserId still showing an anonymous ID even after calling logIn(userId)? Shouldn't it update to match appUserId after login? Does Purchases.isAnonymous reliably tell me whether the current user is anonymous? 📎 Notes The userId is definitely non-null and only passed after the user has logged
I have a moderately complex paywall with tabbed panel showing subs vs lifetime.Just to save my lazy ass some time, was looking to see if you have some kind of conversion option but I cannot see one. Is this likely to happen by September 2025?I’m concentrating on adding features and rolling out a Mac (SwiftUI) version, for which I have to code my own paywall anyway, so it’s not a priority. I’m pretty happy with the existing paywall.
Hi there,I have a mobile app that allows Apple and Google Sign in using Firebase. A user on their iOS device has signed in with their Apple account but now they wish to use their Google account instead. Below are the list of events.User logs in with Apple account Purchases subscription for 1 year Subscription expires Logs out of app Logs in with Google account Purchase subscription for 1 year againWith these events, the subscription still ended up getting tied to the previous Apple account instead according to RevenueCat dashboard. Note that I do call the proper “logout” and “configure” functions when the user logs in and out of my app.I had asked the user to try and click the “Restore previous purchases” button I have, but a dialog comes up and states they are already subscribed and then it’s just an error message. Unfortunately, I just display a generic error message and I don’t know exactly what the error is.Is there anything I can do here to transfer the subscription to associate w
I am made an app also Published an Play store v1 , But I cant Make an Strip account In India. Stripe Will Pause The Account Making on India users , So Any Other Way To Get Payment ? . waiting for update ?
In linked post, the answer to this question remained unclarified, I would basically like to ask for a follow up on that question:The `store_transaction_id` in CustomerInfo of v1 REST API , is it the unchanging ORIGINAL transaction ID for all platforms? Or does it change after renewals?
I’m currently integrating OneSignal with RevenueCat, and I’ve run into a situation that I believe others may have faced as well. I have two separate apps: one for iOS and one for Android. Each app has its own distinct OneSignal App ID, as required by OneSignal for platform-specific notifications.However, in the RevenueCat dashboard under Integrations > OneSignal, I only see the option to enter a single OneSignal App ID. Since my iOS and Android apps have separate OneSignal projects (and therefore different App IDs), I'm unsure how to properly configure the integration to support both platforms at the same time.My main goal is to ensure that RevenueCat sends subscription events to the correct OneSignal app depending on the platform, so I can properly target users for notifications on each OS.Thanks in advance for any guidance or suggestions!
Important Notes When Testing Google Play Sandbox – Account Conflict Issue I’d like to share my experience in case others run into a similar issue during Google Play sandbox testing.This unexpected behavior took quite a bit of time to figure out. Problem Summary If multiple Google accounts are signed in on the test device, the system may reuse a previous purchase receipt from one of those accounts. It seems that Android treats the first (oldest) signed-in account as the default, and continues referencing its purchase history even in sandbox mode. In my case, I had a real subscription purchase on main@gmail.com (used in production), and although I was testing with test.sandbox@gmail.com, all attempts were rejected with the message: “You are already subscribed”. How I Solved It Remove all unnecessary Google accounts → Only keep the test account (test.sandbox@gmail.com) on the device. Use only the test account → Sign in with just the sandbox test account before running your tes
Hello! As of the last 2-3 days, currently subscribed users received my paywall to subscribe. I had the same experience and was able to get past it by exiting out of my app and reopening it. A friend of mine said she clicked the subscribe button but didn’t seem to get charged again but I’m worried this will cause concerns with other users. Anyone experiencing this? It’s the first time I’ve seen this in the 7 months my app is live. I use the integration with flutterflow if that makes a difference. This also seemed to coincide with the recent Firebase outage. Thanks!
Does anyone here have any experience migrating Play Store & App Store developer accounts from Individual to Business accounts?For the process, I found online:Apple: You can convert the current account from Personal to Business. Google Play needs the apps transferred to a newly created Business account. Is there anything I need to do for RevenueCat?My main concern is some sort of major error like losing all current subscribers or failed payments during transition period.Any sort of tips or recommendations on how to make sure this goes smoothly would be awesome.- Aaron
Hey there, I have one paywall that has annual-monthly-weekly subscription. I want to have another paywall that has lifetime subscripton and uses same entitlement that my initial paywall has. I want to show user my lifetime paywall after the user dismiss our initial paywall. How to achieve that in UIKit? Is there a way? I can’t find in the docs etc.
Hello, In my app I sell subscription and consumable in-app purchase packages. In the app my default offer includes subscription packages. I’m fetching my in-app purchase packages with hardcoded offer id like “default_credit_offer” and I want to make experiments for default_credit_offer but I haven’t found the solution for that issue can you help me for that. Is revenue cat support this situation?
Hello,I don't get any errors when I test on a real phone, but I get the same error on the emulator.The problem is when I push Google for validation, they get the error, and I don't know what to do to pass the validation.W/BillingClient(25808): There was an exception while unbinding service!W/BillingClient(25808): java.lang.IllegalArgumentException: Service not registered: com.android.billingclient.api.zzba@482def3W/BillingClient(25808): at android.app.LoadedApk.forgetServiceDispatcher(LoadedApk.java:2001)W/BillingClient(25808): at android.app.ContextImpl.unbindService(ContextImpl.java:2168)W/BillingClient(25808): at android.content.ContextWrapper.unbindService(ContextWrapper.java:923)W/BillingClient(25808): at com.android.billingclient.api.BillingClientImpl.zzaL(com.android.billingclient:billing@@7.1.1:1)W/BillingClient(25808): at com.android.billingclient.api.BillingClientImpl.startConnection(com.android.billingclient:billing@@7.1.1:11)W/BillingClient(25808): at com.revenuecat.purchas
Hi,I noticed that a few refund requests were recently approved in the App Store.In the past, we’ve usually preferred to decline such requests, and Apple would typically follow suit. Like, above 90% of refund request will be rejected. However, recently, it seems that a high number of refund requests have now been approved.Could you please check on your end to confirm whether the Apple refund requests have been handled correctly?For the context, the refund rejection rate is almost 100%. However, now the refund approval rate is almost 100%. Can RevenueCat team please verify on this?Thank you.
I know this has been discussed hundred of times, but while I suppose the reason is he same as in previous threads, that is: reviewer is failing to fetch products because they are not accepted, the response I got from him seems to opose this premise. Quote:The in-app purchases do not need to have been previously approved to confirm they function correctly in review.It would be appropriate to review your in-app purchases to make sure they have been appropriately configured for review in the Apple-provided sandbox environment.It is the first release of this app. The subscriptions had “Waiting for Review” status but after the app rejection their status changed to “Developer Action Needed” while the translations of them to “Rejected”.On RevenueCat everything seems to be configured correctly, with product fetched automatically and their statuses correctly reflecting what is displaying in App Store Connect.Meanwhile the Android version using the same codebase is happily on prod with zero issu
Hi everyone,I'm experiencing an issue where my app's in-app purchases (configured via RevenueCat) work perfectly in the sandbox and TestFlight environments, but fail during App Store review.⚠️ Problem: During Apple’s review, the reviewer receives an error when attempting to purchase a subscription. (Error 23: There is an issue with your configuration. Check the underlying error for more details) Apple provided this message: “We found that your in-app purchase products exhibited one or more bugs which create a poor user experience. Specifically, an error message displayed when we attempted to buy in-app purchase. Please review the details and resources below and complete the next steps.”Next StepsWhen validating receipts on your server, your server needs to be able to handle a production-signed app getting its receipts from Apple’s test environment. The recommended approach is for your production server to always validate receipts against the production App Store first. If validation
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.