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 have removed and deleted all products associated to the virtual currency, and deleted all users. Yet it still won’t let me to delete virtual currency.The error message is: `The virtual currency has transactions and cannot be deleted.`
Hi RevenueCat team,We've been testing the new Paywall v2 and have encountered rendering issues on several devices.The paywall displays correctly on some devices (for example, an iPhone 14 Pro), but on several Android phones the layout breaks in different ways.We've observed the following issues:The pricing selection card becomes too tall and pushes the Continue button and footer links off-screen. On some devices, the Restore Purchases link is rendered vertically, one character per line. On others, the pricing card overlaps the feature list above it. The behavior appears to vary by device and screen size rather than by our implementation.We've attached screenshots from several devices demonstrating the issue:Samsung A51 Samsung S24 (English) Samsung S24 (French) Samsung Z Fold3 iPhone 14 Pro (working as expected)We are using the standard Paywall v2 template without significant layout customization, so this appears to be a rendering issue in the paywall itself.Could you let us know:Wheth
Hi RevenueCat team,I'm setting up in-app purchases for one of my apps and running into a persistent issue with the In-App Purchase Key validation. I'd appreciate your help investigating.App details:App: Step Tourist (App Store) Bundle ID: com.example.step-tourist Key ID: 9ZZTZCSGS7 Issuer ID: fefc0472-3433-4064-8745-2e1006a85731 Apple Developer Team ID: J4BSW8LU89 The app record in App Store Connect was created about 17 hours ago, so this doesn't appear to be a short propagation delay.The issue:The In-App Purchase Key configuration shows "Credentials need attention" ("The key is not valid or is not compatible with the Bundle ID of your app"), even though everything appears correctly configured.What I've already verified:The uploaded file is from Users and Access → Integrations → In-App Purchase (not the App Store Connect API tab) — filename SubscriptionKey_9ZZTZCSGS7.p8. The Bundle ID matches exactly (case-sensitive) across Xcode's PRODUCT_BUNDLE_IDENTIFIER, App Store Connect's app r
in the customer center > account details > User ID, it only shows the RC anon user ID, not my custom ID. Can we allow showing our ID/alias?
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 everyone,I was planning to launch my iOS app yesterday. My acquisition funnel is currently directing users to the app, but I'm unable to launch due to this error, which means I'm losing potential revenue every day.Is there a workaround for this, or can I launch the app using RevenueCat's billing and paywalls while this issue is ongoing?Thanks!
I have a user with an active subscription originally purchased via mobile app; they already opted-out of renewal, but they're prepaid for another ~9.5 monthsAs part of a in-person event, I created a new web product & paywall for a promotional price (same offering & entitlements).If this user sign up for this, under the same account, does it extend the expiration date, or something else? Basically, how can I get them to “get both” sequentially?
I downloaded the raw RevenueCat CSV exports for 2026 from my Google Cloud Storage bucket and wrote a custom script to parse all unique transactions year-to-date, filtering exactly by ownership_type.I discovered that family sharing might be causing massive distortion in my RevenueCat charts.In 2026, I had 100 unique iOS users register a transaction in RevenueCat. Here is how they break down:Direct Purchasers: 59 users (59%) Family Members: 41 users (41%)A staggering 41% of my iOS "subscribers" are Family Sharing members. These users generate exactly $0.00 in revenue, but if RevenueCat treats them as active subscribers in the charts and if the primary purchaser cancels, then the family members eventually churn out as well, generating multiple "churn" events for what was technically only one real lost customer.What led me to dig into this were the notifications I got on cancelled subs via the Revenuecat app on my phone and pc. I get bombarded with 5 notifications for a single user subscri
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'm testing iOS App Store promo codes. After redeeming a code and coming back into the app, I try to restore the purchase via our RevenueCat Paywall - nothing happens when I tap Restore. I also don't see any event fired to my webhook afterward.Any ideas on what to check here?
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
Curious how others have handled branded promotional codes for subscription activation e.g. a brand partnership where users redeem a code (on a web page or in-app) that activates their subscription. Something that requires well over 100k codes. Did you build this yourselves on top of RevenueCat's webhooks, or is there a cleaner pattern I'm missing? Thanks
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
Hey everyone,I’m trying to run Meta paid ads to promote an iOS app, with the primary objective of maximizing for the Start Trial / Subscribe event. I've been struggling with missing signals and could use some advice on the current best practices.Here is what I’ve tried so far: Meta SDK + ATT prompt only: Not working well. I'm seeing way too many missing Free Trial/Subscription signals from the ad campaigns. Meta SDK + RevenueCat + ATT prompt (Pending): RevenueCat does use Meta's CAPI. I am still waiting on Apple App Review to see the outcome of this setup. The Core Dilemma:RevenueCat strongly recommend turning off "Log In-App Events Automatically" to avoid double-counting revenue when sending server-to-server data back to Meta.However, I recently readhttps://www.reddit.com/r/FacebookAds/comments/1mpaecw/implementing_skan_along_side_the_meta_ads/that raised a major concern: If we rely strictly on server-to-server data (RevenueCat to Meta), SKAdNetwork (SKAN) will not be able to get th
Hello,I have checked:1. The Bundle ID in App Store Connect2. Bundle ID given in RevenueCat3. Bundle ID in XcodeAll are same and case sensitivity check is also doneAll my agreements in the App Store Connect are activeThis is my 15th app in RevenueCat and this is the first time I have got this issue.I created the App in the App Store Connect in less than 24 hours ago, is that the case ?
I'm using react-native-purchases 10.4.0 with Expo SDK 54 in an Expo managed workflow. The app freezes indefinitely on the splash screen on iPad (tested on iPad Air M3, iPadOS 26). iPhone works fine. The freeze happens even when Purchases.configure() is wrapped in setTimeout(0), try/catch, Platform.isPad checks, and dynamic imports. The library appears to block the main thread on iPad during native module initialization. How do I fix this?
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
Hey everyone,I’m running Meta Ads to drive app installs and recently integrated RevenueCat to handle subscriptions and forward revenue events back to Meta.I am completely stuck on the "iOS 14.5 ATE True Status Rate" in Meta Events Manager - it has been sitting at 0% for a long time, and I know for a fact users are accepting the ATT prompt because my custom att_ok events are logging successfully in Firebase.Here is my timeline and setup: Before RevenueCat: FacebookAutoLogAppEventsEnabled was enabled in my Info.plist. The ATE True Status Rate was 0%. After RevenueCat: FacebookAutoLogAppEventsEnabled is still enabled in my Info.plist. However, following Adapty's docs, I turned OFF "iOS: Log in-app events automatically (Recommended)" in the Meta Developer console to prevent double-counting revenue. The ATE True Status Rate remains at 0%. Here is my current ATT request code:private func requestTrackingPermission() { ATTrackingManager.requestTrackingAuthorization { status in // 1
We're using the firestore-revenuecat-purchases-handler Firebase Extension, and we occasionally (not every time) see an error in Cloud Functions logs when a webhook event fires for a user who hasn't logged in yet (still on their RevenueCat anonymous ID):Error saving user $RCAnonymousID:xxx: Error: There is no user record corresponding to the provided identifier. at setCustomClaims (/workspace/lib/index.js:75:38)It looks like the extension tries to call setCustomUserClaims() using the app_user_id from the event, and when that ID happens to still be an RC anonymous ID ($RCAnonymousID:...) rather than a real Firebase UID, admin.auth() can't find a matching user and throws. Since it's intermittent, my guess is this only happens when a webhook event fires before the user has been identified/logged in with their real Firebase UID.Questions:Is this expected/known behavior, and safe to ignore since the claim will just be set correctly once the same user's event re-fires with their real Fireb
Can you please add INR into the supported display currency option?
I’m trying to set up web purchase links in my application, which uses RevenueCat for billing. I want to make sure I abide by the App and Play Store requirements.In the External Content Links documentation that RevenueCat links to in its App-to-web explainer, Google states that Developers participating in the program must:Integrate with the external content links APIs, which surface an information screen, enable parental controls, and facilitate transaction reporting once required. So it seems like the link that opens the web purchase flow must use a special API on Android. Does RevenueCat offer a ReactNative library to handle that requirement? For example, does the Web Purchase Button handle that for me?Thanks
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.