Discussion and help from anything related to RevenueCat.
Recently active
It goes something like this:1 - Sign into RC with appID12 - Purchase subscription.3 - Sign out and back in again using appID24 - RC says no subscription active for appID2 and so we present offerings.5 - Purchase fails because (presumably) Play Store thinks we already have an active sub because appID1 bought one using the common PlayStore sign in.I’d like to prohibit sub sharing across different accounts.In order for appID2 to be able to purchase a subscription, another Play Store account needs to be used.What’s the general best practice for dealing with this scenario?Many thanks.
Hello,iOS users changed subscription plan but it seems the new subscription does not immediately affect their account.Customer profile shows user successfully changed their renewal preference to higher subscription plan but user’s current Entitlement has not been changed. I think the user's Entitlement will be changed on the next subscription renewal.What I want is crossgrade, users should upgrade and use new plan immediately.All of our subscription plans are in the same subscription group and subscription duration are same. It should be Crossgrading with Same Duration but I have no idea what is the problem.Please help me to solve the problem.
I’m building an Expo app using Expo Router, Clerk for authentication, and Revenue Cat to manage subscriptions.I noticed in the docs that I need to switch the Android launch mode to be “standard” as opposed to the default “singleTask” set by Expo, so I built an Expo config plugin to do so.However, after switching to to “standard,” Clerk’s Google OAuth no longer works after redirecting back to my app (by default, this is scheme://oauth-native-callback), throwing an error:Error: Attempted to navigate before mounting the Root Layout component. Ensure the Root Layout component is rendering a Slot, or other navigator on the first render.I’ve verified that switching the launch mode back to “singleTask” resolves the issue. I’m opening support tickets with Clerk and Expo Router as well, but I’m hoping to get some clarification here on whether I may have missed something while setting this up and how important “standard” launch mode is on Android. Is it common for users to background their app d
Hello, could someone kindly explain why we should check entitlements.all isActive after a purchase before unlocking the feature (see code below) ? My points are:If purchasePackage() didn’t fail, it means that the purchase was processed successfully and this should be enough to unlock the features associated to the purchase. Checking isActive of Entitlements doesn’t make sense in the case where Entitlement has several consumable products (ie. boost_1, boost_2, boost_3) which can be purchased multiple times (so for example , user might have 3 active boost_1, 1 active boost_2, 5 active boost_3, etc). In that case, using customerInfo.entitlements.all["my_entitlement_identifier"].isActive might lead even to wrong outcome. Am I missing something? try {CustomerInfo customerInfo = await Purchases.purchasePackage(package);if (customerInfo.entitlements.all["my_entitlement_identifier"].isActive) {// Unlock that great "pro" content}} on PlatformException catch (e) {var errorCode = PurchasesErrorHe
DEBUG: ℹ️ API request failed: GET '/v1/subscribers/$RCAnonymousID%3A4d4f3f826e1d447abbffa71973d3eedd' (<>): The request timed out. WARN: ⚠️ Attempt to update CustomerInfo from network failed.The operation couldn’t be completed. (RevenueCat.BackendError error 0.)Underlying error: The request timed out.
Hello,I have a question regarding the V2 API.When I make a single API call(`/subscriptions`), the value of RevenueCat-Rate-Limit-Current-Usage in the response headers appears something weird. For instance, I receive values like 686 or 602 for a few calls, while RevenueCat-Rate-Limit-Current-Limit is set to 480.The Current-Usage value is higher than the Current-Limit, yet no rate limiting is applied.Could you explain the logic behind how these values are determined?Or is trial and error until the rate limit is triggered the best approach to understand this?
Currently have an iOS app with a subscription group, Basic & Plus. In Revenue Cat I have 2 entitlements containing the respective “product (subscription)” from the app store. Then in my offerings I have 1 group called default, which contains the packages tied to a single product. How can I make sure that my Plus plan is prioritized? I want to make it so that if a user has Basic and buys Plus auto cancel the basic and go to the Plus.
Hello, I have issue with i guess “Price String” from RevenueCat in my app(Android, iOS), this happens only once when app is intalled on a new device, when user tries to Subscribe the screen is getting grey, then user needs to restart the app and after the screen appears well. Why is that?
Hello,I’m currently developing a Flutter-based fitness app, and we’re integrating the payments feature using RevenueCat (not live in production yet). The app offers three types of subscriptions: 1 month, 6 months, and 12 months.Here’s the functionality I would like to implement: Monthly Subscriptions: If a user with a 1-month subscription burns a certain calorie threshold for the month (determined by my backend), they should receive a 50% discount on their next month’s subscription. And then if the user doesn’t burn enough calories on month 2, they get back to full price. Long-Term Subscriptions (6 or 12 months): My backend tracks whether the user burns enough calories each month. For each successful month, a value (e.g., 50% of that month’s fee) is added to a virtual piggy bank. At the end of their subscription, the total amount in the piggy bank will be used as a discount for their next subscription. I also would like to get the possibility to keep that value somewhere instead, s
Hi, PlatformException(2, There was a problem with the App Store., {code: 2, message: There was a problem with the App Store., readable_error_code: STORE_PROBLEM, userCancelled: false, underlyingErrorMessage: UNKNOWN_ERROR, readableErrorCode: STORE_PROBLEM}, null) I am getting such a problem, it is successful in developer mode, it works in the sandbox part, but when we download it from the store, it does not work. Is there a revenuecat engineer about the issueError Screeshot;but sandbox success developer mode;
We see more and more users getting STORE_PROBLEM (code:2) errors thrown like this one:PlatformException(2, There was a problem with the App Store., {readable_error_code: STORE_PROBLEM, underlyingErrorMessage: An unknown error occurred, code: 2, message: There was a problem with the App Store., readableErrorCode: STORE_PROBLEM, userCancelled: false}, null)The strange thing is that this is happening on Production for real users and not sandbox. We are randomly able to reproduce the issue on iOS 17.2 but not on iOS 16.When the error occurs the purchase call is loading multiple seconds and NOT showing the native buy modal of apple. Instead after multiple seconds this error is thrown. This currently happen in around 25% of all purchase calls. We did not upgrade revenuecat (version 5.6.2 of purchases_flutter) We had this error in the past sometimes but on iOS 17 it is occurring a lot. We have no idea where this error is suddenly coming from.
I am trying to integrate revenue cat with one of my amazon Fire TV Sticks app. I have followed the steps described in the docs and created the product and sku’s required for it and configured the same on the revenue cat. But when I am trying to fetch subscription from the amazon app store I am getting below error.Content metadata not available for package name: app_package_nameAbstractCommandTask: On Exception!!!!: com.amazon.a.a.n.a.a.a: AUTH_TOKEN_VERIFICATION_FAILURE: null: null
Hi @joan-cardona, @Haley Pace I am facing an issue with the configuration of appUserId and API key while using the RevenueCat SDK for subscriptions. Currently, I am configuring appUserId and API key multiple screens to ensure that the SDK receives the correct data at the time of subscribing.I have integrated Sentry logs for the purchases.getCustomerInfo() call and am logging this information within the onPurchaseStarted event on the RevenueCat paywall. From the logs, I can confirm that the originalAppUserId is being set correctly and as intended.However, on the webhook, the app_user_id appears as an anonymous user ID instead of the configured appUserId. This discrepancy is breaking our subscription flow, leading to a poor user experience and dissatisfaction among our users.Could you please help identify the root cause of this issue? Additionally, I would appreciate any suggestions or best practices for ensuring that the correct appUserId is passed consistently through the webhook.We
I am planning influencer campaigns on would like to come back to them with credentials so they can login & use the app for free Currently there is either no login, either login with email. How can I “whitelist” their email address so they can skip paywall upon onboarding?
I've implemented a listener for subscription status changes in my Flutter app like this: void listenToCustomerInfoUpdates(Function(CustomerInfo) listener) { Purchases.addCustomerInfoUpdateListener((customerInfo) { // Called whenever subscription status changes listener(customerInfo); });}I want to confirm: If a user cancels their subscription through the system subscription settings (App Store), will this listener automatically detect the change?My implementation:I've set up the listener in my service layerUsing it with BLoC pattern to update UI stateThe listener is registered when the app initializesIs this the correct approach for handling real-time subscription status updates? Will it catch all subscription state changes including cancellations through the system settings?Thanks in advance for any clarification!
Hi, I’m developing iOS 18+ app with RevenueCat 5.12.1.I found SubscriptionStoreView is almost perfect for me to make a paywall.My earlier code without SubscriptionStoreView used a custom purchase button like this. var buttonToPurchase: some View { let packages = offering?.availablePackages ?? [] let package = packages.first ?? nil Button { guard let currentPackage = package else { return } Purchases.shared.purchase(package: currentPackage) { (transaction, info, error, userCancelled) in if info?.entitlements[Constants.entitlementID]?.isActive == true { navigationViewModel.path.removeAll() } else if let error = error { self.error = error as NSError self.displayError = true } } } label: { Text("Continue") } } I don’t know how to apply Purchase.shared.purchase(package:) into SubscriptionStoreView.I know Su
This is P0 issue , My users have started to push me hard, and it's almost the weekend. in china guangdong
This page implies that win back offers are supported:Through Your App From a StoreKit Message Requires iOS SDK version 5.6.0+ However, I notice that the SDK is currently at version 5.14. I couldn’t find a roadmap for the SDK.What is the ETA for supporting win back offers? Or am I missing something?
Hi everyone..I am successfully running React Naive on an İOS only React Native Expo project.Now payments are handled by Apple App Store.I want to port this Expo project to web but then how will I handle payments for Non-Apple users?Do I need to open a stripe account and handle payments that way?If I do that, will the subscription and purchases be recognized by Revenue Cat once the client gets an iOS device?Thanks..
I received this email from Google Play titled Introducing a new way to re-engage your users [Opt-out link below] ..Do we know how this affects purchases via revenue cat?
I’ve seen the below answer given by Antonio 8 months ago. The beta access link is dead now.There’s no information about whether Apple and Google billing is supported in v2.Is it supported? If not is there a way to get access to that?And please add this to the documentation 🙏> This endpoint is publicly available only for RC Billing subscriptions, as stated in the docs. We also offer support for Apple, Google, and Stripe, but it’s currently in Beta. If you’d like to join the beta, you can request access here
Hello allI've just got a message from a user saying that the price of their weekly subscription was $60. I thought it was a mistake on my end, but it turns out that in some countries like Taiwan and Mexico, Apple doesn't show a specific currency symbol, but uses the generic $. In that user case, it should be NT$60 = $1.85 (USD).I already submitted a ticket to Apple, but I don't have high expectations that they'll do anything. I'm wondering if RevenueCat could add a new variable to the paywall, like {currency_code}, to make it clear that the price is in the local currency. Does anyone have any other ideas on how to work around this problem?
I have a question regarding Testflight and beta testing. Previously, before submitting it to Testflight I could successfully subscribe and cancel subscriptions with the sandbox account that I created on App Store Connect. However now when I am testing with a real Apple account I manage to subscribe to a subscription, but I cannot cancel that subscription in the App Store settings by using the managementURL from RevenueCat. On the “Confirm Cancellation” screen when pressing confirm I get the following message: “Your request is temporarily unable to be processed, please try again later”. Have some of you experienced the same thing with beta testing on Testflight?
We recently changed our auth provider and our users now have different IDs. Is it okay to call `login()` again with another user id and call `syncPurchases()` afterwards, grant the user acces to his purchses again? Or should I set an alias? Kind regards,Marius
I’m using RevenueCat and logging into RevenueCat on each device with their Firebase Auth UID. The subscriptions work, and it transfers premium features without having to restore purchases. When I use the Customer Center though, it says I don’t have any subscriptions, restoring does nothing, and refunds/changing plans don’t work.
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.