Get help with your SDK implementation.
Recently active
We have encountered an issue where the user alias is created with a delay by using the following API:In java: Purchases.getSharedInstance().logIn( … ) Below is the timeline of our user: Because the delay described above, the Webhook notified our backend service with an AnonymuosID, and we do know about the alias happened afterward. Thus our own service cannot link the user’s REAL user id with the purchases and subscriptions they made. This happens quite often on our side (more than 2% of our users are impacted!!!!), and it has caused a huge data loss already. Please fix this as soon as possible, or let us know, what can goes wrong with the integration.
I have done everything as requested, but I still get an error, what should I do?
I am having issues with the RC Web SDK. I followed the instructions to get setup, and have successfully added products to Stripe & added to my existing mobile app offerings. I can now view my paywall with products:Paywall successfully displays products from Stripe. The product identified is in sync between Stripe & RevenueCatWhen I click “continue” for either product it results in an error:error code 16The console shows a 500 error to the RevenueCat API:POST https://api.revenuecat.com/rcbilling/v1/purchase 500 (Internal Server Error)qr @ Purchases.es.js:6824postPurchase @ Purchases.es.js:7015startPurchase @ Purchases.es.js:4850ae @ Purchases.es.js:6398eval @ Purchases.es.js:6383Ei @ Purchases.es.js:100eval @ Purchases.es.js:1782cr @ Purchases.es.js:971eval @ Purchases.es.js:1782to @ Purchases.es.js:766lt @ Purchases.es.js:816ts @ Purchases.es.js:866rs @ Purchases.es.js:852ns @ Purchases.es.js:876When i close the modal this error shows up in the console:Purchases.es.js:4768 U
Greetings, I am facing this scenario in sandbox:-User A subscribes to Subscription Group A, it is a success. User A logs out. User B logs in (Purchases.login(NEW_APP_ID)) (same App Store account) User B subscribes to Subscription Group B, it is an error.ERROR: Product purchase for '<Subscription Group B>' failed with error: PurchasesError(error: There is already another active subscriber using the same receipt., userInfo: ["NSUnderlyingError": Error Domain=RevenueCat.BackendErrorCode Code=7102 "There is already another active subscriber using the same receipt. User A is now subscribed to Subscription Group A and Subscription Group B simultaneously (webhook is alternating between the two)How can I stop Group B’s subscription being given to User A? If “Keep with Original App User ID” is set, then User B’s subscriptions will be given to User A. If “Transfer with New App User ID” is set, User A’s subscriptions will be set for User B. But I need both to keep their current state and b
The recommended template is used, the default language is English and can be displayed normally;1 However, when I added a new language: Simplified Chinese, and set it as the default, the error occurred in the display.2 If the default language is English and I adjust the test region to mainland China, Chinese UI are not displayed. The interface still shows in English.
When trying to crete a paywall using the new paywall beta builder, i can’t get the price to be shown, it always display the variable.Tried it 2 times, with entitlements and offerings from scratch, same issue. Is this a known thing, or I’m doing something wrong?Bonus: gradients’s don’t look like they look live as whiting the builder
Hi, I’m trying to implement a subscription system with multiple tiers in a Unity cross-platform app.My concern is if there is a way where a user that has activated a subscription in a platform can upgrade the subscription from a different platform.I have also seen that there is a “managementUrl” that can be used to guide the user to the correct portal in case that he wants to manage a subscription, but I cannot find that url in the Unity Revenuecat SDK.
I have an app that offers annual, monthly and lifetime subscriptions. They all access the same ‘premium’ entitlement. If a new in-app user account is created and I restore purchases, I am able to successfully transfer entitlements between users, provided that the parent App Store Sandbox account is the same. I’m using web-hooks, so whenever a ‘transfer’ event is fired, I can update my database to make sure it is in-sync with RevenueCat. I remove any subscription information from the ‘transferred_from’ user, and apply it to the ‘transferred_to’ user. This is working perfectly for restoring monthly and annual subscriptions. But there are issues for lifetime purchases. Purchase a lifetime subscription using App Store account ‘x’. Sign out of Sandbox account ‘x’, and sign into a completely new, unrelated Sandbox account ‘y’ with no purchase history. Create a new in-app account using the new Sandbox account. Call restorePurchases. I would expect that nothing should happen, since Sandbox
Let’s assume I change my Terms of Service.At app start, I prompt each user to accept the new terms. Users who reject the new terms shall be denied access to the app.How do I handle users with a paid auto-renewing subscription?Is there a way to cancel this subscription? Or prevent auto-renewal? It seems illegal to deny access to my app, but continue to charge them. Not sure if it’s relevant for this question, but I use react native.
I have a question about the syncPurchases function when I have two users of my app on one Apple Id. What happens when I call syncPurchases after then calling logIn with another App User Id? I know that the restorePurchases function throws an error that the receipt is already in use (if I set transfer behaviour to not transfer), but syncPurchases does not do that. In fact, it doesn't do anything and I don't know what exactly is going on. Is it safe to call syncPurchases when users sign in to the app? Not on every startup but while calling my backend sign in function.
Hi folks,In the {{ product.price_per_month }}/mo section in Paywall V2, the price data always stays in USD currency. even though I have localized paywall for countries, the currency section is not localized according to the prices and currencies in the countries. But when I select the subscription package in paywall and continue, the currency is localized without any problem in the last confirmation section. Where do you think the problem is coming from? If you want I can show you in detail with screenshots?(I am trying all process on real device in testflight).
I just made a change to my v2 Paywalls, and the badges that I have are no longer rendering their backgrounds. This was working fine today, until I made and published an unrelated change, so it seems something may have broken today. Everything looks fine when viewed in the online editor. Images below - the ‘33% OFF’ text is the badge - the text can barely be seen in the after, but the purple background is no longer there. Before: After:
We're currently testing the new Paywall v2 feature in our React Native frontend. Everything works as expected except for the badges. We've tried all possible configurations—rectangle, pill, image background, colored background, etc.—but none seem to render correctly. The discrepancy between the Paywall Editor and the actual rendered Paywall on iOS persists.Has anyone else encountered this issue? Any insights or workarounds would be greatly appreciated!Current versions:"react-native-purchases": "^8.6.1","react-native-purchases-ui": "^8.6.1"“react-native”: "0.76.7" "expo": "52.0.36"Attached is a screenshot of different approaches in the Paywall Editor preview and how it gets displayed on device.
What could be the reason that I cannot access my Google Play subscription’s free trial offer from the SDK by calling `aPackage.product.subscriptionOptions?.freeTrial`? It is always null.This is a new subscription product which I created after reading through your migration guide from 5.x -6.x. It was suggested there that I should create new subscription products, so I did. I used to have two products, one annual and one monthly. I created a new single subscription with 2 base plans and an annual which has the free trial offer. With the old setup and 5.x version this worked, but now I cannot see the free trial in the new base plan at all. Any help is appreciated. All base plans and the new offer are active in Play console and the products have been added to RC packages. Also this annual base plan looks to be “backwards compatible”.This happens with the latest 6.3.0 version of the purchases SDK.
We are trying to implement hard paywalls with the flutter SDK, not luck so far.We have tried: RevenueCatUI.presentPaywallIfNeeded()RevenueCatUI.presentPaywallAnd honesty WE don’t see a big difference between them.Any of you have found a workaround?If anyone is interested the app is called Petme.https://www.petme.social/ https://apps.apple.com/us/app/petme-social-with-your-pet/id1663635642 https://play.google.com/store/apps/details?id=com.zerosgroup.petme&pli=1
I am adding a new package to our default offerings. An awkward situation I ran into is that my released version is designed to show all packages under my offerings, so that even when I’m still developing and change the ui for the new package, users can already see the new package in the released version.Of course I can workaround this issue, change my code to not show all packages first → after that is released → develope my new package. I was wondering it makes sense to add developer mode to offerings, and wondering if other people share similar thoughts.
In the iOS SDK the `StoreTransaction` type has the `jwsRepresentation` field but it’s marked internal. So I can’t access it. I want this value so that I can send it to my server and verify the transaction with apple. Then our backend can run any necessary updates to the user it needs.Is there a reason this is marked internal whereas most of the other properties are public?
I have the following code:``` Tab ("Passport", systemImage: "airplane.departure", value: "passport") { NavigationStack(path: $path) { if displayPaywall { PaywallView() .onPurchaseStarted({ package in print("Purchase started") }) .onPurchaseCompleted { customerInfo in self.displayPaywall = false print(customerInfo) } .onRestoreCompleted { customerInfo in self.displayPaywall = false print(customerInfo) } } else { ScanMRCView(path: $path) .environment(settingsStore) } } }```none of the callbacks und
Hi there,this is kinda serious I think. The onPurchaseCompleted is not being called whenever I test in sandbox. Since this is the function recommended on the forum by other revenuecat staff, it kinda of shakes my confidence in RC unfortunately, especially when in other posts it was said “the team is investigating the issue”Could someone kindly help out? var body: some View { // This view immediately triggers RevenueCat's paywall presentation. PaywallView(displayCloseButton: false, performPurchase: nil, performRestore: nil) .onPurchaseCompleted { res in print("YAY! THANK YOU") print("res = \(res)") onPurchaseCompleted() } .onPurchaseFailure { error in print("purchase error \(error)") } .onRequestedDismissal { } } the `onPurchaseCompleted` and `onPurchaseFailure` are never called but `onRequestedDismissal` is.
I am using the React Native package with RevenueCat, and everything is working as expected on iOS (thanks for your hard work on the great RN package, by the way).There is still an issue with Android though, and I have been struggling with it for a few days. Initially, I thought it was because I did not have a release published on a test track, but that has now been rectified (approved by Google) yesterday, and I’m still getting the “The product is not available for purchase” on Android.Things I have tried:Make sure the app is published on the “Closed Testing” track (it is): Ensure that both the app ID and SKUs for the products are the same (they are). Ensure subscriptions are active in GPC (they are): Does anyone know what else I can try, as it’s a bit annoying since the app is finished, but I’m blocked from testing.Thanks in advance for any help, and all the best for 2022!Ben.
Hello,I’m trying to set the paywall dynamically inside of my app, and I have certain offers that do not yet have paywalls created.I was trying to create a fallback in this case, to prevent user error on our end, in the case we do not have a paywall setup for a specific offer, so that we dont present the user with a black paywall screen.I noticed there wasnt any event that triggers in this case that ` RevenueCatUI.PaywallError 0 ` fires.Wondering if there is a way to react to this error being fired, so I can handle it. Thanks
In the Xcode Simulator, I enter my sandbox email and password and press ok. To be clear, I use the same email and password to log into iCloud for this sandbox account.I get the following in the console. The Paywall is not dismissed and nothing else happens:Purchase did not return a transaction: Error Domain=ASDErrorDomain Code=530 "(null)" UserInfo={NSUnderlyingError=0x600000cfe9a0 {Error Domain=AMSErrorDomain Code=100 "Authentication Failed The authentication failed." UserInfo={NSMultipleUnderlyingErrorsKey=( "Error Domain=AMSErrorDomain Code=2 \"Password reuse not available for account The account state does not support password reuse.\" UserInfo={NSDebugDescription=Password reuse not available for account The account state does not support password reuse., AMSDescription=Password reuse not available for account, AMSFailureReason=The account state does not support password reuse.}", "Error Domain=AMSErrorDomain Code=0 \"Authentication Failed Encountered an unrecognized authenti
Greetings, Initial purchase (Plus; our low tier) is successful. Upgrading (Pro; our high tier) is successful. Upon opening the paywall for Plus to perform a downgrade, it says WARN: User is already subscribed to this product. Ignoring Which is weird, since I have upgraded! Thought revenuecat would revoke the old entitlement and set it to unactive or delete it…. so I waited 5 minutes for it to expire (pre-set by xcode).. and when attempting to downgrade to plus once again, it initially shows the paywall and says it has been successfully purchased and will take an effective after the current (Pro) subscription has ended. Then immediately followed by this error:- [purchases] ERROR: � Product purchase for 'plus_1_year' failed with error:Error Domain=RevenueCat.ErrorCode Code=8 "The receipt is not valid. The purchased product was missing in the receipt. This is typically due to a bug in StoreKit."UserInfo={rc_backend_error_code=7712, rc_response_status_code=422,NSLocalizedDescription=The re
Hi RevenueCat Community,I’m currently developing a React Native app and using a custom paywall implementation. We’re now considering switching to the SDK’s paywall if one is configured for the user's current offering. However, we’ve encountered a challenge: the RevenueCat API response doesn’t seem to include an explicit flag or property indicating whether a paywall is configured for an offering. If showing the UI Paywall without a paywall configured, a default, rather bland screen is shown.At the moment, we rely on naming conventions (e.g., identifiers like "sandbox_no_paywall" vs. "sandbox_offer") and occasionally custom metadata fields, but this approach feels hacky and a bit fragile.I’m curious:Is there a built-in or recommended way within RevenueCat to detect whether a paywall is configured for an offering? Are there any best practices or plans to support a native flag (e.g., "hasPaywall": true) in the API response? If not, what do you recommend as the best approach to distinguish
Hi all,In flutter project, we are using the syncPurchases method to automatically sync transactions when users launch the app. However, we are encountering an issue where the login prompt always appears when calling syncPurchases in the sandbox environment. This issue was resolved when I created and logged with Apple Store sandbox account.The documentation mentions using syncPurchases instead of restorePurchases to perform a silent sync without triggering any prompts. Below is the code snippet we are implementing, which runs when the app launches. bool reloadData() async { try { await Purchases.syncPurchases(); await fetchProducts(); return true; } catch (e) { return false; } }I have the following questions:In what specific cases does calling syncPurchases trigger the login prompt? In the release version on the App Store (not sandbox), will calling syncPurchases still display the login prompt? Since this is an urgent matter, I hope the team can review and
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.