Get help with your SDK implementation.
Recently active
On iOS paywallViewControllerWasDismissed is not called when the paywall gets dismissed.There should also be a way to stop the paywall from being automatically dismissed when the user completes a purchase.No SwiftUI. UIKit.Most up-to-date version. My configuration is fine. Testing on device.
purchases_flutter: latest in_app_purchase: latest Platform: Android Framework: FlutterProblem: After adding purchases_flutter to a Flutter project that already used in_app_purchase, this call queryProductDetails() freezes indefinitely and never resolves:final ProductDetailsResponse response = await InAppPurchase.instance .queryProductDetails(productIds);
Hi, I’ve seen a few open issue more than a year ago. Can we expect it sometime soon?
Since I know manage user IDs, then when a user logs out and logs in with a new user, then I will have two users with unique IDs but the same idfv/gpsAdId. What should I do? They might be the same user logging in or creating a user through a different login, but they also might be a completely new user.What should I do?
If anyone else is struggling with RevenueCat not exposing Google Play's OneTimePurchaseOfferDetails (like Launch Offers or region-specific discounts for In-App products on Android), here is a bulletproof workaround we implemented in production.The Problem: Google Play added oneTimePurchaseOfferDetailsList in Billing Library v6 for in-app products, but purchases_flutter (and the underlying purchases-hybrid-common) currently drops this array when serializing the Native ProductDetails into the Dart StoreProduct. So storeProduct.price just returns the un-discounted base list price.The Workaround: Use the official in_app_purchase package strictly as a "read-only scanner" to fetch the real JSON natively, and keep using RevenueCat for the actual purchase. Add the dependency Add in_app_purchase: ^3.2.0 to your pubspec.yaml. We won't use it to buy things, only to query the Google Play API directly. Create a quick Extractor Service This queries the Google Play Billing Library and finds the low
https://api.revenuecat.com/v2/projects/${project.id}/charts/actives?realtime=false&start_date=${dateStr}&end_date=${dateStr}I want to get the result for a single specific app from the link above.How do I do that?
I have been using revenue cat for over 6 months now and I just started my first price point experiment yesterday. I went to open the paywall today and my app froze. It also froze in my development build and I was able to find the following log. DEBUG [RevenueCat] ℹ️ API request failed: GET '/v1/subscribers/user_1234/health_report' (500): There was an unknown backend error. Internal server error.Request-ID: <DEPRECATED>; Amzn-Trace-ID: <DEPRECATED> ERROR [RevenueCat] 😿‼️ There was an unknown backend error. Internal server error.Code: construct.js 2 | var setPrototypeOf = require("./setPrototypeOf.js"); 3 | function _construct(t, e, r) {> 4 | if (isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); | ^ 5 | var o = [null]; 6 | o.push.apply(o, e); 7 | var p = new (t.bind.apply(t, o))();I quickly stopped the price point experiment and after a min or two, the error disapp
I beleive I have everything configured properly but testflight shows this when paywall is prompted to show
Environment:SDK: react-native-purchases ^9.8.0 Platform: iOS (Expo SDK 54, React Native 0.81.5) Testing on: TestFlight (physical iPhone + iPad) Bundle ID: com.withim.app API key prefix: appl_Products:com.withim.app.grace_monthly1 (Auto-Renewable, 1 month, 7-day free trial) com.withim.app.grace_annual1 (Auto-Renewable, 1 year, 7-day free trial) com.withim.app.grace_lifetime1 (Non-Consumable) All 3 products are "Waiting for Review" in App Store Connect RevenueCat offerings configured: $rc_monthly, $rc_annual, $rc_lifetimeProblem: When calling purchasePackage(), it immediately throws error code 16 (UNKNOWN_BACKEND_ERROR) with no readableErrorCode or underlyingErrorMessage. The native Apple payment sheet never appears.What works:getOfferings() returns correct products with real prices from Apple (e.g., $3.99/month displays correctly) Purchases.configure() succeeds Purchases.getCustomerInfo() works Purchases work when running via Xcode debug build on physical deviceWhat doesn't work:Any pur
All subscription prices are correctly configured in App Store Connect for all countries and regions. We are currently testing on devices configured for India, where the device region, App Store region, and Apple ID are all set to India.However, during testing in TestFlight, we are seeing inconsistent currency behavior: In our custom paywall UI / RevenueCat paywall, the prices returned from RevenueCat offerings appear in USD ($). When the Apple in-app purchase sheet opens, the price is displayed correctly in INR (₹). Current flow: Paywall (RevenueCat offerings): $ USD Apple Purchase Sheet: ₹ INR (correct) This creates a confusing experience because users initially see USD on the paywall, but the actual purchase sheet shows INR.We have verified the following: Pricing is correctly configured in App Store Connect for all regions. Device region is set to India. Apple ID region is set to India. The behavior occurs on multiple devices using TestFlight. Since the pricing configuratio
Hi, I am using Draftbit (React) with the latest RC SDK (9.11.2) but still get the error specified API Key is not recognized when I am running it on ExpoGo on iOS. What could possibly cause this??? if(uuid) conf['appUserID'] = uuid; if(Constants.executionEnvironment == 'bare') { // check for ExpoGO console.log('Using RevenueCat Test Store'); conf['apiKey'] = APIKeys.revenueCatTestStore; } else if (Platform.OS == 'android') { console.log('Using Android Play Store'); conf['apiKey'] = APIKeys.google; } else { console.log('Using AppStore'); conf['apiKey'] = APIKeys.apple; } await Purchases.configure(conf);The error log:Using RevenueCat Test Store[RevenueCat] 😿‼️ The specified API Key is not recognized. Ensure that you are using the public app-specific API key, which should look like 'appl_1a2b3c4d5e6f7h'. See https://rev.cat/auth for more details.
I saw several messages about how to setup the fonts. I guess the documentation is deprecated, it still mentions that the user needs to put the font in the app directly… but the error message I’m getting on Android with my Expo app points toward some download/caching process. When I try to display my paywall on my android emulator, the log get “Unable to create cache directory for remote fonts” and the app crashes. The emulator might have a low free memory. Is there anything specific (like a permission to grant) to get this fixed on Android? Or is it only the emulator memory that I should flush? If it’s the memory issue, I think some users with low end devices might get an abrupt crash as well.Edit: I can’t reproduce it every time, so that seems to be a memory issue.
Is there a way to show a discounted paywall when user cancels just before purchasing a subscription (not on dismissing it)?Similar to what there is transaction abandon paywall in superwall
Hello everyone,I have a mobile only app in the Google and Apple stores. I have subscriptions set up for Google, but not yet for Apple. Before I finish this, and turn on subscriptions, I’d like to double-check my assumptions.My plan is to turn on subscriptions so that we gain some income, and to then build out the web back end so that our customers can log into the web version and see their data their too. This also provides a back up of their data so that it doesn’t just live on their mobiles.I’m assuming that I can capture unique IDs for each customer as they subscribe, and then use that to create web accounts for them, and then email them details. Does this make sense? I’m not expecting this to be straight forward, but would like to confirm it’s possible. I’d rather start to get revenue in sooner rather than later if possible. I’m hoping this works. But maybe I’ve missed something, or someone’s done this before and can point out ‘gotcha’ points to beware.Thanks in advance.Bruce
Please delete
When i launch paywall as in example - the paywall does not close when the user clicks restore purchase button inside the paywall. @OptIn(ExperimentalPreviewRevenueCatUIPurchasesAPI::class)class MainActivity : AppCompatActivity(), PaywallResultHandler { private lateinit var paywallActivityLauncher: PaywallActivityLauncher private lateinit var root: View override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) paywallActivityLauncher = PaywallActivityLauncher(this, this) } private fun launchPaywallActivity() { paywallActivityLauncher.launch(offering = offering) } override fun onActivityResult(result: PaywallResult) {}}I also tried to use launchIfNeeded() function:paywallActivityLauncher.launchIfNeeded(offering = offering) { customerInfo -> customerInfo.entitlements.active.isEmpty()}This does not close the paywall either. The paywall doesn’t close regardless of the restore result.Is there an option for android
Hello, I’m using react native (react-native-purchases and react-native-purchases-ui both at 9.7.0) for my iOS-only app. I’m displaying a paywall to my users via const result = await RevenueCatUI.presentPaywall({ offering });The paywall renders correctly. I have a restore button that restore the purchase correctly, but it does not dismiss the paywall. The user is often left confused as to whether the restore worked or not. How can I get the paywall to dismiss automatically after a restore? There’s no `dismiss()` method on `RevenueCatUI` either, and I would like to not use `<RevenueCatUI.Paywall />` component as that has several scroll issues when used in a bottom sheet to mimic similar behavior of `RevenueCatUI.presentPaywall()`
In Figma, my Package component has 2 variants (Default and Selected) with the stroke correctly applied only to the Selected variant. The component works visually in Figma, but the state-specific styling doesn't carry over correctly in the Paywall Builder. Thanks for help!
I used a pre made template for my paywall but how do i change the price?
> using the `purchase()` function from RevenueCat’s React integration> has domain setup in Stripe> apple pay not visible when calling `purchase()`> viewing on physical iPhone with Apple Pay setupare there any troubleshooting guides available for this integration?
Hi, This post never got an update, and it was closed for comments. AFAIK we still don't have countdowns on iOS <26. Can we know more about this?
I am trying to grant an entitlement - by testing in dev from my server, expecting the Sandbox to be granted the entitlement. However, nothing seems to achieve this:communicate with customer records & items via Secret API keys - starts with sk_*** use the Sandbox API key to make the purchase - starts with rcb_sb_*** if I use the Sandbox key as Bearer for REST api, like customer look ups it fails. OK, use the Secret key for everything except purchase. But then using the Sandbox key to purchase it fails. RevenueCat webhook received:{ eventId: '***-***', eventType: 'NON_RENEWING_PURCHASE', appUserId: '***-***', environment: 'PRODUCTION', productId: 'rc_promo_entitlement_custom'} What do I need to do to grant an entitlement in a sandbox?
We’re using purchases_flutter (9.12.0) on Flutter web with RevenueCat Billing (Stripe). The flow is:User is on our paywall screen (Flutter UI). User taps Subscribe/Purchase → we call Purchases.purchase(PurchaseParams.package(package)). RevenueCat opens the Stripe checkout in a fullscreen overlay (iframe from pay.rev.cat / Stripe).Issue: On Android Chrome, the overlay shows and the scrollbar appears (content is taller than the viewport), but touch/scroll doesn’t work inside the checkout form. Scrolling works on iOS Safari and desktop Safari. So the overlay knows the content doesn’t fit (scrollbar is visible), but scroll gestures don’t reach or don’t work inside the Stripe iframe on Android Chrome. We reverted our own CSS/JS tweaks (pointer-events, viewport, etc.) and the behavior is unchanged. Environment: Flutter web, RevenueCat Web Billing + Stripe, Purchases.configure(webKey) and Purchases.purchase(PurchaseParams.package(package)). CSP allows frame-src for pay.rev.cat and Stripe. Has
java.lang.NoSuchMethodError: No static method configure(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/revenuecat/purchases/common/PlatformInfo;Lcom/revenuecat/purchases/Store;Lcom/revenuecat/purchases/DangerousSettings;Ljava/lang/Boolean;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/Boolean;Ljava/lang/String;)V in class Lcom/revenuecat/purchases/hybridcommon/CommonKt; or its super classes (declaration of 'com.revenuecat.purchases.hybridcommon.CommonKt' appears in /data/app/~~FYWMBB2RNwMfSGeYJ27sOg==/com.myapp.myapp-4FgKj70kwbLDgFLKHfUN7A==/base.apk!classes5.dex) at com.revenuecat.purchases_flutter.PurchasesFlutterPlugin.setupPurchases(PurchasesFlutterPlugin.java:403) at com.revenuecat.purchases_flutter.PurchasesFlutterPlugin.
I have problems finding the platform specific API key, there is no path such as:Project Settings > API keysBut I can see API keys on the left side (image attached) but I can not find the API key need it to submit the app for review or production release
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.