Discussion and help from anything related to RevenueCat.
Recently active
Hi everyone,We’ve been getting a handful of reports from iOS users who sign up for a free trial, but are charged the full amount immediately. Interestingly, in the App Store purchase confirmation screen it also says they’ll be charged again in 7 days, which is obviously unexpected.For most users, trials and paywalls seem to be working normally, so this doesn’t appear to be a widespread or consistent issue. It started recently (within the past week or two), and so far seems to be iOS-only.I’m wondering if anyone else has seen similar reports or has insights into what might cause this... maybe a temporary Apple billing or eligibility glitch?Thanks in advance for any ideas or confirmation from others seeing the same pattern.— Simon
I’ve created an Offering with 3 packages, each of which has a Test Store product in it.In the app, I’m initializing using the Test Store API key.When retrieving the Offering details, I’m not seeing all three packages - only two of them. The missing one is for a subscription product, while the ones I’m seeing are non-consumables. However, I’m not sure that this is relevant.Is there any cacheing taking place, or delay in publication of updates to the product catalogue? I’ve tried restarting the app and also waiting several hours, but still no joy.The Packages and Products look OK, but could I be missing a vital configuration item? Any pointers would be appreciated.Note that I’m using the Maui.RevenueCat.InAppBilling abstraction, as this is in a MAUI app.
Problem DescriptionI'm experiencing Error 23 during Apple's App Store review process and need clarification on the proper approach for handling paywalls when subscription products are still pending approval.Current Situation:Products in App Store Connect: Status = "Waiting for Review"RevenueCat Configuration: Correctly configured with valid API keyBundle ID: Matches exactly across Xcode, App Store Connect, and RevenueCatProducts: properly configuredXcode Error: “ERROR: 😿‼️ There is an issue with your configuration. Check the underlying error for more details. There's a problem with your configuration. None of the products registered in the RevenueCat dashboard could be fetched from App Store Connect (or the StoreKit Configuration file if one is being used). More information: https://rev.cat/why-are-offerings-empty” Iphone error: The Issue:Apple reviewers report they cannot successfully sign in because:User signs in with Apple ✅Success screen appears ✅User clicks "Let's get started
I’m looking at adding Customer Center to our app. When you show Customer Center for a user that doesn’t have an active subscription there is a “Contact Support” button that is visible, however that button is not present for users who do have an active subscription. How can I get the “Contact Support” button to show up in Customer Center for users that do have an active subscription? Seems like this would be something you would want users to be able to do even if they have a subscription for issues not addressable directly by the Customer Center UI.
Hello, I am in the process of developing an app and have integrated RevenueCat for managing subscriptions and in-app purchases.Here is my setup: I have created subscription products in iOS App Store Connect, and all products are at the “Ready to Submit”stage. I have signed the Paid Applications Agreement. All banking and tax information is active and verified. However, whenever I try to access the paywall in the app, I consistently receive the following error:“Unable to load subscriptions.”I have confirmed that my product identifiers match exactly between RevenueCat and App Store Connect.Could you please advise on the possible reasons for this issue and steps to resolve it? I want to ensure that my subscriptions load correctly for testing and eventual release.Thank you for your support.
Hello I’m new to RevenueCat, i like all the cool features there but i have a few questions.I’m testing iOS version recently, I use storekit to simulate purchase, everything works fine, the transaction history does show in the sandbox data in the RevenueCat dashboard. I’m using anonymous app user id.If I reinstall the app on the same device, a new anonymous user id is generated when the app is launched. A new anonymous will be generated also if I debug it on another device. I know this is reasonable, since there is no authentication flow here. I read the document that, if using anonymous app user id, RevenueCat can analyze the receipt and link the apple user with the anonymous id, so when the user logins with the same apple account on another device, or if he or she reinstalls the app, the purchase can be restored.However, I test the “anonymous user id” flow on two different devices, with the same apple account logged in, the purchase record is not retrieved (for example, the “allPurch
ERROR [RevenueCat] 🍎‼️ Error fetching offerings - The operation couldn’t be completed. (RevenueCat.OfferingsManager.Error error 1.)There's a problem with your configuration. None of the products registered in the RevenueCat dashboard could be fetched from App Store Connect (or the StoreKit Configuration file if one is being used). 1. I am working on an expo project on my linux machine2. I have apple developer account3. created the subscription product, it is ready to submit state4. have added the the keys in revenue cat dashboard which imported the product5. the entitlement is attached with the product6. Paywal has both android and ios offeringI have been trying to debug this but i am going no where, please help.
Superwall has an extremely powerful feature that boosts the revenue significantly: When a user rejects the native store subscription modal, it sends an "abandoned cart" event that allows you to trigger opening another paywall with a downsell offer. It allows you to recover many users and increase revenue drastically.
Hi RevenueCat Team,I’m using RevenueCat in my Flutter app for Apple in-app purchases. I noticed the following behavior: In RevenueCat (and when fetching offerings), the price is displayed in USD. When I actually make a purchase, Apple converts it to my local currency (AUD) and charges correctly. I understand that Apple handles the final purchase currency, but I’d like the price displayed in my app to reflect the localized currency rather than USD.Currently, I’m fetching the product and showing the price like this:final Offerings offerings = await Purchases.getOfferings();monthlyPrice.value = offerings.current?.monthly?.storeProduct.priceString ?? "";Is there a recommended way in RevenueCat to display the localized price (AUD) in Flutter so it matches what the App Store will charge?Thanks for your guidance!
In the dashboard, searching for a customer doesn’t work, whether by App User ID or by email. My tedious workaround for this is to paste a URL containing the App User ID into the browser, e.g. https://app.revenuecat.com/customers/{projectid}/app_user_id}.I’m trying to search by clicking on Customers, then entering an app user id or email in the Search lists… box.Am I doing something wrong, or is search broken? It’s been like this for many weeks.Thanks for your help.
Hey - we would like to report trial starts as a `is_revenue_event` in singular so we can use it to tune for Meta ads, but since the event doesn't have an amount associated with it, it's not showing up as a revenue event. Is there a way to map a different property to the amount property? From Singular support: Thanks for sharing the details. Currently, Singular treats events with a revenue value of 0 (such as your rc_trial_started_event) as non-revenue events. To have this event recognized as a revenue event in Singular, and make it available for mapping as a revenue event (like "Purchase") in Meta, you must either: Send the event with a revenue amount greater than 0 OR Set the is_revenue_event flag to true in the event arguments. The RevenueCat integration, by default, sends the trial start event with amt: 0, so it is not classified as a revenue event in Singular. If you want to assign a value to these events, you would need to adjust the integrat
I am testing an iOS app on-device (sandbox environment). I can successfully purchase a subscription and have verified that my “premium” features become available. I was experimenting with allowing the user to launch the paywall at any time to allow for possible upgrade/downgrade opportunities. However, I was surprised that, even after a purchase, the paywall was identical to before -- its state didn’t seem to have changed to indicate that a subscription was already active, etc. Is this normal? Or should I expect the state of the paywall to change to reflect recent transactions?
I’m using RevenueCat’s new paywall components with the Flutter SDK (flutter_purchases ^9.2.0). On Android, the paywall displays localized prices correctly using {{ product.price_per_year }} and {{ product.price_per_month }}. On iOS, those same variables are always blank when the user navigates to the paywall.Here’s what I’ve already verified: The app is live in production on the App Store (not TestFlight). The subscription product is approved, cleared for sale, and has U.S. pricing active. All legal agreements in App Store Connect are signed and up to date. The product belongs to a valid subscription group, and product identifiers match across App Store Connect, RevenueCat, and the app code. Only base price variables ({{ product.price_per_* }}) are used, since there are no introductory offers configured. The RevenueCat dashboard shows the iOS product as active (not missing). Verified on multiple real iOS devices with different Apple IDs. The issue persists on all devices.
Hello, I have a Flutter Project where we are using Paywalls to display RevenueCat offerings to customers.For Android, on my Google subscription I have multiple offers under a single Base plan as seen below:Is there a way to pick specific offer(s) when using Paywalls?
Same code, works on iOS, not working on Android."react-native": "0.79.5""expo": "~53.0.20"Android:“activeSubscriptions": []iOS"activeSubscriptions": ["hey_roar_cinema_pass", "hey_roar_creator_pass", "hey_roar_unlimited"]
I’m attempting to make my flutter app available on MacOS as well as iOS and currently use the RevenueCat paywalls with the purchases_ui_flutter package.Unfortunately the purchases_ui_flutter package does not support MacOS, is there a plan to add RC paywall support in the near future? If not is the recommended way to continue using RC paywalls for MacOS to build via a Catalyst app instead of direct MacOS?
really love using revenue cat but there is one foundational feature missing which is super annoying for us. we are using it in our native app and our nextjs web app and created separate offerings. we need discount codes to set up our partner program and hand out special discounts in email campaigns. as i see it, this doesn’t exist yet which is a dealbreaker for any serious b2b company. so requesting you guys to add this asap. the mvp of this would be just linking discount codes to a given product. stripe offers this as well so api changes shouldn’t be so hard.
Use case:I have a product priced at $71.99 per year in the App Store. On my paywall I am using the variable {{ product.price_per_month }} to display the product's price per month. However, the paywall is rendering $6.00 when I want it to display $5.99.I do not want to hardcode $5.99 on the paywall because then the price will be shown in USD even if the user non-USD, which is not good.Desired Solution: Support for conditional logic directly within the template to show text or values only for specific currencies, such as displaying a hardcoded value but only for USD users.
I love the WebBilling feature, but thought it would be even more powerful to be able to embed the products of a offering as part of my webpage.So for example when a user clicks on a package it would navigate directly to the checkout page.This would make the integration more seamless for users checking out my webpage being able to see the different packages and purchase right away; for example from a landing page.It will also give developers more tools to customize how the packages are shown.
Is there an issue with displaying Paywalls specifically with an offering and or in the sandbox environment with Xcode builds?If I use this is shows the paywall instantly PaywallView()however if I use an offering its blank (as if offering is nil). If I swipe app up to open the app switcher on iOS the paywall is actually loaded and is showing when app re-enters foreground. So wondering if this is a known Xcode sandbox debug issue..fullScreenCover(isPresented: $hasToShowPayWall) {if let offering = offering { PaywallView(offering: offering, displayCloseButton: true) } else{ Text("offerings is somehow nil") }}offerings a awaited and fetched before triggering the fullScreenCover. so offering passed in cannot be nil yet it claims it is @State private var offering: Offering? = nilif let offering = await availableOfferingWithIdentifier("default") { await MainActor.run { offering = offering withAnimation { hasToShowP
Hello,I am sending purchase and trial start events to Meta using the RevenueCat Meta Ads integration. Currently, I can see the events in Meta, but when I check the event details, Meta reports that no event parameters were detected.In my Flutter app, I am calling Purchases.collectDeviceIdentifiers() after the Purchases SDK is initialized and after the user accepts the App Tracking Transparency permission, in order to collect the advertiser ID.Additionally, after initializing the Purchases SDK, I call a method to get the Facebook Anonymous ID and pass it to the Purchases SDK using Purchases.setFBAnonymousID(fbAnonymousID).I am not sure if there is anything else I need to do. My goal is to see the advertiser ID as an event parameter in Meta.Also I am not sure why I cant see any other parameter for the StartTrialComplete event, what parameters RC sends to META? Thank you for your guidance.
Hello,I’m providing a free trial on my weekly plan and I want to check if a user is eligible for the trial. The goal is to display a text (e.g., “3 Day Free Trial”) based on eligibility.How can I check if the user has already availed the free trial or not?I tried this code, but it’s not working: val freeTrialText = if (pkg.storeProduct.subscriptionOptions?.defaultOffer?.freePhase != null) "3 Day Free Trial" else "" println("3 day trial text: $freeTrialText")This always returns empty.On iOS, the payment popup correctly shows the 3-day free trial, but in the app it doesn’t reflect.Any ideas on what I might be missing?
I am on the latest version of iOS SDK, and set delegate for observing for active entitlements and then updating the observable object. It makes it self-contained and effective for a SwiftUI app.My problem is that its method is called when initializing the SDK, but not when the purchase is done, also not when restored purchases.I have set it up the same way in my other apps, and they are on older versions of SDK, where it worked. I hope this is fixed quickly, don’t want odd workarounds in the code.
Before showing paywall I want to check if any purchase already made from a google play or apple account. My app will not support account transfer so if the user already purcahse for any account and user logged in with different account we don’t want to purchase with the same google play or apple account. We want to show a message like “Please change your google play or apple account as another user already using that.”. To show this message I need to know from any account a purchase has been made or not. I can do that by Google Billing client but I want to know more generic way using revenuecat.
In my app’s onboarding flow a user can claim a referral code, which changes their offering via WinWinKit. On the next step of onboarding purchase screen is shown, but the old offering is shown.I figured that offerings are loaded and cached at initialization of the SDK, but why can’t I clear the cache or force load them?I tried using invalidateCustomerInfoCache and checked its implementation, but it won’t do the thing.Also found similar questions in the community, both marked as resolved, but can’t find a solution for myself.
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.