Discussion and help from anything related to RevenueCat.
Recently active
Hi,My app is showing basic paywall on playstore but in debug which i tested its showing me designed paywall. why its showing basic paywall once it uploaded. In basic paywall my offering are good and working just not showing design which i created.
I am trying to set the ‘Fit mode’ for paywall background image to fit but when the paywall is displayed it shown in fill mode. I am trying to check this on simulator and even after restarting the simulator the image is not displayed as expected. Can you please advise on this issue?
Hi there, We have been having a terrible time getting our app approved recently. At some point someone on my team created an in-app purchase option in app store connect that we never intended on using in the app. I marked the item as “remove from sale”, but I don’t see any way to delete it from the app in app store connect. I know this is not really revenuecat related, but apples developer community is slow to respond (posted a question here https://developer.apple.com/forums/thread/776070). The app review keeps rejecting us because of:2.1.0 Performance: App CompletenessWe follow up with notes that we do not want the in-app purchase in the app and have marked it as remove from sale, but they keep rejecting us for the same reason. I have considered scheduling some time with the app review appointment with apple or submitting an appeal, but I’m worried those will stop app reviewers from responding to us. Any advice? (Please feel free to let me know if this too off topic for this forum)
Hello!I'm using iOS SDK and I need to send my event reporting metric depending on the purchase or start of a trial period. Can you please tell me if there is a property based on which I can implement the functionality I need? If someone has some developments in the form of Swift code I will be very happy to help.
I’m building a Paywall using the v2 builder and don’t understand how to make the “Restore Purchases” link functional. I was expecting a variable for this that I could drop into into the URL field.I checked the templates that contain “Restore Purchases” and all of them were just a text element with no functionality. Please explain. Thanks
Hi everyone, I’m integrating RevenueCat into my Flutter iOS app, but I’m encountering an issue when trying to fetch products from the App Store. Here’s the error message I’m getting: code: 23, message: There is an issue with your configuration. Check the underlying error for more details. 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). await Purchases.setLogLevel(LogLevel.debug);await Purchases.configure(PurchasesConfiguration("correct key"));try { final offerings = await Purchases.getOfferings(); print('Offerings: $offerings'); if (offerings.current != null) { await RevenueCatUI.presentPaywall(); } else { print('No available offerings.'); }} catch (e) { print('RevenueCat Error: $e');}purchases_flutter: ^8.6.1purchases_ui_flutter: ^8.6.1Setup Details:• SDK: RevenueCat (latest version)• App Store Connect: Subscriptions are set up • Product IDs: They match exactly be
I switched to V2 Paywall, I want to print “Try 7 Days Free & Subscribe” on the purchase button and I tried it like this: Try {{ product.offer_period_with_unit }} Free & Subscribe. This is not working, I want this variable to say 7 Days when monthly package is selected and 14 Days when annual package is selected.
Hello RevenueCat staff!I’ve gone quickly over the 2025 SOSA report and it looks very good. But I was wondering if you could provide a simple “dollar retention after 1 month for monthly subscriptions” figure by Category.I see page 69 has one 6 months in, but I was wonderng the % of a second monthly payment after a first one.Thanks!
This happens in the sandbox (I haven’t tested it in a production environment yet).Since I’m also using Superwall, I identified the user in the purchase controller on initialization (client) like this: Purchases.configure({ apiKey: REVENUECAT_API_KEY, appUserID }); I’m doing some tests, so I subscribed and I wait for the renewal events to arrive: Why does the first renewal arrive with an anonymous ID, and then it gets fixed in the subsequent event? Is this a sandbox issue?What other info can I provide to help debug this?
I want to do A/B testing for subscription prices on iOS. The revenuecat docs recommends to “Use distinct Subscription Groups on the App Store for each RevenueCat Offering when testing new prices”. Here’s what I would then setup:Price 1 subscription group:Annual - $39.99 Monthly - $7.99Price 2 subscription group:Annual - $19.99 Monthly - $3.99 I start the experiment, some users are being shown the first subscription group, some others the second. A week lapsed, price 1 group is the clear winner, yay! I stop the experiment. The faq says the following: When I end an Experiment, what Offering will be served to the customers who were enrolled in that Experiment? When an Experiment is ended, all customers previously enrolled in it will be served the Default Offering the next time they reach a paywall in your app. Therefore everyone is now presented with the same offering that corresponds to the price 1 subscription group on my paywall. Let’s suppose someone from the retired price
I’m testing my app for which I’ve configured a v1 paywall offering choice of subscriptions and a single lifetime price.The paywall sheet is displaying fine but the offering variable is not translated.I’m seeing offering panels like:First {{ sub_offer_duration }} free, then $7.99/yr ($0.67/mo). I will get around it for now just hard-coding in the values but it looks like a bug.Using SDK via SPM ver 5.19.0cheersAndy
Hey,is there any update for changing the language programmatically especially on Android?Currently everything is only in english using paywalls even when there is different device language.
Hi!I’m experiencing an issue (or possibly a missing feature) in Paywall 2.0. In Paywalls templated (v1), everything works as expected.When I tap anything in the paywall that requires a progress view (e.g., purchase or restore), nothing appears. It just leaves me waiting until the pay sheet pops up (for purchases). For restores, nothing appears and then the paywall dismisses. This could make users think their tap didn’t register, they need a loading indicator to know some stuff is happening. Do I need to adjust how I’m initializing the paywall, or is this a bug/missing feature? iOS version: 18.2.1Purchases SDK version: 5.17.0 Here’s how I’m presenting the paywall:PaywallView(displayCloseButton: true) .onRequestedDismissal { self.showPaywallView.toggle() Task { await self.purchasesManager.processInfo() } }BTW, I tested presenting the paywall in different ways (e.g., using `.presentPaywallIfNeeded`), but I got the same behavior.Would appreciate any guidance on this. Th
I am developing a Flutter app using Revenuecat Paywalls V2, my understanding is that Paywall V2 are only available on iOS for flutter, however I found this comment on a post last month saying it will be available at the end of last month, is there any update on this?
On iPads, the RevenueCat paywall does not always appear correctly when presented but only displayed correctly after the device is rotatedVideo link - https://drive.google.com/file/d/1shYacXNDFWckFQVSv3fDHkMT7buKt4aX/view?usp=sharing And in the paywall v2 editor it looks correctly, but not on iPad
We have integrated RevenueCat Android SDK with our native Android app. Almost all of the purchases are handled as expected but sometimes it doesn’t. I observed very few customers have been facing the below PurchaseError.PurchasesError(code=PurchaseInvalidError, underlyingErrorMessage=Couldn’t find existing purchase for SKU: {subscription_id}, message=‘One or more of the arguments provided are invalid.’) I read the source code of the purchases-android SDK, and if my understanding is correct, this error occurs when it fetches purchase history via BillingClient and there’s no record that matches with the subscription ID set by `PurchaseParams::oldProductId({subscription_id})`.I believe it is NOT something like network issue or service unavailable error, etc, since if there’s an issue between client and Google billing system, it should NOT go through the code that emits the PurchaseError in question. (should go onError route instead)FYI: https://github.com/RevenueCat/purchases-android/blob
.sheet(isPresented: $paywall.displayPaywall) { PaywallView( offering: paywall.selectedOffering ?? Offering(identifier: "default", serverDescription: "default", availablePackages: []), displayCloseButton: true) .onPurchaseCompleted({ customerInfo in analyseFood() }) .onRestoreCompleted({ customerInfo in analyseFood() }) .ignoresSafeArea() }iOS 16.7.10RevenueCat 5.16.0The iOS version is a bit old but I use a separate phone with a sandbox account for testing purchases though. These callbacks are never called onPurchaseCompleted and onRestoreCompleted, also after test/sandbox purchase the Paywall doesn’t dismiss itself and stays on the screen. I have another screen written with UIKit and everything is OK with the Paywall UI invocation but SwiftUI version has weird problems
Hello there,I’m creating multiple whitelabel apps for several platforms, clients etc and would love to use RevenueCat for everything subscription-related. I was checking out the RevenueCat Rest API but it doesn’t seem like I can (fully) create projects, apps and basically everything programatically through the API. Did I look into the wrong place or is there just no support for this? And maybe somebody knows if this is on the roadmap? All the best and thanks!
Hi RevenueCat Team, I wanted to clarify how Monthly Tracked Revenue (MTR) is calculated for annual subscriptions. For example, if I sell a $12/year subscription and the user pays the full $12 upfront, does RevenueCat:1. Count the full $12 in MTR for the month when the transaction happens?2. Or does it amortize the revenue over 12 months, adding only $1 per month to MTR? Additionally, how does this apply to lifetime purchases? Are they also amortized over a specific duration, or do they count fully in the transaction month? Looking forward to your insights!
I’m using a footer paywall:struct Paywall: View { var body: some View { ScrollView { VStack { … } } .paywallFooter() }}However, by doing so, it seems that there is no way to use the “presentPaywallIfNeeded” method, and that I would have to re-implement the logic myself. Is this correct?
Hi there,We have a multi-tier concept similar to this:Tier 1 - access to 1 course onlyTier 2 - access to 2 courses onlyTier 3 - all access to coursesAnd each tier will have 1 month, 6 month and 12 month variations.Users can have only 1 subscription at the same time, and for example user can go from "Tier 1, 1 month" to "Tier 3, 6 months" subscription. So we have set up App Store Connect with the following:- Only 1 subscription and all 9 variations created under the same subscriptionBut what about Google Play Console? Should I create one subscription and create 9 base? Or 3 different subscriptions with each of them having 3 variations (1 month, 6 months and 12 months)?Also, should I create 3 entitlements or 1 entitlement in RevenueCat?
the story: I was integrated in-app purchase directly with apple, but sometimes i got duplicate transactions, i don't know why so i switched to using RevenueCat. Below is the problem i got when using RevenueCat.the context: customer 46611 made a purchase with package1 but the webhook was duplicated. the first webhook request was called to handle package1, the second one was called with package4 infonote: the second transaction was created before using RevenueCat SDK. my event type is Non renewing purchasequestion: Why do duplicate webhooks happen, and how can I avoid them?
Hi, I was rejected from app store with the following reason: Guideline 2.1 - Performance - App CompletenessIssue Description The app exhibited one or more bugs that would negatively impact App Store users. Bug description: we were unable to proceed with subscription purchase as we encountered an error when we tapped on 구독 신청 button. My revenue cat integration is currently not working on iOS but i am assuming that this is because my subscriptions on app stores aren’t approved. (Error I get when i run `presentPaywall()` with sandbox apple account)Error 23: There is an issue with your configuration. Check the underlying error for more details. However, according to the AppsStore, for my subscriptions to be approved, i need to submit a new version. Your first subscription must be submitted with a new app version. Create your subscription, then select it from the app’s In-App Purchases and Subscriptions section on the version page before submitting the version to App Review. So i am curre
I was thinking about uploading my React-Native Android App to Huawei AppGallery.I use IAP using RevenueCart with iOS and Google and was wondering, whether Huawei support is already available / planned / not possible.Thanks in advance!
I’m experiencing an issue with my iOS subscription offerings in RevenueCat. When users tap on subscriptions in my app, the pricing displayed is incorrect – for example, it shows INR 1500 for the yearly plan and INR 12000 for the monthly plan, which do not match the values configured in App Store Connect. Here’s what I’ve checked so far:• API Key (.p8):My API key was uploaded about 8–9 months ago, and according to my RevenueCat dashboard, it is still valid and active.• Product IDs:I’ve verified that the product identifiers in RevenueCat exactly match those in App Store Connect. The products are properly set up, and each subscription is marked as “Ready for Sale.”• Bundle ID:The bundle identifier in RevenueCat matches the one in my App Store Connect account.• Other Checks:I’ve ensured there are no pending Apple agreements or issues in the Agreements, Tax, and Banking section that might be affecting product status. I also confirmed that this issue is specific to iOS (my Android offerings
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.