Discussion and help from anything related to RevenueCat.
Recently active
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?
Hi,I have some questions around the behavior of revenue cat with the stripe integration. With “track new purchases” will it always process new subscriptions even when the product id isn’t already defined in revenue cat? Additionally what are the behaviors for the other events when the product id or transaction id doesn’t exist on revenue cat?
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!
Can someone please give me some clarification on the following scenario regarding anonymous users and the restorePurchases method. I’ve been chasing my tail on this for a week.Here’s the scenario:My app lets users use and subscribe to the app anonymously. RevenueCat creates an anonymous App User ID, when the user first opens the app. When the user subscribes, that anonymous ID is linked to the purchase. Webhook events list this anonymous ID in both the app_user_id and original_app_user_id fields.Now, let's assume the user gets a new phone:They download and open the app, generating a new anonymous App User ID for the new device. The user clicks "Restore Purchases," and I call restorePurchases() from the SDK. The restorePurchases() method returns a CustomerInfo object containing an originalAppUserId field.My questions are:What value will be in the originalAppUserId field of the CustomerInfo object after the restore? The anonymous App User ID from the first device that originally purchase
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
There appears to be a problem created in part by Apple where in a multi-scene app such as a Catalyst app with multiple windows, the StoreKit UI sheets show in the wrong window which is quite problematic. The user flow doesn’t work right because they start a purchase in one window and the sheet appears in another which may be hidden. The challenge is that Apple introduces APIs to allow us to specify the correct scene - as well as SwiftUI modifiers to do this correctly for you - but as a user of RevenueCat it does not seem to be possible to use these without forking the RevenueCat SDK because Purchases is final and the internals are private. Please see this issue for details. I feel stuck by RevenueCat without a good solution for this problem in the app I’m about to ship on Mac. Github issue
Hey, my app is available only on iOS and android. I’m using unity SDK. Since a few days now, I have a increasing number of users (up to 30% some days and some of them are paying users) that are flagged “other” when looking at the new customer chart in the revenue cat dashboard when segmented by “platform”. When looking at some these users data, they seem to be actually using an iOS or android device. This absence of attributed platform is also seen in the extracts. Not sure why this is happening more and more these days.
I am using RevenueCatUI.presentPaywall to display Paywall on ANDROID, How I can close paywall by auto when user make Pruchases process, the Paywall close just if user click on X icon, I need to close it automatically by RevenueCatUI SDK
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.
In my app I use the webhook from RevenueCat to keep my backend in sync with customer entitlements and enforce the entitlement check on every request from the app.I know that webhooks are async and there might be some lag, so what I do is check the database first for the active entitlement, and if it is not found or inactive, I hit the RC API as a fallback.My question is on the front end - in the React Native SDK, when the promise resolves on the purchasePackage() method, can we assume at that point everything is in sync between the App Store or Play Store and RevenueCat? Even if the first webhook were delayed a little, would I immediately find the user’s active entitlement via the API in my fallback check? Hopefully this makes sense.
Hi,Will there be any plan to add other currency and if yes will Malaysian Ringgit (MYR) be included in the update? Really hope you are guys will include MYR in the near future. We have a big event coming up in May this year. Hopefully you guys can include MYR in Web Billing before that.ThanksZulfadhli
Will there be / is there out-of-the-box support for teams using Apple’s Advanced Commerce API?Team’s with potential hundreds of different SKUs that sell as one-time purchases through the new API, what will that mean in terms of RevenueCat? Currently there are products, synced/imported from the stores, that unlock entitlements. Is the flow still going to be the same? Any resources on this available?
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’ve been trying all day to install the RevenueCat extension, but no luck. This is the error I’m getting:; RESOURCE_ERROR at /deployments/firebase-ext-firestore-revenuecat-purchases/resources/handler: {"ResourceType":"gcp-types/cloudfunctions-v1:projects.locations.functions","ResourceErrorCode":"400","ResourceErrorMessage":"Gen1 operation for function projects/f1-live-pulse-27147/locations/us-central1/functions/ext-firestore-revenuecat-purchases-handler failed: Build failed: npm error code EUSAGE\nnpm error\nnpm error `npm ci` can only install packages when your package.json and package-lock.json or npm-shrinkwrap.json are in sync. Please update your lock file with `npm install` before continuing.\nnpm error\nnpm error Invalid: lock file's long@5.2.3 does not satisfy long@5.2.4\nnpm error Invalid: lock file's long@5.2.3 does not satisfy long@5.2.4\nnpm error Invalid: lock file's long@5.2.3 does not satisfy long@5.2.4\nnpm error\nnpm error Clean install a project\nnpm error\nnpm error U
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.
Hi Community, I wanted to know if I can use an African payment platforms like PayStack or Flutterwave with RevenueCat. I've only found tutorials that use Stripe which doesn't work here.Thank you.
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.
Hi, I have a flutter app without auth.On Android some users that have changed their devices or reinitialized their device, complains that when they hit the restorePurchase button in the app, nothing is restored.But they are on the same google account with valid proof of purchase, receipts, that they emailed me. The transfer to the new app user id, is not happening it seems when we call the await Purchases.restorePurchases()My account setting is configured on “Transfer to new App User IDs”I have updated to the last version of the sdk, and it’s the same. Restore purchase isn’t working anymore.Could you please tell why and how to fix this ?Thanks
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)
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.