Get help with your SDK implementation.
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,
Our users' devices report A LOT of these warnings after we updated to the latest KMP SDK:[Purchases] - WARN: Could not resolve remote config blob(s) for 4 of 4 requested item(s) in topic 'ui_config': [app, localizations, variable_config, custom_variables]. Returning null. These are new in our latest Android release, and we're getting 1000s of them reported on Sentry. We haven't changed anything in our RevenueCat config/account, just updated the SDK.Current SDK versions (in which the warning occurs): com.revenuecat.purchases:purchases:10.16.0 com.revenuecat.purchases:purchases-kmp-core:3.4.0 com.revenuecat.purchases:purchases-kmp-core-android:3.4.0 com.revenuecat.purchases:purchases-kmp-mappings-android:3.4.0 com.revenuecat.purchases:purchases-kmp-models-android:3.4.0 Previous release contained these SDK versions (warning doesn't occur): com.revenuecat.purchases:purchases:10.14.1 com.revenuecat.purchases:purchases-kmp-core:3.3.1 com.revenuecat.purchases:purchases-kmp-core-an
Components-based paywall: conditional intro-offer row is missing in the firstrender, even though eligibility is already cached## Setup- purchases-ios 5.70.0, SwiftUI, iOS 18- Components-based paywall built in the editor, presented with RevenueCatUI.PaywallView(offering:displayCloseButton:)- In the editor, a text row ("7 days free trial") is hidden by default and shown only when the customer is eligible for the introductory offer, by paywall logic.- Product identifiers below are redacted.## ProblemThe paywall opens with that row missing and shows it one render pass later.There is no transition or animation involved — the row simply is not there inthe first frame and is there in the next.The plan card grows upward, so nothing below it moves and the purchase buttonstays in place. It is purely cosmetic. Still, what appears late is the offeritself, which is the one line we would want visible from the very first frame.## What I triedResolving eligibility before rendering, so the answer is
Hi, i am keep getting this error on Android side of my app (iOS is live and works perfect):"There's a problem with your configuration. None of the products registered in the RevenueCat dashboard could be fetched from the Play Store"“There is a problem with your configuration in Play Store Developer Console. More info here: https://errors.rev.cat/configuring-products”I am keep getting this error and it makes paywall not visible on Android but I don't know what i missedLicensed user is configured on Play store and i logged in with it on physical device (Samsung Galaxy A07) I test on physical device Bank details are added and every agreement seems to be signed Product identifiers matches between RevenueCat and play store, on the RevenueCat dashboard it even says active Right API key is used to init the Android config I published a closed testing release with right countries selected, including my own country. I even updated prod country list and send it to review & got it approved (Ap
Following up on Tarek's answer in the closed thread "Accessibility configuration support in Paywalls?" (community.revenuecat.com/sdks-51/accessibility-configuration-support-in-paywalls-7709) - that thread is closed for comments, so filing the concrete example he asked for as a new post. Component: the built-in paywall close (X) button, a `type: icon` component (icon_name "x"), not an image. Issue 1 - no accessibility label field: Image components support alt text (confirmed via the media gallery's "Image preview" panel). Icon components have no equivalent field anywhere in the builder - checked the Icon, Button, and Stack property panels for the close button, none of them expose a label/content-description field. Issue 2 - Android traversal order: on Android the close button also renders after the entire scrollable body content in the accessibility tree (confirmed via adb shell uiautomator dump on a real device with TalkBack on), even though the paywall's own component JSON declares "h
The documentation for the RevenueCat Test Store states the following:Test purchases made through Test Store behave like real purchases and subscriptions: they update CustomerInfo, trigger entitlements, and appear in your RevenueCat dashboard.I am wondering, should that description include, or explicitly exclude, purchase-related SDK operations like restorePurchases or syncPurchases? I can’t seem to find any official documentation about this.I am using the RevenueCat Android SDK, version 9.28.1. Once I have set the Test Store API Key, I can, in fact, make a test purchase, and I can see that the corresponding Entitlement is granted to the user by my app, and also that it shows up in the RevenueCat profile for the user’s custom ID (when Sandbox Data is enabled, of course.) But now I want to verify how restorePurchases and syncPurchases would work. However, currently neither work as I expect inside the RevenueCat Test Store.My test involves using a custom ID linked to a (one-time, non-cons
For RevenueCat’s Stripe Billing integration with Managed Payments, which auto-enables Stripe’s Adaptive Pricing (converting our price to the customer’s local currency at checkout using live exchange rates).The issue: when we display prices on our own site using getOfferings(), we’re showing our configured/base price — not the Adaptive Pricing–converted local price the customer will actually see once they reach Stripe Checkout. This creates a mismatch where the price on our site doesn’t match what shows up at checkout.Questions: 1. Is there any way to fetch or preview the Adaptive Pricing–converted price for a given customer/currency before they reach Stripe Checkout, so we can display an accurate price on our site? 2. If not currently possible, is this something on the roadmap — e.g., exposing an estimated localized price through getOfferings() or another API call? 3. Is there a recommended workaround other teams have used to avoid this mismatch (aside from disabling
I have a question regarding the behavior described in the documentation for cases where the appAccountToken for a transaction is not set. Prerequisite 1: The logged-in user ID is specified as appUserId during SDK initialization.Prerequisite 2: Transfer Behavior is set to Transfer to new App User ID. Question 1. In this scenario, is it correct that the purchase history associated with the anonymous user will be re-linked to the `Custom App User ID` registered during initialization via the “transfer” process?Question 2. Is the “transfer” handled automatically by the RevenueCat SDK or the backend? Or do I need to manually restore the purchase data?Question 3. Is the Anonymous User App ID correct UUID format for appAccountToken field of transaction?Question 4. To set the Custom App User ID, I’m initializing the SDK at login. Is this approach appropriate?
I'm trying to test subscriptions in a TestFlight build, but I'm consistently getting RevenueCat configuration error 23.EnvironmentExpo SDK 57 React Native RevenueCat latest SDK iOS TestFlight Auto-renewable subscriptions Bundle ID: com.zamiro.appThe problemCalling:await Purchases.getOfferings();returns:RevenueCat Error 23There is an issue with your configuration.None of the products registered in the RevenueCat dashboard could be fetched from App Store Connect.Calling getProducts() directly also returns 0 products:await Purchases.getProducts([ "zamiro_monthly", "zamiro_yearly",]);Result:[]So this appears to be StoreKit returning no products rather than an Offerings issue.DiagnosticsbundleId: com.zamiro.appversion: 1.0.0build: 19appOwnership: standalonercKeyPrefix: appl_...isTestStore: falsenativePurchasesLinked: truenativePaywallsLinked: truepurchasesConfigured: trueentitlementId: Zamiro ProCustomerInfo works normally:active entitlements: noneThe failure happens only when fetching pr
Setup: React 18.3 + Capacitor 8.3 iOS app. @revenuecat/purchases-capacitor 12.3.2, installed via Swift Package Manager (RevenueCat 5.67.1 / PurchasesHybridCommon 17.55.1). Running directly on a physical device from Xcode (iOS 26.5, Xcode 26.5) — not just TestFlight.Problem: Purchases.configure() is called at launch and never resolves — no success, no error, ever. The subscribe button hangs on "Processing…" forever.The key clue: I set setLogLevel(LOG_LEVEL.VERBOSE) before configure, and the RevenueCat SDK prints absolutely nothing in the Xcode console. The Capacitor bridge clearly works for other plugins — I see To Native → LocalNotifications — but there is never a To Native → Purchases line for any RevenueCat call. So calls to the Purchases plugin don't seem to reach native at all.Already ruled out (from my actual code):Not a purchases-js + purchases-capacitor clash — I only have purchases-capacitor, imported in one file. Not the Vue reactive-Proxy issue — I'm on React, and my hang is
Hi,I’m a RevenueCat newbie 😺My app, ShareRaven, covers a gap in the market where Apple macOS devices have no ability natively to share to X/Twitter. Neither are there any apps that I could find that allow this.The key design question is whether the following is the expected RevenueCat pattern for a backendless macOS app: use Apple sign-in plus Purchases.logIn, then treat the entitlement as the client-side feature gate, while accepting that secure per-customer X API metering would require a separate backend. Backendless Mac App Store subscription gating for X API postingI’m building a native macOS app with a Free/Pro model:Free users can compose locally, copy text, and open X manually. Pro users can connect their X account and post directly through the X API. There is no app backend, no customer credit balance, and no per-user API quota.RevenueCat is used only for subscription and entitlement management:The app configures RevenueCat anonymously at launch. When a user wants a Pro-only a
I can’t find any hints in the documentation about how to achieve a successful fullscreen paywall with the purchases-js sdk. In particular, I run into issues withfullscreen / inset issue on iOS safari keyboard avoidance issues on iOS safari height/spacing differing between paywall editor and iOS safariIs there any real world example of a website actually showing a RC paywall on web??
Hi RevenueCat team,We’re currently using RevenueCat Paywalls in a Kotlin Multiplatform app and noticed that automatic Exit Offer paywalls are still not supported in the KMP presentation layer.Do you have any updates on whether Exit Offer support for KMP is on the roadmap and whether there is an estimated timeline?Replacing the entire integration with separate native implementations would likely add significant complexity without necessarily solving the problem cleanly, especially on iOS. Your answer would help us evaluate which path to take.In the meantime, we’re considering two options: Implementing a custom exit-offer flow in KMP by intercepting the initial paywall dismissal and displaying a separate RevenueCat Offering. Accessing the native RevenueCat Paywall presentation APIs from the platform-specific KMP source sets while keeping the existing shared purchase configuration. Any guidance or examples would be appreciated.P.S. pls also add KMP tag 🙏
Our Paywalls V2 paywall uses three icon components (checkmark, X, and lock). On every paywall render, the SDK tries to download them and gets HTTP 403 — for essentially every user, on every app version. The paywall itself works (icons presumably fall back / don't render), but each render produces 3 failed requests, which floods our error monitoring (New Relic records them as MobileRequestError — we see ~1,150/week).Environment- react-native-purchases / react-native-purchases-ui 10.4.1 (issue was also present on older versions)- Expo SDK 56, Android (okhttp/4.12.0 does the fetch, so this is the native Android paywall engine)- Paywalls V2, icons selected in the dashboard paywall editorFailing URLshttps://icons.pawwalls.com/lock-code.webphttps://icons.pawwalls.com/x.webphttps://icons.pawwalls.com/check.webpReproduction — fails from anywhere, not just devices:curl -i 'https://icons.pawwalls.com/check.webp' -H 'user-agent: okhttp/4.12.0'Response:HTTP/2 403content-type: application/xmlserver
It’s possible to change the language of the paywall? The user can select an specific language so its strange the the entire app is one one language and the paywall in another, I saw that there’s iOS and Android implementations for this but I have not seen a implementation in Unity, have this been implemented yet? Or it’s currently not possible in Unity?
Hi,This is with reference to a post i read: My app is not published on play store yet. I wanted to create subscription, and wanted my testflight users to be able to test them. I created 2 subscriptions under subscriptions and they are in the state “ready to submit”. Attaching image for the same below. my business profile is in all active state. I am unable to figure out why my subscription duration is not coming our currently. i am getting them as null. I have properly configured products → mostly importing from appstore, entitlements, and default offering. i have been stuck on this for 2 days. Can you please suggest what am i missing here?
Hi RevenueCat team,We're using the Paywall Builder's Tabs component to present different subscription plans (e.g. PRO and PLUS), where each tab contains its own complete set of content (carousel, package stack, features, etc.).We've noticed that while Paywalls support custom variables and Rules for controlling the visibility of many individual components, there currently doesn't appear to be a way to show or hide an individual tab within the Tabs component. The only available actions are rename, duplicate, copy, and delete. We would like to show only a single tab’s content depending on mobile app’s clicked features i.e. some should show both Plus and Pro plans, others only Pro. We would like to be able to show only Plus tab or preferably hide a single tab completely.Requested featureIt would be very helpful if individual tabs supported runtime visibility, for example via:Paywall RulesCustom VariablesSDK parametersExamples:showProTab = trueshowPlusTab = falseor{ "show_pro_tab": false,
I'm calling Purchases.shared.getCustomerInfo from my intro screen / AppDelegate on a fresh install to check if the user is premium before routing them to the correct screen. On fresh install, this call takes approximately 6 seconds to return. However, if I call getCustomerInfo again a few seconds later, it returns in under 1 second.Because of this delay, I can't reliably validate whether the user is premium at the point my intro screen needs to make a routing decision.Setup:SDK version: 5.80.0 Platform: Swift, UIKit Call site: intro screen / AppDelegate, on first launch after installQuestions:Why is the first getCustomerInfo call so much slower than subsequent calls on a fresh install? Is this expected behavior (e.g. due to receipt fetch/validation on first call, with caching afterward), or could this indicate a configuration issue on my end? What's the recommended pattern for gating UI on entitlement status during this initial slow fetch — is there a way to speed up the first call, or
Hi, I’m getting error 23 but there is no specific reason. Already double checked the troubleshooting guide for iOS and no result. Can you please advise?
Hello,After integrating the RevenueCat library into my Android app, the application started crashing on launch.Below is the stack trace:Exception java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:576) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:929)Caused by java.lang.reflect.InvocationTargetException: at java.lang.reflect.Method.invoke at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:566)Caused by com.revenuecat.purchases.PurchasesException: at com.revenuecat.purchases.SimulatedStoreErrorDialogActivity.crashApp (SimulatedStoreErrorDialogActivity.kt:55) at com.revenuecat.purchases.SimulatedStoreErrorDialogActivity.onCreate$lambda$0 (SimulatedStoreErrorDialogActivity.kt) at com.android.internal.app.AlertController$ButtonHandler.handleMessage (AlertController.java:186) at android.os.Handler.dispatchMessageImpl (Hand
Hi!7 months ago you posted here that Paypal will be available as payment method in RevenueCat Web Billing. Do you have an updated timeline for this?
Hello,When users send me support e-mails, RCID is also included in the e-mail - so that i can check users status. Is there any way to deeplink to check users details in revenucat app? To elaborate, is it possible to use like revenuecat://projects/{id}/customer/{id}.
I'm using RevenueCatUI.presentPaywall() (Flutter, purchases_flutter 9.x) to show a hosted paywall. I want to show a "last chance" discounted offering the moment a user cancels — specifically when they open the native StoreKit purchase/confirmation sheet and then close it without buying.What I'm seeing: presentPaywall() only returns a PaywallResult (e.g. cancelled) when the entire paywall is dismissed. When the user closes just the StoreKit sheet, the SDK simply returns them to the paywall and no result/callback is surfaced, so I can't react to that specific event.Question: Currently we have the exit paywall implemented when user closes the paywall,Is there any way to detect the StoreKit sheet dismissal while using the hosted paywall UI? Screenshot attached for refernce.
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.