Discussion and help from anything related to RevenueCat.
Recently active
As seen in this answer, there’s supposed to be an option to change the Introductory offer text in the text properties but that option is not available for me. How do i enable it? Attached is my version:
I would like to display yearly price next to the monthly price x12 with strikethrough. E.g.:~59.99~ 29.99 RevenueCat is already doing the math for `relative_discount`. Seems like it should be easy to expose the value used in the calculation. Could call it something like `price_before_discount`. This is very common on paywalls and seems like an oversight on RC’s part. There are many other community posts asking for this. E.g. this one
I understand that, as a developer, we should refund via RC dashboard, not Play Console. However, what about when the customer triggers a refund on the Play Store? How can my app detect this? Or will it actually be reflected somehow in the entitlements?
Hi, I really like the beta of RevenueCat Funnels but I need to integrate authentication as part of an onboarding/payment sequence. I’m currently using FunnelFox which has an in-built integration for Firebase Authentication (with Google, Facebook, and Apple auth providers, and providing a popup flow for previews and a redirect flow for production) and I’ve written some script on that page to allow email signups too through Firebase. I can see the beta can link out to my own sign-up page, but I can’t see how to send / receive parameters so I can record Amplitude and RevenueCat user IDs in that sign-up and return an email address to the funnel so that the email field on the paywall page can get automatically filled out. Does RevenueCat Funnels have anything like support for this, or custom Javascript, or access to Amplitude / RevenueCat user ID variables?
Hi,I’m evaluating Virtual Currencies for my mobile apps. My apps do not have a login/account system for users, but I always assign my own UUID as the RevenueCat App User ID instead of using anonymous RevenueCat IDs.My main question is about reinstall behavior.Scenario: user installs app app is initialized with my own UUID-based App User ID user buys virtual currency and has remaining credits user deletes the app user reinstalls the app app may now generate/store a new UUID and use that as a new App User ID in this case in my other premium based apps, I see a message like “Created a new alias …” in the RevenueCat dashboard From the docs, the balance endpoint is:curl --location 'https://api.revenuecat.com/v2/projects/<YOUR_PROJECT_ID>/customers/<YOUR_CUSTOMER_ID>/virtual_currencies' \--header 'Authorization: Bearer sk_***************************'My questions are: If a new App User ID is used after reinstall, and RevenueCat creates an alias, will querying /customer
purchases_flutter: latest in_app_purchase: latest Platform: Android Framework: FlutterProblem: After adding purchases_flutter to a Flutter project that already used in_app_purchase, this call queryProductDetails() freezes indefinitely and never resolves:final ProductDetailsResponse response = await InAppPurchase.instance .queryProductDetails(productIds);
Hi, I’ve seen a few open issue more than a year ago. Can we expect it sometime soon?
Since I know manage user IDs, then when a user logs out and logs in with a new user, then I will have two users with unique IDs but the same idfv/gpsAdId. What should I do? They might be the same user logging in or creating a user through a different login, but they also might be a completely new user.What should I do?
Heads up everyone it looks like all icons for both iOS and Android apps have suddenly disappeared from the UI, on both web and mobile.Not sure if this is a bug or part of an update, but the interface is currently missing key visual elements, which makes navigation pretty confusing.Is anyone else experiencing this?It’s been like this for weeks
Hi,I'm experiencing an issue where purchases are completing successfully but entitlements are not being automatically granted. All purchases show as "Unattached products" in the customer profile, even though the product is correctly attached to the entitlement in the dashboard. Purchase completes successfully, appears in both Play Console and RevenueCat customer history. However, the product appears under "Unattached products" in the customer profile. This happens for every user and every purchase. What I've verifiedProduct identifiers in RevenueCat match exactly with Google Play Console (subscription ID + base plan ID) Product is attached to the entitlement Service Account Credentials JSON is uploaded Store Status shows Published Purchases are coming through the correct store (Play Store) App User ID is set correctly in code and matches the dashboard Google Play Order ID is valid and matches Play Console Entitlement identifier used in code matches the one in the dashboard Could someon
Hey everyone, Im trying to integrate AppsFlyer with RevenueCat, but I cannot seem to hook things up properly. I get the AppsFlyer data on my customers but the event is never sent, there is neither successful nor unsuccessful events. Any pointers what i need to check? This is sandbox testing, do i need to add different keys and or apps for this, or do I use the same app IDs and dev key?
was trying to integrate, My App store connect with my RC but getting this issue:“The key is not valid or is not compatible with the bundle id of your app.”Even though my Bundle ID is valid on both xcode and appstore connect i just copy pasted from that,
If anyone else is struggling with RevenueCat not exposing Google Play's OneTimePurchaseOfferDetails (like Launch Offers or region-specific discounts for In-App products on Android), here is a bulletproof workaround we implemented in production.The Problem: Google Play added oneTimePurchaseOfferDetailsList in Billing Library v6 for in-app products, but purchases_flutter (and the underlying purchases-hybrid-common) currently drops this array when serializing the Native ProductDetails into the Dart StoreProduct. So storeProduct.price just returns the un-discounted base list price.The Workaround: Use the official in_app_purchase package strictly as a "read-only scanner" to fetch the real JSON natively, and keep using RevenueCat for the actual purchase. Add the dependency Add in_app_purchase: ^3.2.0 to your pubspec.yaml. We won't use it to buy things, only to query the Google Play API directly. Create a quick Extractor Service This queries the Google Play Billing Library and finds the low
I am experiencing an issue with the "Transfer if there are no active subscriptions" restoration strategy. This behavior works as expected on iOS but appears to be bypassed on Android.The Scenario: Both User A and User B are identified (non-anonymous App User IDs). User A has an active subscription linked to a specific Google Play / Apple ID. I log out User A and log in as User B on the same device. User B calls Purchases.restorePurchases(). Expected Behavior (observed on iOS): On iOS, RevenueCat correctly blocks the transfer (there won’t be any transfer event) and returns the RECEIPT_ALREADY_IN_USE_ERROR because User A still has an active subscription.Actual Behavior (observed on Android): On Android, the restorePurchases() will return an error but the transfer event will still happen.This contradicts the documentation for this transfer behavior. I have confirmed that this is happening in a sandbox environment, User A's subscription has not expired, and I’m applying "Transfer if
I read a previous reply what was closed for comments that suggested a Package list but there is no such component.The template picks up my monthly and yearly packages, but I have two lifetime packages that I’d also like to display. Is there a way to have a show all packages button? Or is there some other approach?
I have added a logic to the paywall and now it cannot be published or changed. The Browser in the Console shows me this: { "code": 7862, "errors": [ { "field": "config.base.stack.components.1.stack.components.1.package.overrides.0.properties.visible", "message": "Extra inputs are not permitted", "type": "extra_forbidden" }, { "field": "config.base.stack.components.1.stack.components.1.package.overrides.1.properties.visible", "message": "Extra inputs are not permitted", "type": "extra_forbidden" }, { "field": "config.base.stack.components.1.stack.components.2.package.overrides.0.properties.visible", "message": "Extra inputs are not permitted", "type": "extra_forbidden" } ], "message": "Paywall validation failed"} Which extra Inputs? Without the logic, it makes no sense. Best regards and thanks!
https://api.revenuecat.com/v2/projects/${project.id}/charts/actives?realtime=false&start_date=${dateStr}&end_date=${dateStr}I want to get the result for a single specific app from the link above.How do I do that?
I have read many posts about this but still don't know what's going on. I can't figure out why I can show my subscriptions but not the non-consumable product. Starting from Google Play, these are my subscriptions (again, no problem with them):The no-consumable product:(no country restrictions, set price...) And now comes RC. This is my product catalog:These package were imported from the Play Store. I did not create anything manually.If we go inside lifetime option:As we can see, it's published and IDs are fine (I'll explain later why I'm showing it from 2 offers).Now moving to the paywall, I'm showing the 3 offers correctly:But when I show the paywall in my phone, the last option is not there, just showing the subscriptions. Inspecting the products I get, there are only the 2 subscriptions.I tried to create a new paywall so I duplicated the offer with same products (that's why) and when showing the new paywall, the same problem happens.I'm using Flutter and Android.What am I doing wro
Hi,I’m using the RevenueCat Web Paywall Editor and would like to keep using it (no custom paywall in code).With Android 16, forcing portrait is no longer allowed → I now need proper landscape support.Current challenges: Paywall is optimized for portrait, but breaks in landscape (height constraints) Editor only provides FIT / FILL / FIXED — no responsive rules No way to: show/hide elements based on orientation adjust layout/spacing per orientation Tried switching images from FILL → FIT, but still not getting good results Questions: What are the best practices to design a paywall that works well in both portrait & landscape using the Web Editor? Is the expected approach: one responsive layout? or multiple paywalls handled in the app? Any docs / examples for landscape optimization? Thanks
Hello,I am encountering the well-known readable_error_code: CONFIGURATION_ERROR (code: 23) while implementing subscriptions on iOS.I have already performed several checks to identify the cause of the issue, and so far all configurations appear to be correct: All contracts in App Store Connect have been properly signed. The product identifiers match exactly between App Store Connect and RevenueCat. All required metadata and configurations have been completed. The backend integration has been finalized and appears to be working as expected. We also performed tests on physical devices (iPad and iPhone) running iOS 26.2.1, and the error still occurs when attempting to fetch the products.The only potential issue I can identify is the subscription status. The products are currently listed as “Waiting for Review” in App Store Connect and also appear with the same status in the RevenueCat dashboard.Because of this, I would like to confirm whether this status could prevent the purchases f
Hey, I’m in the process of selling my app to someone. It’s on iOS + Web. I use RevenueCat for both. As far as I’m aware, when I transfer the app on App Store Connect, all the secrets/keys remain the same? How does it work on RevenueCat web billing? I can’t transfer my Stripe account as I’ve got other apps running through there, but I also don’t want any disruption to existing subscribers. What would be the best way going about moving web purchases over to a new Stripe Account? Thanks!
My custom paywall was showing for a couple of days in TestFlight, but for some reason its reverted to the Apple default paywall...which is causing my app to be rejected. HELP!!
We're using RC Billing (Web Billing) with the RevenueCat JS SDK. During the purchase flow, we pass the customer's email via the `customerEmail` parameter in `Purchases.purchase()`.Due to a bug on our side, some subscribers had an incorrect email passed as `customerEmail` at checkout time. We've since fixed the bug, but for the affected subscribers, all lifecycle emails (subscription confirmation, renewal reminders, billing issue notices, etc.) are still being sent to the old incorrect email.What we've already tried:1. Updated the `$email` subscriber attribute in the RevenueCat dashboard — lifecycle emails still go to the old address.2. Updated the email on the corresponding Stripe Customer — lifecycle emails still go to the old address.It appears that RC Billing stores the checkout email internally, separate from both the `$email` subscriber attribute and the Stripe Customer email, and uses that internal email for lifecycle emails.Questions:1. Is there an API endpoint or dashboard opti
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.