Discussion and help from anything related to RevenueCat.
Recently active
If you’re here, it’s probably because you’ve encountered an active issue related to Apple’s receipt verification.RevenueCat relies upon Apple’s `verifyReceipt` endpoint which is currently facing an outage: https://developer.apple.com/system-status/This seems to be affecting sandbox and TestFlight purchases only at this time, although Apple’s status page doesn’t mention it explicitly.Encountering this issue? Post below ⬇️ RevenueCat isn’t able to resolve this at this time from our end, but it may help bring awareness and ease to other developers facing the same issue.Update 2/8/23 19:20 UTC:Customers (and me 😃) reporting things are working as expected again - post below if you’re still having trouble, seems like a slow rollout of a fix from Apple.Update 2/8/23 17:40 UTC:Apple’s reporting the issue is fixed, but we’re still encountering errors. Will provide another update as soon as possible.
Expo Go doesn’t build native modules, so you may run into this error while trying to run your app with react-native-purchases in Expo Go. In order to use RevenueCat with Expo, you will have to create Development Builds, which can be done either by using EAS, or by making builds that are compatible with Xcode and Android Studio. There are detailed instructions for doing either one in this page:https://docs.expo.dev/development/build/ Easiest way to be able to debug is to just run either of the following:npx expo run:android -dnpx expo run:ios -d We also have a blog post that goes step-by-step into how to make an app with Expo and RevenueCat using EAS: https://www.revenuecat.com/blog/in-app-puchase-expo-managed-workflow/ Let us know if you run into any issues!
Hi! 👋🏻 We’re in the final stages of our testing of some StoreKit 2 features before fully calling it ready for production, and we’d love your help! Context: Starting with v4.0.0, our SDK already uses StoreKit 2 by default on compatible devices for some features where the StoreKit 1 functionality was problematic, buggy or unreliable, and StoreKit 2 is essentially guaranteed to be an improvement (like checkTrialOrIntroDiscountEligibility). For devices that aren’t compatible with StoreKit 2, it defaults to a StoreKit 1 implementation. However, we haven’t enabled StoreKit 2 by default for making actual purchases. We’ve tested it extensively in Sandbox and StoreKit Test (see our blog post on how we test our SDKs) but we need to see how well StoreKit2 behaves in production before calling it ready. How to help: Our SDK includes an optional flag in the configure method, called useStoreKit2IfAvailable. In order to help, all you need to do is to set that flag to true! With this flag set,
I’m using a custom font with 3 weights (450, 500 & 550). I’m using these in my paywalls, and they display properly in the Paywall Editor and in my iOS and Android app. On the web, (@revenuecat/purchases-js 1.39.1) it’s not as great. The 500 font doesn’t really show up different than the 450. Font-weight is good if I inspect it but visually it’s not right.Wondering if it could be related to that specific font, or it’s a web SDK issue?Thank you.
Hi RevenueCat team,I'm participating in Shipaton 2026 in the non-Next Gen category. My app (TRDS — Educational Virtual Trading Simulator) is not yet published on any app store. I noticed the Devpost submission form does not have a field for a store URL.My questions:1. Is a published app store link required for non-Next Gen submissions? 2. If required, where should I submit it since the form doesn't ask for it? 3. If the app is not yet published, will my submission be disqualified? ~Thank you.
The context:This was a question previously asked which RevCat never officially answered. I came across this problem myself and solved it, wanted to share the answer, but RevCat also prevented anyone from replying in that thread so I’m sharing it here in the hopes that it might help someone in the future.The Problem:So the problem is that Revenue Cat tells you to get Dataset ID and Conversion API Token. You go to Meta Events Manager as instructed. If you had previously set up your app with meta, you’ll see your app listed in Datasets. You click on that, yet there is no Dataset ID (just the meta app id) and no option to create a conversion API token in settings.The Solution:The instructions are missing a step.Go to the automatically created “Dataset” for your app Go to Settings Find the button that says something like “Link data”. Click it. (It might have been connect to dataset or something like that- can’t recall exactly, and can’t go back to double check) It tells you to choose betwee
Hey RC Team, I use your charts mulitple times a day to track the progress of my business.One thing that would be a massive help to me would be to have a chart that looks at auto-renew status and gives the expected churn over the coming days. I think 30 days would be fine for my use case. I have created a number of custom charts and customer segments to track this to get a decent look at it but if there was a chart it would be super easy. It could even have the New MRR forecast as well as the auto-renew status of outstanding trials if you wanted to match the MRR Movement chart design but tbh that would be less important for us as we have a relatively good handle on forecasts for the new MRR.Happy to share screenshots and snippets if you guys wanted to take the idea forward. Best,Tom
Using purchases_ui_flutter with Paywalls V2 configured with a Google Font (e.g. Newsreader). On a fresh install, the first time RevenueCatUI.presentPaywall() opens, the paywall renders using the default system fallback font. The native UI does not recompose once the font download finishes in the background. If the user closes and reopens the paywall, the correct font displays immediately because the font file is now cached locally. How can we trigger or guarantee font preloading on the first render?
Hello,We're using a commercial font called "Campton" in our RevenueCat paywall. We're occasionally seeing characters in certain languages render incorrectly (please see the attached screenshot).One thing we found odd is that if we change the device's system language to that language and reopen the paywall, the characters that were previously broken now display correctly.For example, with the device language set to Korean, some characters were broken when viewing the Vietnamese paywall. After changing the device language to Vietnamese, those same characters rendered properly.Because of this, we'd like to understand how fonts are applied to paywalls. For instance, when the configured font doesn't support certain characters, is there any fallback logic — such as falling back to the system font?Thanks in advance for your help.
Hi, just wanted to give a heads up that I’ve started to see a read-after-write gap between webhook emission and /v1/subscribers, dating to ~Sept 1 14:30 UTC. My server responds to all webhook events by requesting and updating entitlements from /v1/subscribers (as recommended), and after every INITIAL_PURCHASE event I’ve received since then (all from Google Play purchases), the response has had unexpectedly empty entitlements. No code changes on my end and I’ve not seen similar issues previously.I’ve updated my server to be resilient to this issue, and I’ve also filed a ticket through support with more detailed info on my specific case, but wanted to post this here for a higher chance of visibility as I doubt I’m the only customer seeing this.
On android, in a .aab internal testing build, sometimes the paywall will show and sometimes it won’t. When it doesn’t show, just the loading skeletons display indefinitely. At other times the paywall will show. Restarting the app doesn’t help, and reinstalling doesn’t either. Then at other times the paywall will work perfectly. Another app (installed through the Play store) on my phone that uses revenuecat seems to be out at the same times, and working at the same times.
I’m currently writing an API endpoint for use by an Android app, to interface with the “Restore a Google Play purchase by order ID” REST API endpoint. This is due to well-known “consumed purchase” misconfiguration issue. It’s hard to test it due to the nature of the issue, and therefore I have a few questions.If the restoration succeeds (i.e. the response code is 200), can I immediately query the customer info (using the app SDK) and expect the entitlement that wasn’t present before to now be immediately present, or does it take time? I will disable caching for the request. If the customer entered an invalid order_id (the GPA… value) what response code should I expect from the API? I’m seeing 404, is that correct? What safeguards are there for customers restoring to multiple devices, for example if their order_id became public? Once an order is restored can it be restored to other users? How much protection should I build into my API? Are there any other potential vectors for abuse I s
We use the RevenueCat Purchases SDK for Kotlin, version 9.28.1, on our Android app.In our use case, we want to set or update the user’s e-mail attribute on their RevenueCat profile as part of their logging in to our app. The e-mail is a piece of data that does help during customer support, so we want it to be stored reliably on RevenueCat.We are aware that user attributes are not immediately synced to the RC backend for calls like setEmail(), and that attribute syncing actually happens implicitly as part of other, more significant, events (or with an explicit syncAttributesAndOfferingsIfNeeded() call.) With this in mind, we do these two calls, one right after the other:Purchases.sharedInstance.setEmail(...)Purchases.sharedInstance.logIn(...)We have browsed the SDK source code and it does look like logIn() is one of the calls for which attribute synchronization happens under the covers on the Kotlin SDK (even though that is not mentioned in the documentation), which might mean that we d
Hi everyone,I'm running into the known Billing Library 8 limitation around consumed one-time products, and want to confirm the recommended path forward, plus flag one detail that seems inconsistent.Setup:Flutter app, no login system (anonymous app_user_ids) purchases_flutter 10.11.0 / purchases-android (via hybrid common) Product sfl_pro is a non-consumable one-time product (not a subscription), correctly configured as non-consumable in the RevenueCat dashboard Transfer Purchases setting is enabled correctly Testing via Open Testing track with a licensed tester account (sandbox/test purchases, not production charges)Issue:User purchases sfl_pro on Device A → works, entitlement active. On Device B (same Google account, same license tester, confirmed identical "preferred billing account" identifier in logcat), restorePurchases() returns successfully but with an empty result: activeEntitlements: [], nonSubscriptionTransactions: [],However, if the user tries to purchase sfl_pro again f
I'd like to request support for Airwallex as a payment gateway / billing provider for RevenueCat's Web Billing (alongside Stripe and Paddle).Why this matters:Airwallex is widely used in Vietnam and across Southeast Asia, where Stripe availability and local payment method coverage are limited. It offers strong support for local payment methods and multi-currency settlement that are important for our market. Currently, needing Stripe or Paddle is a blocker for teams like ours who already run our web payments through Airwallex.Use case:We sell web subscriptions and want to use RevenueCat's paywalls, customer portal, and cross-platform entitlements — but process payments through our existing Airwallex account.Impact:This would let developers in underserved regions adopt RevenueCat Web Billing without switching payment processors.Thanks for considering!
This question has been asked before more than half a year ago here:Using offers on new Google Play one-time products | RevenueCat CommunityiOS & Android - In app purchase discount codes | RevenueCat CommunityI want to use the discount function for my one-time product in Google Play. It would be great if RevenueCat would be able to display the discounted price, maybe alongside the regular price so that we can dynamically build texts like--4,99€-- (strikethrough) only 0,99€ How is the current situation and progress on this topic?Thanks for any clarification.
Hi,Google Play has recently published the new guidelines for app optimization with R8 and is actively pushing for it (https://developer.android.com/topic/performance/app-optimization/enable-app-optimization).I want to comply ASAP, but I am also super paranoid about breaking anything related to the payments.I just updated to:```"@revenuecat/purchases-capacitor": "13.4.2","@revenuecat/purchases-capacitor-ui": "13.4.2",``` And I found that the dependency comes with the proguard rule:`-keep class com.revenuecat.** { *; }`I am happy with all that, all I want is to make sure that once I enable this:```minifyEnabled = trueshrinkResources = true```nothing breaks.So I would appreciate the “official” confirmation on this.Thank you!
Hi, just recently added revenue cat in my app,The app is already live without revenue cat, I adjusted prices for one country.Now testing my revenue cat integration in TestFlight and I see the non adjusted price is displayed in my Paywall but then the native subscription sheet shows the adjusted smaller price. I am reading price from `storeProduct.localizedTitle`
Hello,I’m building an iOS app that is not live yet. I want to offer fixed-duration Premium access for 1 month and 3 months, without automatic renewal.In App Store Connect, I can create Non-Renewing Subscriptions, but in the RevenueCat Test Store product selector I only see: Auto-renewing subscription Consumable Non-consumable There is no Non-Renewing Subscription option.Am I missing something, or are iOS Non-Renewing Subscriptions not officially supported in the RevenueCat Test Store/dashboard?I’m specifically looking for the official, supported RevenueCat configuration—not some custom workaround.If they are officially supported, what is the correct way to create, import, map, test, and associate them with an entitlement and offering? If they are not supported, what is the recommended product type for fixed-duration access without automatic renewal (and what product should I make in App Store Connect)?
Hello people, I just want to understand a bit more on how the revcat Test Store works. First, I tested with a local dev build and it works perfectly fine. But when I got and create a preview build (NOT production, release) build, I get the warning that im using a test key and the app will now close. Is this normal behavior or is there a way to fix this? I dont have the option to use the real app store key on a preview build because I have different build environments along with different bundle identifiers. This would imply that I have to create a new app in app store connect simply to test the native purchase flow.
Hi Team,I am writing to inquire about the eligibility requirements for the "Next Gen" category in the Shipaton 2026 Hackathon.I am currently an active student in Pakistan, studying at a public government school. In our region, government schools do not provide students with official academic email addresses (such as .edu or school-specific domains). We only have our personal Gmail/Yahoo accounts for online registration.Since having a student email is a requirement for verification, is there an alternative way for me to prove my student status? I can provide my official School ID card, B-Form (Government-issued child registration certificate), or current academic enrollment documents as proof.I am highly enthusiastic about participating in the Next Gen category and built an innovative app for this hackathon. Please let me know if I can submit my alternative documents to verify my account manually.Thank you for your time and assistance.Best regards,[Mahad Ismail][Pakistan]
Hi all 👋I'm building a small open-source CLI for testing RevenueCat webhooks locally. Before I build more of it, I'd rather learn what people actually struggle with than guess. 1. The last time you tested a subscription flow end to end, what did you actually do? a) Sandbox purchases and waited for the store's clock b) StoreKit Configuration file / Play test cards, locally c) RevenueCat Test Store d) Dashboard "send test webhook" + ngrok e) Didn't test it, shipped and watched f) Something else2. What was the last thing about purchases or webhooks that cost you more than an hour? Related (closed) threads:• Webhook local environment testing — https://community.revenuecat.com/third-party-integrations-53/webhook-local-envirement-testing-5082• Is there no way to do local testing with webhooks — https://community.revenuecat.com/dashboard-tools-52/is-there-no-way-to-do-local-testing-with-webhooks-6574• Webhook replay — https://community.revenuecat.com/sdks-51/webhook-replay-7209•
When I try to “Change Plans” using the Customer Center in my ios app, it shows 2 previously deleted App Store Connect subscriptions in addition to the 2 active ones. How can I prevent this from happening? This would be fine if I could configure the subset of options in the RCs “Customer Center” configuration page, but it says I only have 2 subscriptions so I can’t customize it. So there’s a disconnect between how many RC thinks there are and how many options are shown.Also, those two deleted ones were not added to RevenueCat initially when syncing for App Store Connect, but when my app (which was updated from an older version which referenced the deleted plan) connected to RevenueCat for the first time, the deleted plan also populated into RevenueCat’s list of Products.I’m using SDK 5.85.0.
Hi RevenueCat team,for my subscription-based app, I recently noticed a bulk of first-time downloads in App Store Connect labeled as “Institutional Purchase”. The app itself is free, with premium functionality unlocked through an auto-renewable subscription managed by RevenueCat.This got me looking into Apple's new WWDC26 organizational subscription volume purchasing.When an organization purchases and assigns a subscription to a user, StoreKit reports a transaction with `Transaction.OwnershipType.assigned`. Will RevenueCat recognize this transaction and expose the corresponding entitlement as active through `CustomerInfo.entitlements.active`, just like an individually purchased subscription?More importantly, will this work server-side/backwards-compatibly with already released RevenueCat SDK versions, or will apps need to ship an SDK update before organization-assigned subscriptions can be recognized? Similarly, when Apple reports `assignmentRevoked`, will RevenueCat automatically deact
Dear Revenuecat community, I’m running into an issue with Google Play not supporting my national payment method for subscriptions. This causes quite some friction with my users and I can clearly see the difference between the amount of iOS users that convert compared to the very limited Android users. I’ve been looking for a solution and came across RC’s app-to-web checkout: https://www.revenuecat.com/app-to-web I’m curious if there are people that have implemented this app-to-web checkout and could share their experience with friction (does it actually become easier?). Before quickly deciding and implementing I want to ensure that this is a concrete decision and will actually help my users and app in the long run. We could also skip app store fees, thus making the app a bit cheaper to involve a broader user base.In short; does anyone have experience with app-to-web checkouts, and if so did it help your app/does it bring any friction?
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.