Get help with your SDK implementation.
Recently active
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.
HiI am getting this error and struck at the app submission. I have created the subscriptions in the appstore but they are not approved. When it try by using storekit in simulatot it’s working and to test it on my own iPhone via testflight it’s not working so app approval rejected: Issue DescriptionThe In-App Purchase products in the app exhibited one or more bugs which create a poor user experience. Specifically, IAP product page did not load its content.. Review the details and resources below to troubleshoot this issue.Review device details:Hello,Thank you for your resubmission. Upon further review, we identified additional issues that need your attention. See below for more information.If you have any questions, we are here to help. Reply to this message in App Store Connect and let us know.Review EnvironmentReview date: June 22, 2026Review Device: iPad Air 11-inch (M3)Guideline 2.1(b) - Performance - App Completeness
I’m using the RevenueCatUI package in Unity to display the paywall created in the RC dashboard, which works perfectly on Android, but when I build for iOS, I get the following error when calling the method to present the paywall:`RevenueCatUI/resource_bundle_accessor.swift:44: Fatal error: unable to find bundle named RevenueCat_RevenueCatUI`I’m using RevenueCat 5.76.0. Any ideas?
Google released new version of Next Gen AdMob SDK. Does RevenueCat support that?
Hi RevenueCat team,we are seeing an iOS offer-code redemption issue with account switching and would like to confirm the expected behavior.Our RevenueCat restore behavior is configured as:Transfer if there are no active subscriptionsScenario: User logs into account A. User purchases an Apple subscription. The subscription expires. User logs out of account A. User logs into account B on the same device / Apple account. User redeems an Apple offer code. Observed behavior:The offer code is redeemed while account B is logged in, but the entitlement is assigned to account A instead of account B.Expected behavior:Since account A no longer has an active subscription, we would expect the redeemed offer-code subscription to transfer / attach to the currently logged-in RevenueCat App User ID, account B.We saw that RevenueCat recommends avoiding Apple’s in-app offer-code redemption sheet and instead opening the App Store redemption URL, then calling syncPurchases when the user returns t
After a DEFERRED replacement (A → B), Google Play marks the active subscription as “Plan change”, but RevenueCat SDK for Android doesn’t seem to expose this state where the active subscription is pending a plan change.Could this be exposed from the RevenueCat SDK for the active subscriptions? I don’t seem to get any information from the RevenueCat Android SDK that the plan is about to change and to where the plan is going to change to. The backend does receive the “PRODUCT_CHANGE” webhook, but client side isn’t able to access the same information.Seems to me also that the Paywall’s ProductChangeCalculator purchases-android/ui/revenuecatui/src/main/kotlin/com/revenuecat/purchases/ui/revenuecatui/data/ProductChangeCalculator.kt at main · RevenueCat/purchases-android is not doing any logic to handle the pending case, so if you attempt a second downgrade from the Paywall while the previous is pending you get.“Paywall purchase error: One or more of the arguments provided are invalid.”, whi
I got the following error: Guideline 2.1(b) - Performance - App CompletenessIssue DescriptionThe In-App Purchase products in the app exhibited one or more bugs which create a poor user experience. Specifically, "upgrade to premium" button led to an error page. Review the details and resources below to troubleshoot this issue.Review device details:- Device type: iPhone 17 Pro Max- OS version: iOS 26.5 I have created the subscriptions in the appstore but they are not approved. When it try to test it on my own iPhone via testflight i get: Could not load subscription options PlatformException(23, There is an issue with your configuration. Check the underlving error for more details. More information: https://rev.cat/sdk-troubleshooting 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-em
Hey, does your roadmap have Accessibility improvements or configurability on the roadmap?We have a need to fulfill the requirements of European Accessibility Act (Directive (EU) 2019/882) and we have noticed that currently the Paywalls don’t seem to offer good support for accessibility.Recently the ability to disable font scaling in Paywalls, did fix one of our issues. Otherwise we have been able to work around it by adjusting our paywall and doing small hacks and adjustments to them in order to improve the Accessibility.So I was wondering if you have Accessibility improvements coming in the roadmap and when might these improvements be scheduled?
I’m building a web-based TV app where users scan a QR code on the TV to complete payment on their phone. I’m using purchases-js and calling getOfferings() to display products for the current offering.However, the packages array is coming back empty, even though I’ve created a Stripe product for each package under each offering.I noticed that when I add a Web Billing product, it shows up correctly in the offerings, but the Stripe products do not appear.Is this expected behavior for the Web SDK, or am I missing a required configuration step for Stripe products to be available through getOfferings() in a web application?
When I tried adding revenuecat into base44 I am getting several errors and the above image is one of them. How do I make revenuecat for in app purchases as apple does not allow stripe and Base44 only integrates with stripe. What steps do I need to do to integrate it into base44 to accept payments as I know I’m not doing something right. Could someone give me a prompt for base44 to integrate revenuecat.
Hey, we ran into small issue when testing our integration. If user cancels the current subscription from Play Store, it gets to a state where it is “isActive = true” and “willRenew = false”.It seems the Paywall doesn’t check for the “willRenew” state when deciding to trigger the upgrade/downgrade flow when user tries to purchase the same subscription from Paywall. Instead of dealing it as a new purchase the Paywall seems to attempt to do a Upgrade/Downgrade to that product. Which then errors out from play store.I would expect the Paywall to allow user to renew the current subscription, instead of attempting to do a upgrade to the same purchase and then erroring out.In this flow the Upgrade/Downgrade to an other product did work as expected, so no issues with those. 🤖‼️ BillingWrapper purchases failed to update: DebugMessage: Account identifiers don't match the previous subscription.. ErrorCode: DEVELOPER_ERROR. SubResponseCode: NO_APPLICABLE_SUB_RESPONSE_CODE. No purchases received🤖‼
Hi.I just installed macOS 27 and Xcode 27. I can’t run my app because there’s a compile error with RevenueCat. Invalid redeclaration of synthesized memberwise 'init(stringRepresentation:)'I’m not using Paywalls at the moment (no macOS support as far as I know). I know that macOS 27 was JUST released, but I thought I’d post this here anyway to make you aware of this issue, if you don’t already know about it. I did update my swift package to RevenueCat 5.75.0 Thanks, Brendan
Hi RevenueCat community,I'm working on a React Native app and running into a persistent issue with anonymous-to-identified user merging. Would love some help figuring out if this is expected behavior or something I'm doing wrong.Background & Initial SetupMy app originally required registration before any in-app purchase could be made. After an App Store rejection (purchases shouldn't require registration), I updated the flow to allow anonymous purchases first, with registration happening later.Restore Behavior: Transfer to new App User IDThe Flow I Want1. User launches app → anonymous purchase made (no account yet)2. User registers/signs in → anonymous ID merges with their account ✅ (this works fine)3. Subscription expires → user signs out4. User relaunches app → makes a new anonymous purchase5. User signs back into their existing account → new purchase should merge/transfer to their accountWhat's Actually HappeningStep 5 fails. After signing back in, the subscription shows as inac
It would be helpful for the SDK to allow apps to submit custom Anonymous App User IDs with their Configure() calls. These would be used instead of generating a $RCAnon app user ID, but would still be Aliased if/when the user subsequently signs in and the app calls .login().In my case, my app can provide a more persistent anonymous identifier than what $RCAnon accomplishes, which leads to a better user experience, but we refrain from doing so because we get undesirable Transfer Purchases to New App User ID behavior instead of the aliasing that happens with $RCAnon.It we could get that aliasing behavior with a custom AppUserID, we would supply our persistent anonymous identifier and the end-user would have a better experience.
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.