Get help with anything related to RevenueCat.
Recently active
Hi,I have two options in my mobile app: a subscription that includes access to all features and also grants an amount of tokens, and consumable tokens that only provide tokens.I understand that it’s best to manage the token balance in my backend. However, I want to ensure that if a user makes a restore, I can link them to the token balance I store in my backend and restore the correct amount of tokens (for example, if a user reinstalls the app or performs a factory reset, they get a new user ID, and I want the restore process to link them back to their old ID and token balance).I don’t have an authentication system, so I can’t rely on user login to track purchases.Alternatively, can I update the user’s token balance as they purchase and spend tokens using RevenueCat’s customer attributes? Then, when they restore purchases, can I retrieve this balance and update their token count accordingly?So what is the best practice to implement my case, and how should I structure it?Thanks!
Hey everyone,I’m experiencing a serious issue with RevenueCat that has been affecting my app's users and revenue. I submitted a support ticket over three weeks ago, got one generic response that repeated what I had already answered, and after clarifying, I’ve been completely ignored.Since then, I opened a second ticket after two weeks of silence, but that one has also been ignored for another week. I’ve been nothing but polite and professional, in the second ticket I admit, bit frustrated, yet I’m getting zero support for a major problem that is actively losing me customers.The issue:🚨 Anonymous IDs are overwriting user IDs, causing incomplete anonymous webhook data sent to backend and lost purchases.🚨 This means users never recieve Premiums because I can’t pair it with their accountsThis is obviously a critical bug, and I have provided full details, code snippets, and even possible reasons in my tickets, yet I am still not getting any help.I’m incredibly frustrated. Has anyone else
Sorry for asking this question here, but we haven’t had much luck over the SDK forum. We are still getting the “The product is not available for purchase” when attempting to subscribe on Android when using the React Native package. Initially I suspected there may be some kind of latency associated with the setup, but that doesn’t appear to be the case. Here’s a list of what we’ve checked and the current set up:The app is publicly rolled out on a production track The package name in RevenueCat matches that in our Gradle build The product identifiers match those in Google Play Console The subscriptions are active in Google Play ConsoleSet up on the Google side of things seems to be fine, as the Play Store listing is correctly pulling in our subscription packages. Here are screenshots to confirm the above:Subscriptions in GPC showing as activeApp is available and rolled out in productionPlay Store listing clearly recognises IAPsIdentifiers in RevenueCat match those in the Play ConsolePack
Hi all,My iOS apps are getting rejected more and more often because of “Guideline 2.1 - Performance - App Completeness” where they claim they do not find the submitted new subscription in the submitted binary.This is an interesting take because:I cannot put the new subscription in my RevenueCat default offering because it is not approved yet - so anybody who downloads the app now would not see it.But if I dont put the new subscription in my default offering obviously the App Review team will not see it during review. What would be the best practice to introduce new subscriptions, so it does not mess up the paywall for the existing users but also the App Review team sees it in the app. How you usually do it? (Depending on the paywall and the products in the default offering, you cannot really put the new subscription there before it got approved. For example if I have only 1 subscription product in my default offering, etc)(Also sometimes you just want to submit a new subscription to b
Hello,I am testing in app subscriptions in my app. Actually it’s been working really fine till today. I cancel and restart muy subscription many times to test the features. Today when i try to subscribe to app i have this message below;PurchasesError(code=PurchaseInvalidError, underlyingErrorMessage=Error updating purchases. DebugMessage: Expired Product details. Please fetch product details again and use it to retry the call.. ErrorCode: DEVELOPER_ERROR., message='One or more of the arguments provided are invalid.') I am fetching product informations correctly (like price ...etc). What should i do?
Hey I have 2 builds of my app (different bundle id’s), production and staging. In appstore connect, I only have the production app, so ive made my IAP’s there and when i use revenuecat with the bundle id set to production, it works with the production build app, all good!However, when I want to develop on staging, with the staging app, i use the staging instance of revenue cat (different project with the other bundle id)...but this one cant pull data from appstoreconnect...because the bundle id’s are different.How am i meant to pull IAP’s into my staging app? can i use my production app IAP’s in appstore connect with my staging app? do i need to make a staging app in appstore connect with its own IAP’s? what are the implications of this if so?Thanks for some help on how to handle this setup!
I'm finishing my FlutterFlow app and want to protect content based on user subscriptions. I'll handle the protection with Supabase since there are certain situations where blocked content doesn't depend on whether the user is paying or not.To do this, I'll use webhooks to send RevenueCat changes to Supabase. The only thing I need to know is how RevenueCat registers users. Researching online, I found the following:Status: Active / period_type: Normal, Promotional, Intro, TrialStatus: Expired / period_type: Normal, Promotional, Intro, TrialStatus: Non-subscriptionI also need to know if these words are registered with the first letter capitalized or not.I'm asking this because in test environments I can't see how a real user behaves.Thanks
I’m using “Transfer if no active subscriptions”, however, I’ve noticed if an anonymous user id calls `restorePurchase`, the anonymous can always transfer the subscriptions, no matter the subscription is active or not.Here’s the complete flow where the transfer happens even if there are active subscriptions:On device 1, user logs in and purchase subscription On device 2 with the same Google Play account signed in, anonymous user is not logged in, but taps the “restore purchase” button The subscription is now transferred to anonymous user However, in the following flow the “Transfer if no active subscriptions” works as expected:On device 1, user A logs in and purchase subscription On device 2 with the same Google Play account signed in, user B logs in and tap “restore purchase” button The restore failed due to `ReceiptAlreadyInUseError`In case anyone’s curious, the reason why we have a `restorePurchase` button even if user is signed out is that we support consumables.
I'm trying to sync customers in RevenueCat with our database.Requesting projects/{project_id}/customers does not return active_entitlements as mentioned in the documentation. Fetching customers one by one takes too long and results in hitting rate limits.I noticed a similar question, but it was closed without a response or comment: So, is this a bug, or is there missing documentation (e.g., missing expand parameters)?Is there any workaround, such as an endpoint that allows retrieving only customers with active entitlements?Thanks in advance, Sebastian
Hello,I have connected RevenueCat and Stripe, and I have added the following events: • customer.subscription.updated • customer.subscription.deleted • charge.refunded • invoice.updated • customer.subscription.created • checkout.session.completedI have also configured the Stripe Webhook Secret, and the connection is working properly. However, I’m facing an issue: the Product IDs remain in “No Status” and do not connect.
I’m testing my app and purchases with RevenueCat in sanbox mode and I’ve noticed that often after not using the app for about a day my subscription status will revert back to free mode. I’m using a boolean in a view controller to track subscription status and on launch call this function to update that bool @MainActor func updateCustomerInfo() async { do { let customerInfo = try await Purchases.shared.customerInfo() self.customerInfo = customerInfo // Check if user has pro access isPro = customerInfo.entitlements["Lectura Pro"]?.isActive == true } catch { self.error = error.localizedDescription } } Also at app launch in my delegate I try to init the RevenueCat config with firebase auth id, and if it’s not available i use anonymous id: if let user = Auth.auth().currentUser { Purchases.configure(withAPIKey: Secrets().revenueCatProjectKey, appUserID: user.uid) print("on app
I didn’t understand how to test the inApp purchases on a iOS simulator using Expo. I usually run my code withnpx expo run:ios I’ve created the subscription and certificate in XCode following the documentation: https://www.revenuecat.com/docs/apple-app-store#ios-14-only-testing-on-the-simulator Now I’m not sure how to build/run correctly the app.
I’ve updated my subscriptions/products in Google Play and restarted my app, but RevenueCat Purchases.getOfferings() never updates with updated titles, descriptions, or pricing. How do I bust the cache to get subscription/product updates?I have a Flutter app and am running the purchases_flutter: ^3.6.0 package.
Hello,I have been testing my in app purchase for a subscription through Testflight with my real Apple account. It uses the production sandbox environment, and so everything works as expected previously.Recently, Apple has made a change to the renewal subscription rate in this production sandbox environment mentioned here and in the Revenuecat blog post: https://developer.apple.com/help/app-store-connect/test-a-beta-version/subscription-renewal-rate-in-testflightEssentially, the renewal rate has changed from a few minutes to an entire day now. This is fine, but the documentation also says this renewal lasts a week. But it’s been over a week for me, and it continues to renew. I also have not found where I can go to turn off this subscription. Does anyone have an ideas how to resolve this? I’d like to it stop renewing.
In Flutter app, the paywall is loaded and working in debug mode. However, in release mode, the app crashes when opening the paywall. The error logs I get in release mode are as follows. What is the reason for this?FATAL EXCEPTION: mainE/AndroidRuntime(11634): Process: com.gualtech.zeriapp, PID: 11634E/AndroidRuntime(11634): java.lang.NullPointerException: Attempt to read from field 'long android.content.res.XmlBlock$Parser.mParseState' on a null object referenceE/AndroidRuntime(11634): at android.content.res.XmlBlock$Parser.getAttributeListValue(XmlBlock.java:385)E/AndroidRuntime(11634): at w0.a.a(SourceFile:1)E/AndroidRuntime(11634): at M0.c.b(SourceFile:38)E/AndroidRuntime(11634): at M0.c.c(SourceFile:85)
Hello! I’ve been having a hard time finding a definitive answer in Apple’s docs. As some of these offer code flows appear to only be fully testable in production, it’d be helpful to see if I can get an answer ahead of time.If we use RevenueCat’s recommended method for redeeming App Store offer codes - that is, creating a custom URL and linking to the App Store where the code is automatically redeemed, does anyone know if the code is exposed to the subscriber at any point in that flow?Is the offer code shown in the customer’s emailed receipt from the App Store?We are investigating to see if we can use offer codes to drive discounts in the App Store without exposing those codes to users. So if there is any part of this flow that might expose that code, we’d love to know.Thank you!
I am integrating a new paywall v2 into my flutter app. I have created a new offering (called welcome) and set it as default. I have created a new paywall v2 associated with the offering. However, I am getting this error from the app"WARN: Error: Offering 'welcome' has no configured paywall.You can fix this by editing the paywall in the RevenueCat dashboard.The displayed paywall contains default configuration.This error will be hidden in production." How can I fix this?Thank you 😊
Hi all, Several new users are activating a product from an offering not used and not shown at the moment.This offering was active a few days ago but not anymore. Based on the customer’s log “First seen using the app” entry they are new users and not ones a few days back who might would still has this offering in the cache. My setup:offering1 - two subscription productsoffering2 - two subscription productsoffering3 - one in app purchase: a lifetime offer I used in a campaign Now offering2 is being the default but it is running in an experiment (A/B test) together with offering1. Several users (new users according to the log) are activating the product from offering3. In my paywall nothing is hardcoded, I am using the current offering products to be displayed. Also during my tests I dont see my lifetime product from offering3 anywhere. Now I can just completely remove offering3 for sure - but I still want to know how is it possible?Anybody came accross a similar issue?
Hello, I’m using React Native and getting this issue. I have seen it in a previous post but looks like the SDK has been updated since then. "react-native-purchases": "^8.5.2", "react-native-purchases-ui": "^8.5.2",
Hi, it's my first time setting up RevenueCat. So I just want to be sure I won't face an issue on production.I have one subscription which can be monthly or annual, each being its own product. I've set up both products as an entitlement, while testing on sandbox environment I noticed a potential issue. When I sign up for Monthly plan then switch to Annual Plan and cancel the subscription, the `willRenew` flag remains true until the monthly plan reaches the expiration date, even though it won't renew since it's been cancelled. This is also reflected on the Dashboard so we see: - Started a subscription of `monthly` ✔- Changed their renewal preference to `annual`✔- Opted-out of renewal for `monthly` ✔And on the Entitlements card: `monthly.product.id`Subscription renews in X minutes it only updates the dashboard info and the willRenew flag once the expiration time has been reachedIs this just a sandbox behavior ? If this is the expected behavior, how can I check if it won't renew?I'd like t
When trying to understand unexpected user journeys involving cancelation / re-subscription for iOS users, it would be really helpful to identify when a user had changed their subscription in iOS settings vs. an in-app purchase. Is there a way to distinguish these just from looking at a purchase event in RevenueCat?
Hey, I have setup a RevenueCat and before making any purchase attempt, the price shown is in USD. Once I press buy, I am prompted to login to my apple account and after the login, the correct currency is selected. In the app the currency updates after I close and reopen the app. Is there a possibility to change the default currency to EUR from USD? My app is not even available in any country that uses USD as legal tender so it is confusing to my users. I have so far only tested in Testflight on two devices.
Hi guys, I’m trying to test purchase on Xcode Simulator, but encountered “Error fetching offerings - 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). ”I’m using a Local StoreKitConfiguration, and I tried both the same or different productID with revenueCat and Apple Store Connect. (not sure whether the local configuration should be the same as those two) The StoreKitTestCertificate is renewed and updated to revenueCat each time I try. Upload Subscription Offers Key to revenueCat. The configuration is selected in the duplicated schemeSeems like the configuration file is not working, I checked there was a post described a similar issue, but not solve my problem. Can you guys help me with this?
I checked a couple of articles including this one about how to sync between mobile app & web app. However, I am curious if there’s a preferred user flow when opening the mobile app for the first time if signed up on web. My concern is too much stuff to wade through just to get to the app content.Today, I currently display a Paywall immediately when opening. After subscription is successful, we make them login - Google or Apple oAuth options only. At this time we call the RevenueCat `login` method so the email is linked to our backend auth `userId`. At this point - on mobile - the user & our DB is in sync. On Web, all the user would have to do is login and then we check the RevenueCat SDK customer info to see if they were a mobile user. However, if the user signs up on web & then opens on Mobile, is the solution to have an intermediate screen that offers “existing user login” or “continue for free” option which triggers the paywall? I don’t know that I like the sound
Hello,I am testing an app as external tester and I managed to subscribe to a monthly subscription. Now, I want to test the user subscription deletion and re-subscription. I see that in Sandbox environment it shows me that subscription will be renewed or expired in 1 day, not 5 minutes.Even if I delete the customer from RevenueCat and restart an app, after first paywall page, my iPhone shows me that I have a valid subscription and I can continue it, but I am unable to restart a full subscription cycle again.Could you please help me? When I was testing subscription as internal tester, the expiration time was 5 minutes so I was able to restart the process, is it connected with the fact I am not internal tester but external? Thanks!
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.