Get help with your SDK implementation.
Recently active
Hi everyone 👋I'm having an issue with the RevenueCat paywall UI on Android. I created a paywall design in the RevenueCat dashboard and linked it to my offering called "my_offering_identifier_is_here". Then, I'm showing the paywall like this:paywallActivityLauncher.launch(offeringIdentifier = "my_offering_identifier_is_here")The products show up correctly (so the offering ID seems to be working), but the paywall design is not the one I created. Instead, a default or unrelated layout is being displayed.Here’s what I’ve checked so far: The offering ID "my_offering_identifier_is_here" is correctly set and matches what I used in the dashboard. The paywall is published and active on RevenueCat. SDK is initialized and fetching offerings successfully. Has anyone run into this before?Is there something I'm missing to make sure the correct custom paywall design shows up?Any help would be appreciated 🙏
Hi guys! I'm integrating subscriptions in my Flutter app using RevenueCat. iOS case. I'm encountering an issue where the price shown on the paywall differs from the price shown at the actual App Store checkout. For example:* On the paywall, I show $59.99 (taken from `package.storeProduct.priceString`)* But when the user proceeds to the purchase, the App Store sheet shows $69.99 I'm not hardcoding any values — I use priceString from RevenueCat offerings.I use Flutter, but the issue happened on IOS only Questions:-Why might there be a mismatch between the price from on paywall and checkout? Thanks in advance for any insight!
When running eas build --profile dev-purchase --platform ios --local --clear-cachethe build process works but when trying to start the app and using the react-native-purchases sdk, I get the error: Import failed: `new NativeEventEmitter()` requires a non-null argument. The reason seems to be that the RNPurchases native module cannot be found. This only seems to happen when using eas build and on iOS. I have tried several of the latest react-native-purchases library versions. It seems to happen for every version. I already searched the internet for solutions and iterated with ChatGPT but am still facing the same issue. Is anyone aware of this and possibly has a solution?
I have set an offering as default offering. When starting the app for the first time the default offering is loading correctly. After this I always get this error. The new default paywall I use is Paywalls v2. I do not try to load different offerings in my code just the standard default one. In Xcode I get the following warning WARN: ⚠️ Failed looking up localization, using fallback: en_DEWARN: Could not determine price format because price string is incompatible.
Hi, We are using Flutter SDK which utilizes Android SDK under the hood. We have an Offering set up with 6 packages.When requested through Purchases.getOfferings(), this offering has only 5 packages. As you can see, 2nd_monthly is missing in actionThis results in basic RevenueCat paywall being shown (which also contains only 5 packages) instead of our paywall. iOS app works just fine.
I'm experiencing a timeout error (Error 32) from RevenueCat on iOS devices during app launch. The log says:“StoreKit 1 product request took longer than expected (30.17 seconds)”, and the app hangs or fails to load products.I've verified the product identifiers, my setup in App Store Connect, and that I'm using the latest SDK.Can you help confirm if this is a known issue, or if there's a specific best practice for fallback behavior?
I’m using the new beta paywalls. How do I get {{ product.relative_discount }} to render correctly for paywalls showing non-subscription packages? This question... indicates that this doesn’t seem to be supported? Surely this isn’t the case? Showing relative discounts is a pretty big deal for any paywall with multiple packages. Can someone point me in the correct direction to resolve this?
I think it should be made absolutely clear that restoring purchases on iOS does not work when using a .storekit file. At least I did not see this anywhere and spend a day on trying to get restore to work – until I switched to a scheme without a .storekit file.Maybe this is mentioned somewhere in the docs, but I did not see it.Thanks,Marc-André
Now, I may just be paranoid but ALL initiated purchases on my app in the last week ended in this “Purchase was cancelled” error, which to me, seems highly on unlikely for an app that used to get purchases every few days. I wonder whether users really cancelled all these purchases or is there something else going on here.{ "nativeStackAndroid": [], "userInfo": { "userCancelled": true, "code": 1, "underlyingErrorMessage": "Error updating purchases. DebugMessage: . ErrorCode: 1.", "readableErrorCode": "PurchaseCancelledError", "readable_error_code": "PurchaseCancelledError", "message": "Purchase was cancelled." }, "code": "1", "userCancelled": true}
I need some serious help as I think I messed things up with my latest code update. I use the Flutter SDK and this is what I do when the app starts up: configuration.purchasesAreCompletedBy = PurchasesAreCompletedByRevenueCat(); if (authService.currentUser != null) { configuration.appUserID = authService.currentUser!.uid; } await Purchases.configure(configuration); if (authService.currentUser != null) { if (authService.currentUser!.displayName != null) { Purchases.setDisplayName(authService.currentUser!.displayName!); } if (authService.currentUser!.email != null) { Purchases.setEmail(authService.currentUser!.email!); } } else { log.t('4. User is not logged in, setting app user ID to null'); configuration.appUserID = null; }The authService just checks if the user is logged in and if they are, it assigns the actual uid from the app to the user account so that I can find them quickly.However, I noticed with this code, m
Hello everyone,We’re looking to adopt the web purchase flow for our iOS app using RevenueCat. I’ve set up a Web Billing project and configured it for our default offering (see attached screenshot). My understanding is that, once everything is configured correctly, the `webCheckoutUrl` property should be populated for the relevant package when fetched via the SDK.However, I’m still seeing that `webCheckoutUrl` is `nil`. Is this likely due to a misconfiguration on my end, or am I misunderstanding how and when this property should be set?Any insights or suggestions would be greatly appreciated. Thank you!
Are there any plans to support fetching Web Billing products on mobile platforms?ContextWe are using RevenueCat Web Billing to manage our web app subscriptions.On the companion mobile app, we would like to show users some details regarding their subscription.As such we are configuring our Purchases instance with the WebBilling API Key.This works well for the most part - with entitlements & subscription expiration data coming in as expected on the CustomerInfo response.IssueOther information (such as price) can only be obtained via the product instance itself.And any attempt to fetch the WebBilling product returns a “Not Found” error with it being obvious that the SDK is only searching among the PlayStore / AppStore products.Furthermore, attempting to manually specify the store via the PurchasesConfiguration.Builder is also met with an exception. And sure enough, looking into the implementation reveals that the provided store is cast to the one native to the platform (e.g. on Androi
I am getting logs that occasionally with some users Purchases.sharedInstance throws UninitializedPropertyAccessException even though Purchases.configure was called literally on the line before. Our app is only available via Google Play Store, so there shouldn't be any issues connected with prerequisites not being met on that front. Is Purchases.configure asynchronous in some sense? I skimmed through the code and I saw no indication that the configuration (and initialization of sharedInstance) should fail in any sense. One thing I should also note is that I access Purchases.sharedInstance via DI using Hilt. It occurred to me that maybe there somehow exist two instances of Purchases (one configured, and one not), but I think if that was the case, this problem would be ubiquitous, and not impacting just some of the users some of the time. I am using SDK v8.17.1
How are people restoring purchases with App2Web and RC paywalls?I’m in the sandbox for all of this right now, and I’ve been testing flows on Dipsea to see how they are supposed to work and I can’t figure this out at all:The restore purchase button in RC Paywalls does nothing if there is no active iOS or subscription or if there is an active RevenueCat Billing subscription. At the very least .onRestoreFailure should be called, but it is not, it seems like a bug that has been around for some time according to these forums. I noticed in Dipsea this is also the case, nothing happens when you press restore purchase. There is a progress wheel for a split second and then nothing.This leads to my next questionIf someone makes a purchase via App2Web, how do they restore their purchase? There seems to be no way of doing this right now via the RCPaywall? Or am I missing something? If they press restore purchase that does not seem to restore anything in sandbox or give them a prompt to sign in wit
Hello, is there a way to check if the user that hasn't bought anything yet, is from Apple US Storefront with react native?
Hey everyone!I'm using RevenueCat’s default PaywallView in my iOS app, and I’d like to know if there’s a supported way to run a custom validation before the actual purchase happens, using the default paywall UI.Here’s the use case I need to support: A user logs in to App Account A using Apple ID X, then subscribes successfully. Later, they log out and log in with App Account B, but still using the same Apple ID X. Before allowing them to subscribe again, I want to detect that Apple ID X already has a subscription tied to a different app user ID. To do this, I use restorePurchases() and compare the originalAppUserId.But currently, I can only run this validation before presenting the paywall, which isn’t ideal UX-wise.I saw that originalTemplatePaywallFooter accepts a purchaseStarted callback, like: CustomMarketingView().originalTemplatePaywallFooter(purchaseStarted: <PurchaseOfPackageStartedHandler?>) But i can't make it work. ❓What I’d really like:To trigger my validation onl
Hey!I have the following use case but coudln’t find a great solution for it yet. This seems like something that should work out of the box, so I’m asking here. In my mobile app, I initialize RevenueCat once and call the login method later to identify a user as soon as I have their userId. However, if that customer has not made a purchase yet, they will not show up as customers in the RevenueCat dashboard. That’s a real bummer because I regularly want to give existing but selected users access to premium entitlements. I cannot do that though if they are not even in the RevenueCat dashboard. From what I understood, calling the configure method creates a user account if none is already created (and cached). Why is that user account not showing in the dashboard?Consider this case: I do direct customer acquisition and get them to download the app and create a user account. Now I want to grant them a specific entitlement. This seems like a very basic feature. But right now, I don’t see how I
I’m interested in using RevenueCat for subscriptions and purchases in a Tauri app released for Android and iOS. The only information I found was a thread from a year ago which suggested using API and said that Tauri v2 support was not on the roadmap:Has anything changed since then? I’d love to use RevenueCat but part of its appeal is using an SDK that ties together all the API calls and the native purchase flow together. Are you planning to support Tauri v2 in the future? It’s a wild guess but given that Tauri’s architecture is similar to Capacitor, I suspect a lot of work done for Capacitor could be reused.
I’m unable to select the monthly or yearly package, and there is continuous logs in console sayingW/[Purchases](24112): Could not process value for variable 'sub_offer_duration' for package '$rc_annual'. Please check that the product for that package matches the requirements for that variable. Defaulting to empty string.
I'm running into an issue where offerings are not loading only on iOS 18.4. All of my apps that use RevenueCat have been working fine for months, and they still work perfectly on iOS 18.2, and earlier versions. This is happening in all of my apps and I haven’t changed anything recently. I’ve gone through everything mentioned in this article multiple times to make sure my setup is correct. I’ve tested this on both a real device (using a sandbox account) and the simulator The issue is the same on both. I even created a brand new product just for testing, added it to App Store Connect and RevenueCat, but it still didn’t work. I’m not using a StoreKit configuration file. The SDK version is 5.20.2.Here is my debug log, with identifiers anonymized: DEBUG: ℹ️ Configuring SDK using RevenueCat's UserDefaults suite.DEBUG: 👤 Identifying App User IDDEBUG: ℹ️ Debug logging enabledDEBUG: ℹ️ SDK Version - 5.20.2DEBUG: ℹ️ Bundle ID - com.example.MyAppDEBUG: ℹ️ System Version - Version 18.4 (Build 22E
I have a React-Native Expo project. I used StoreKit file and synced it with App Store and edited the original scheme to use this StoreKit file and my simulator was working perfectly and offerings were loaded perfectly. I then do npx expo prebuild --cleanbefore submitting to Test Flight. I created build using and submitted to Test Flight.eas build --platform ioseas submit --platform ios --latestI got an error:There is an issue with your configuration Check underlying error for more details…. <continue> Below is my code: import {ActivityIndicator, Alert, Button, FlatList, Platform, View} from "react-native";import {useEffect, useState} from "react";import Purchases, {PurchasesOffering, PurchasesPackage} from "react-native-purchases";import styles from "@/screens/IAP/IAPStyles";import CustomText from "@/components/CustomText";import Heading from "@/components/Heading";function IAPScreen() { const [currentOfferings, setCurrentOfferings] = useState<PurchasesOffering | null>(nul
How can I test IAPs in my Expo managed app in the iOS Simulator? I’m getting PURCHASE_CANCELED when I try to purchase a subscription in my app using an Apple Sandbox account. The app is running on the Apple Simulator with iOS 16.4 installed. Looking through the messages in Console.app I see this: Purchase did not return a transaction: Error Domain=ASDErrorDomain Code=500 "(null)" UserInfo={client-environment-type=Sandbox, storefront-country-code=USA, NSUnderlyingError=0x60000212cae0 {Error Domain=AMSErrorDomain Code=100 "Authentication Failed" UserInfo={NSMultipleUnderlyingErrorsKey=( "Error Domain=AMSErrorDomain Code=2 \"An unknown error occurred. Please try again.\" UserInfo={NSLocalizedDescription=An unknown error occurred. Please try again.}", "Error Domain=com.apple.accounts Code=4 \"No auth plugin to verify credentials for accounts of type com.apple.account.iTunesStore.sandbox\" UserInfo={NSLocalizedDescription=No auth plugin to verify credentials for accounts of type com.a
I’m still using the old API key because when I tried migrating, purchases made with the old key weren’t recognized by the new API (I opened an issue here: https://github.com/RevenueCat/purchases-flutter/issues/472). Today I tried migrating again and noticed the issue still persists. Subscriptions made with the old API key are recognized by the new API, but one-time purchases still aren’t. If the user taps the “Restore Purchases” button, it does correctly recognize it — but I feel like that’s unnecessary friction for the user, and it could lead to negative feedback for the app. I’m also getting the lint warning that Purchases.setup (Flutter) is deprecated. So I just want to know: can I still keep using the old API key? And will support for it eventually be dropped?As a side note, when I restore the purchase made with the old API key, I get this message on console, and then the purchase is fully restored: 🤖‼️ Couldn't acknowledge purchase after restoring it, this most likely means the s
We’re trying to use Revenuecat Web billing with stripe. Our business is registered in India and this is the error we get. From what I see, we need to pass a description when creating a payment intent for stripe, which is probably something Revenuecat is doing in the backend, you can read about it here https://support.stripe.com/questions/failed-international-payments-from-stripe-accounts-in-indiaIs there something we’ve missed from our side or is it an issue?
I am using Jetpack Compose in my Android app. I have created a composable screen in which based on the user (Free or Premium), I show the paywall. Now, when the user makes a successful purchase, my composable screen is getting dismissed automatically. I am using the below code if the user is not premium. PaywallDialog( PaywallDialogOptions.Builder() .setOffering(currentOffering) .setFontProvider(CustomFontProvider(RobotoFontFamily)) .setDismissRequest { onNavigateUp() } .setListener( object : PaywallListener { override fun onPurchaseCompleted( customerInfo: CustomerInfo, storeTransaction: StoreTransaction ) { onPurchaseOrRestoreCompleted() } override fun onRestoreCompleted(customerInfo: CustomerInfo) { onPurchaseOrRestoreCompleted() }
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.