Discussion and help from anything related to RevenueCat.
Recently active
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?
Hi there, I have an iOS app with auto-renewable subscription. Previously, we used to store the purchases in our server database and open features inside the app based on it. Now, we are trying to move to RevenueCat and opening the features using the below code instead of relying on our server side subscription status.CustomerInfo.entitlements["Pro Access"].isActive After user update the new version with RevenueCat, will you get the active subscription automatically from Apple Receipt and enable entitlements or should we call syncPurchases programmaticaly so that you will enable entitlements based on it? Please advise, Thank you.
Hi everyone! I'm just getting started with programming, and I'm currently trying to integrate RevenueCat with Supabase to control user access based on subscription status.I created an Edge Function in Supabase that receives the webhook from RevenueCat and tries to extract the app_user_id from the payload to identify the user and update their data.The issue is: even though I can see the app_user_id correctly in the request body, I still get a 400 error saying "user_id not found". 🥲Since I'm new to all this, there's a good chance I'm missing something simple — I'd really appreciate any help or guidance! serve(async (req) => { try { const body = await req.json(); const entitlement = body.entitlements?.premium_access; const event = body.event; const userId = body.app_user_id || body.subscriber_attributes?.user_id?.value || body.customer || body.aliases?.[0]; if (!userId) { console.error("user_id not found"); return new Response("user_id not
I read Upgrades, Downgrades, & Management where it says:There are no code changes required to support upgrades, downgrades, and crossgrades for iOS subscriptions in your app. A customer can choose to upgrade, downgrade, or crossgrade between subscriptions as often as they like. I know this is possible externally from the the iPhone Settings “Manage Subscriptions” page.I want to know if it’s possible internally from the app.For example, the app presents an annual subscription paywall to a monthly subscriber. If the user tries to subscribe to the annual plan, will it seamlessly switch subscriptions?In the past, attempting to purchase the same subscription within the same group returns an error. I’m cautiously shipping both approaches: internal paywall and redirect to external settings.
Hi! Is there an endpoint available that allows me to only get my active subscribers?I was only able to find this endpoint, which just returns all customers:https://api.revenuecat.com/v2/projects/{projectId}/customersI saw this old thread where this wasn't possible, but it would be great if it's been added since then.Furthermore, I looked through the docs here, but wasn’t able to find an endpoint that just returns my active subscribers / free trials.https://www.revenuecat.com/docs/api-v2#tag/Entitlement/operation/detach-products-from-entitlement
I’m using RevenueCat Experiments and would like to clarify how targeting rules interact with experiment variants. I’ve reviewed the documentation here: RevenueCat Targeting FAQ, which states that experiments are evaluated before custom targeting. However, based on my testing, it appears that RevenueCat respects targeting rules first before applying any experiments.My setup: I’ve defined a custom subscriber attribute called subscription_type, which can be either "Free" or "Premium". For the appLaunch placement, I’ve added the following RevenueCat targeting logic: If subscription_type == "Free" → show a paywall. If subscription_type == "Premium" → no paywall/offering should be shown. I’ve also created an experiment on the same appLaunch placement that tests two different paywall variants. What I’m observing: Users with subscription_type == "Free" are correctly entered into the experiment and see one of the A/B tested paywalls. Users with subscription_type == "Premium" do n
It’s kinda of a joke to me that I can’t put the charts in my timezone. Image that I want to compare my Ad Spend in Google Ads, to acquired users in RevenueCat for a particular day. Since Google Ads has the engineering talent to put charts in my timezone, it becomes rather difficult to compare it to RevenueCat charts that can only handle UTC.
Hi all In my app I am able to make purchases. That is working fineHowever the users who have not yet purchased but interacted with the app including going to the paywall are not showing up under customs in RevenueCat.I am using Flutter flow.What could I be doing wrong?
Hi, stepped away from this particular app I’m working on and just got back to it again. I’m still having difficulties getting the new paywall to show in the app. I had posted a question sometime ago but didn't get to try the proffered suggestions earlier as I stepped away from the app. when I try to duplicate or create a new offering, and attach the newly created paywall to it, it still displays with errors.how do I detach the current V1 paywall from the offerings?@guilherme
The new Customer Center doesn’t seem to be showing the userID. In the previous version, the userID was visible in the Purchase History. However with the new version it’s nowhere to be found. I can confirm this on both debug and production builds (not sure if these are supposed to be different?).I’m looking at iOS platform and on latest SDK 5.28.1 version.I assumed this was removed on purpose in the new Customer Center so I was just about to add it to my app manually. But after seeing it existed in the demo from the June 2025 launch party, I am not sure if there’s something I have to do on my side to show the userID in the Customer Center? My user’s all have anonymous ids.This is how it looks like:
I need to display the subscriptionPeriod and the price of the currently active subscription directly within the app.My app uses anonymous user IDs (no login or authentication), and I don’t have a backend server involved.What is the best way to retrieve and display this information using the RevenueCat React Native SDK?
I’m trying to follow the docs for the capacitor purchases plugin. I’m migrating my codebase from the awesome-cordova-plugins approach I used with capacitor 2. Incidentally, docs are not entirely clear as sometimes there’s no capacitor example (only cordova). Anyway, my issue isIf I use one of these ...const customerInfo = await Purchases.getCustomerInfo();Purchases.getCustomerInfo().then((customerInfo) => {Then use this ... it tells me there’s no entitlements property …customerInfo.entitlements.activeBut if I double up the ‘customerInfo’ then it doesn’t complain …customerInfo.customerInfo.entitlements.activeNote that these issues are showing up in VSCode editor … I haven’t converted all the code yet, so nowhere near actually building/running this.What’s going on? Not sure if this affects anything but I wasn’t going to uninstall the old plugins until all my new code is written, so all these are still there:"@awesome-cordova-plugins/purchases": "^5.37.3","@revenuecat/purchases-capacit
As per the subject, how is the USD value calculated for the webhook ‘price’ field if the purchase is made in a different currency? Building for both the App Store and Google Play. Thanks
Since I already have subscription products in App Store trying to use the feature “Import Products automatically” but all I get is an error message “App with bundle id xxxxx.xxx.xxx was not found in the store.”. The support seems busy based on their message so I decided to post here.
Hi RevenueCat team,I'm experiencing an issue with the relative_discount calculation in my paywall.Setup- Package 1: 6 months subscription at €59.99- Package 2: 12 months subscription at €55.00 (with 8% OFF badge)Expected behaviorThe annual package should show ~54% discount compared to 6-month package:- 6 months annualized: €59.99 × 2 = €119.98/year- 12 months: €55.00/year- Real discount: (119.98 - 55) / 119.98 = 54.17%Actual behaviorPaywallView displays "8% OFF" which is incorrect.Questions1. How is relative_discount calculated exactly?2. Is this comparing against a different reference price?3. Should I configure something specific in my offering setup?Environment- purchases_ui_flutter: ^8.10.1- Platform: Android/iOSAny guidance would be appreciated!
Hello ! I have an app that we built about months ago. App didnt perform well so we start to update and advertising it. App was like a dead app 0 downloads, 0 interactions. A weird thing happened like 3-4 weeks ago. 4 account have started trial exactly same time from US. Then 2 days later again 4 account started trial and this keep happening occasionally. All of the apps track similar pattern Annual Trial starting > converting to paid > get refund and renewal for weekly > cancel. None of them used app just do this. When I saw first 4 account started trial I contact to apple immediately and tell about situation. They say they will investigate, I keep giving the updates to them and they said me that they investigated the situation and situation is normal. So I decide to give it a go but then 1 week ago Apple e mailed me saying that they detected irregular activities on my account and my payments are on hold now. I contacted them again and there are no responses for 1 week. Are th
I am trying to build my app with Xcode 26 beta 1. RevenueCat is generating errors:For many functions, I’m getting this error.“Concurrency is only available in iOS 13.0.0 or newer” Here is an example of the code in Obsoletions. func paymentDiscount(for discount: SKProductDiscount, product: SKProduct) async throws -> SKPaymentDiscount { fatalError() } I am using RevenueCat 4.43.3Is there a way I can avoid these errors - I am not ready to move to RC 5.x yet.My code supports iOS 16 or later.
Hi all, I am trying to set up a new react native app and having trouble with this err: [Error: There is an issue with your configuration. Check the underlying error for more details. There's a problem with your configuration. None of the products registered in the RevenueCat dashboard could be fetched from App Store Connect (or the StoreKit Configuration file if one is being used). More information: https://rev.cat/why-are-offerings-empty]I had this working just last week (paywall was showing up, products fetched properly etc.) but it suddenly stopped working. I have not changed anything in my revenuecat setup, I haven’t changed anything in my app store connect or revenue cat setup (I’ve checked revenuecat audit logs, nothing changed in last 3 weeks). The only potential issue was there was a new app developer agreement for free apps, so I signed and its been over 24 hrs since I’ve signed it but still seeing these issues.I know this is an issue many others have faced, but I have gone th
Hey team - getting this crash on Xcode 26b1 (17A5241e) running on any iOS 26 simulators. I’m on the new v5.28.0 SDK. I can’t repro this in a sample project, otherwise I would’ve posted this to Github as an Issue, not sure if it’s something in my project setup, etc. Things I’ve tried:I commented out any other use of the RC SDK to make sure there wasn’t some race condition happening I’ve tried changing my deployment target to iOS 26 (instead of iOS 17 where I am now) I’ve tried some of the other configure functions including the config builder one, they all crash the same It’s affecting all iOS 26 sims, doesn’t crash on iOS 18 sims I simplified my AppDelegate to the following and still getting the crash (it crashes with a real API key or a fake one in there): import RevenueCat@mainclass AppDelegate: UIResponder, UIApplicationDelegate {}extension AppDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?) ->
Is it possible to have a multi-step (multi-page) paywall with RevenueCat? Using Superwall, but would prefer a single provider. If so - how would I achieve this? It looks like it’s one paywall page only from playing around in the UI. Thanks
Hi,Thanks for your blog post: Converting a Paid iOS App to Subscriptions. It was very helpful! I have a few follow-up questions: Is all the code and information in the post still up to date after a few years? Regarding the syncIfNeeded function: it checks the info returned from RevenueCat, and if that fails and a receipt exists, it attempts to sync. But what happens if the receipt doesn't exist, or syncing isn’t sufficient? Is that a possible scenario? How should we handle users in that situation? In such cases, should we fall back to calling restorePurchases, which might trigger the system sign-in prompt? The article doesn’t mention this. Also, I noticed that appStoreReceiptURL is now deprecated, and Apple recommends using the AppTransaction API. I've tried this in my app, but in some cases, I can't access the original app version or purchase date unless I explicitly call AppTransaction.refresh(), which often causes a sign-in prompt. This seems similar to RevenueCat’s restorePurch
I'm running into an issue when using the PaywallViewControllerDelegate with the RevenueCat iOS SDK version 5.22.2.I’m presenting the paywall manually using the following code:extension AppPaywallBuilder { func build() -> UIViewController { let viewController = PaywallViewController(offering: subscriptionManager.offering) viewController.delegate = self viewController.modalPresentationStyle = .fullScreen return viewController }}extension AppPaywallBuilder: PaywallViewControllerDelegate { func paywallViewController(_ controller: PaywallViewController, didStartPurchaseWith package: Package) { print("aaaa") } func paywallViewController(_ controller: PaywallViewController, didFinishPurchasingWith customerInfo: CustomerInfo) { print("aaaa") } func paywallViewController(_ controller: PaywallViewController, didFinishRestoringWith customerInfo: CustomerInfo) { prin
Referring to this part of the docs “What happens to customers that were enrolled in an experiment after it's been stopped?”. I want to target users who we’re entered into an experiment with a follow-up experiment. But it states they will see the default offering even though the experiment has ended?https://www.revenuecat.com/docs/tools/experiments-v1/experiments-results-v1 Is it possible to include these users in a new cohort for a new experiment without removing their user records or waiting for lots of new users to make the test useful? Our goal is to price test different offerings. Our first test gave use some good results but we want to continue targeting users who were a part of this first test but did not subscribe.
i can’t relace image for paywall. no interaction after tapping saving changes.
I added the SDK initialization in my code. But when I launch the application, it crashes and shows this error Your app just crashed. See the error below.java.lang.NoSuchMethodError: No static method configure(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Lcom/revenuecat/purchases/PurchasesAreCompletedBy;Lcom/revenuecat/purchases/common/PlatformInfo;Lcom/revenuecat/purchases/Store;Lcom/revenuecat/purchases/DangerousSettings;Ljava/lang/Boolean;Ljava/lang/String;)V in class Lcom/revenuecat/purchases/hybridcommon/CommonKt; or its super classes (declaration of 'com.revenuecat.purchases.hybridcommon.CommonKt' appears in /data/app/~~S6Gdua0r00AvocmBAY814g==/com.heavenmobile.app-Nfa1Ti6hbTxWjSgfJhC-wg==/base.apk!classes8.dex) com.revenuecat.purchases.react.RNPurchasesModule.setupPurchases(RNPurchasesModule.java:95) com.facebook.jni.NativeRunnable.run(Native Method) android.os.Handler.handleCallback(Handler.java:942) android.os.Handler.dispatchMessage(Handler.java:99) com.fa
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.