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,
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.
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
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!
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 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
If your Paywalls v2 paywall is served through a workflow, the dashboard's play_store_product_change_mode setting gets silently dropped. WorkflowScreenMapper rebuilds the paywall's component data from the workflow payload and hardcodes productChangeConfig to null, so ProductChangeCalculator never runs and the purchase goes out with no oldProductId.End result: an existing subscriber who taps a different tier doesn't get upgraded — they end up with two concurrent Google Play subscriptions, both billed, with no error or warning anywhere. onPurchaseCompleted fires like nothing went wrong.Filed with full repro steps, logs, and the disassembly behind the root cause here:👉 https://github.com/RevenueCat/purchases-android/issues/4002Posting here too because we couldn't find any dashboard or API way to opt an offering out of the workflow path, and setPurchaseLogic is rejected under the default purchasesAreCompletedBy = REVENUECAT (SDK logs a warning and ignores it). If anyone has found a support
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
On iOS, my Paywalls V2 paywall downloads its custom fonts from fonts.pawwalls.com on every launch, even though the exact same font files are bundled in the app and registered through UIAppFonts. The subsequent registration then fails, and the download stalls the paywall's first render by roughly a second.This looks closely related to this thread: https://community.revenuecat.com/sdks-51/font-are-downloaded-although-they-are-available-7359 — where staff identified "a bug on our end with the font name formatting" and the resolution was to re-upload the font file after the fix shipped. I'm on a much newer SDK than that reporter, and I have re-uploaded the fonts, but the behavior is unchanged.My main question is at the bottom: what is the supported way to have a V2 paywall use an app-bundled font without an uploaded file, so no download is attempted at all?**Environment**- react-native-purchases 10.4.2, react-native-purchases-ui 10.4.2- PurchasesHybridCommon / PurchasesHybridCommonUI 18.19
The support for the native side has been released recently. However, it doesn’t seem like the same support is in place for React Native SDK. Is there any timeline for that?
Recently, we upgraded both our libraries (purchases and purchases-ui) to version 9.0.0 because Google Play required apps to use Play Billing Library (PBL) version 8 or later.Before that we had no issues with our app, purchases worked fine in locall and production enviroment.A few days ago a user issued an email to us that he tried to make a purchase of our one time package(‘consumable’). In revenue cat we saw that he was charged but the item in our app was still locked (indicating the payment wasnt successfull). I tried to trace where was the issue, but i couldnt find out. Today for the first time i replicated the issue and i made the same one time purchase in my local enivorment (sanbox), it registered the payment in revenue cat but i saw these error logs: There was a problem with the App Store. Problem communicating with the Store when trying to validate the receipt.The strange part is this issue happens at random times. After this unsuccessful payemnt i made, i tried a second time a
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
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
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
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
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.