Discussion and help from anything related to RevenueCat.
Recently active
Something is wrong with the checkTrialOrIntroductoryPriceEligibility function. I'm not sure if I'm doing it right; to be sure, I wanted to share my problem here first.In my iOS app, I use this snippet to check whether there is an eligible introductory price:if (Platform.OS === 'ios') { // Purchases.checkTrialOrIntroductoryPriceEligibility is only available for iOS const introEligibilityStatuses = await Purchases.checkTrialOrIntroductoryPriceEligibility([ pkg.product.identifier, ]); return ( introEligibilityStatuses[pkg.product.identifier].status === Purchases.INTRO_ELIGIBILITY_STATUS.INTRO_ELIGIBILITY_STATUS_ELIGIBLE ); } In one account, everything works fine—I haven't bought anything with that account yet.But the second account (with expired introductory subscription) returns wrong information:The status returns INTRO_ELIGIBILITY_STATUS_ELIGIBLE (2), which means the introductory price is available, so I show the discount in the app. Ho
Testing with an iOS Testflight build, monthly subscription.I subscribed with my iPhone a while ago. I changed the product today: I added a new product on appstoreconnect, and linked to it from the RevenueCat’s offerings, replacing the old one.I updated the Testflight build and at some point got PRODUCT_CHANGE webhook event on my server, which I see in logs linking the old product id to the new one, but I don’t handle this webhook currently, so it was ignored.Trying to fetch the new subscription from the API after this doesn’t work:https://api.revenuecat.com/v2/projects/$projectId/customers/$userIdStr/subscriptionsand thenhttps://api.revenuecat.com/v2/projects/$projectId/products/$productIdkeeps returning the old product id. I deleted this id from my server configuration so can’t do anything with it.I try to subscribe again, I get a system dialog: “You are currently subscribed to this (..) it continues until tomorrow .. plan continues until cancelled”. I try to cancel this subscription
Hi everyone,I’m working on an app that will only offer subscriptions — specifically monthly and yearly plans. I’ve already set up these subscriptions in the Apple Developer dashboard.My question is: do I also need to create separate In-App Purchases for both the monthly and yearly subscriptions, or is setting up the subscriptions enough?In Xcode, I’ve enabled In-App Purchases in the capabilities, but I’m not sure if anything else needs to be configured in the Apple Developer dashboard.Thanks in advance for any guidance!
In our iOS app we call:Purchases.logIn("ourCustomUserId")RevenueCat returns our custom user ID correctly, and in the dashboard we see the customer under that ID. ✅But when a purchase happens, the webhook event only sends back:"app_user_id": "SRCAnonymousID:xxxx"There is no original_app_user_id or aliases in the webhook payload. This makes it impossible to match purchases to the correct user in our backend.Question:Why are webhooks still sending the anonymous ID instead of the logged-in custom ID? Shouldn’t webhook V2 include original_app_user_id and aliases so we can map it properly? How can we fix this so webhook events always include our real app user ID?
Hello,I sent my app for review but it got rejected due to Error 23, Guideline 2.1 - Performance - App Completeness.In-app purchases are in the “Ready to Submit” state. Paid Applications Agreement is Active. Tax forms are Active. A bank account has been added.
I’m working on a subscription enabled app, I have enabled monthly and yearly subscriptions on apple dashboard for my app do I still need to enable in-app-purchases? I don’t have consumable, non-consumable items.In xCode I have added in-app-purchases capabilities but I’m not sure if I need to setup In-App Purchases.Thanks
Hi, I’ve been using Paywall with Flutter, and it’s been great so far, but it doesn’t handle subscription upgrades/downgrades for Google Play, which is a major issue.Without this essential feature, Paywall becomes almost unusable for managing multiple subscriptions on the Play Store.Are there any solutions to make RevenueCat Paywall work for upgrades/downgrades with Google subscriptions in Flutter?
I’ve uploaded a new version of my app with sdk version 9.5.0 and I’m seeing this error in production, did anyone encounter this?here is the stack trace: com.revenuecat.purchases.CoroutinesExtensionsCommonKt$awaitGetProducts$2$2.invoke (CoroutinesExtensionsCommon.kt:146) com.revenuecat.purchases.CoroutinesExtensionsCommonKt$awaitGetProducts$2$2.invoke (CoroutinesExtensionsCommon.kt:141) com.revenuecat.purchases.ListenerConversionsCommonKt$getStoreProductsCallback$1.onError (ListenerConversionsCommon.kt:36) com.revenuecat.purchases.PurchasesOrchestrator$getProducts$1.onError (PurchasesOrchestrator.kt:517) com.revenuecat.purchases.PurchasesOrchestrator$getProductsOfTypes$1$2$1.invoke (PurchasesOrchestrator.kt:1128) com.revenuecat.purchases.PurchasesOrchestrator$getProductsOfTypes$1$2$1.invoke (PurchasesOrchestrator.kt:1126) com.revenuecat.purchases.PurchasesOrchestrator.dispatch$lambda$63 (PurchasesOrchestrator.kt:1158) com.revenuecat.purchases.PurchasesOrchestrator.$r8$lambda$vfpu2r8Y3li
I currently use API v8, there are lifetime products in my app that were incorrectly configured as “consumable” in the RevenueCat dashboard (I fixed that to be “non-consumable” but many users have already purchased these before). I understand that in API v9 (which uses Play Billing Library 8), I can’t restore consumed products. Does that mean that if I upgrade then these products will be non-restorable?In other words, does fixing the products from “consumable” to be “non-consumable” solve the issue for all purchases, or does it apply only to new purchases after the fix?
Is it necessary to perform additional integration based on the documentation from https://developer.amazon.com/docs/appstore-sdk/integrate-appstore-sdk.html ? I did not find any mention of this in the documentation, either in RevenueCat Documentation or in react-native-purchases. Also, the questions already posted on this forum do not have a logical conclusion. The fact is that after setting everything up perfectly and testing the build in production, I have:SKUs are identical
I have created a Paywall with some icons as you can see in the screenshot attached. But when I try to open the paywall in my app, or even in the RevenueCat app, the icons do not appear. iOS 26RevenueCat SDK 5.39.0
Hi.. I’ve got an old ObjC project that uses RevCat. I don’t rely on the system localization but allow the user to choose the language to override it.. so I want to also override the paywall localization. I found another post that says this is possible in ios: Purchases.shared.overridePreferredUILocale("es")My app is ObjC and generally I can call any func with objC but this one doesn't seem to be found.. trying:[[RCPurchases sharedPurchases] overridePreferredUILocale:@”es”];But that’s not found.. is there a way? Or would I need to switch over and have some swift in my project (I haven’t really done that, I know it’s possible.. just trying to find the easiest solution at the moment) Thanks!D
Hi,In my app, users can manually select their preferred language, since many of them don’t change their phone’s system language to match their native one.Because of this, the app language is controlled through my own state management system rather than relying on the device’s localization settings.The problem is that I can’t find a way to localize the paywall to match this internal language setting.Am I missing something here, or does this mean I can’t localize the paywall at all?This feature is essential for us, and it could determine whether we continue with RevenueCat or need to explore alternatives.Please help!
Error loading subscriptions: PlatformException(23, There is an issue with your configuration. Check the underlying error for more details. 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).More information: https://rev.cat/why-are-offerings-empty, {code: 23, readableErrorCode:CONFIGURATION_ERROR, message: There is an issue with your configuration. Check the underlying error for more details. 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).More information: https://rev.cat/why-are-offerings-empty, readable_error_code:CONFIGURATION_ERROR, underlying ErrorMessage:
I’m integrating Customer Center into my app (with purchases-kmp) and the Customer Center Composable always shows a blank screen. Any ideas on what could be wrong? https://drive.google.com/file/d/1YT3z5aytElJVvgDZvJHN_VwCV-aRu7X8/view?usp=sharing
I have a monthly subscription that gives 40 virtual credits each month. It seems that each renewal, it adds another 40 credits. Is there way to make sure the credits don’t roll over each month?
We have multiple paywalls configured in RevenueCat and would like to implement dynamic paywall decisioning based on the user’s attributes or behavior.What is the recommended approach to determine and show the correct paywall for each user?Is there a way to manage or customize which paywall is presented at runtime using RevenueCat’s SDK or dashboard?
I’ve a user with a certain app user id, which I see on my logs and RevenueCat webhook calls.Under customers this id is not in any of the lists (active subscription, sandbox, non-subscription, expired).I see it however on the dashboard (“overview”) right as the first customer id.Any reason for this discrepancy? it’s confusing that it’s not listed under customers. Thanks.
Getting a bunch of these in my logs12.1.0 - [FirebaseAnalytics][I-ACS023141] Purchase is a duplicate and will not be reported. Product ID: test3Is this from RevenueCat? I’m not sending this data to analytics. Thanks!
Hello,I am wondering if it is possible for stripe checkout metadata to be propagated from the revenue cat webhooks that get sent to my server. I understand how we can set the app_user_id ( a combination of setting the metadata in checkout.sessions.create ) but is is possible to set other metadata on the stripe session that will propagate to my server? This feature would be useful in cases where the I have a ton of different products and I could link it the db identifier on my end to avoid looking up the product from stripes api.Thanks!
I tested successfully purchasing a subscription : I downloaded the app from Play Store, and purchase it, everything is fine.Is it possible to do the same test when deploying from Android Studio or installing manually the apk ? When I try, I get an error “This version of the application is not configured for billing through Google Play”.Both tests are done on an emulator. Thank you
For anyone who has had to create a secondary Firebase project to support a Production environment seperate from Development. I would love some advice or testimony on what you did.I am currently assuming that I will create a new environment for prod assumign the one i have setup already is devhave to create a secondary project in firebase with 3 new apps (1 web,1 ios, 1 android) I have to create a secondary project in revenueCat linked to the new firebase project I have to create a new set of ios app/google/stripe play app and recreate the subscription products.I am a bit unsure if 3 is correct and was wondering if anyone had success using the same apps/purchase products created for both environments in a dual firebase/revenuecat sitch.Cheers,Onyaga
Hello RevenueCat community,We would like to open a discussion around the initialization behavior of the Amazon Appstore SDK when used with RevenueCat, particularly on Fire TV devices and low-spec kindle tablets. EnvironmentReact Native Purchases: react-native-purchases: 8.11.10 RevenueCat Amazon Store: purchases-store-amazon:8.22.0 Amazon Appstore SDK: com.amazon.device:amazon-appstore-sdk:3.0.5Devices tested:Fire TV Stick (Fire OS 5.2.9.5) Kindle Fire 7, 7th generation (Fire OS 5.7.1.0) Issue observed When configuring RevenueCat withPurchases.configure({ apiKey: REVENUE_CAT_API_KEY_AMAZON, useAmazon: true })we sometimes experience very long initialization times (up to 30–60 seconds). This affects the ability to fetch offerings at app startup.Errors observed in React Native:[RevenueCat] Error obtaining storefront in Amazon: PurchasesError( code=UnknownError, underlyingErrorMessage=Timeout error trying to get Amazon user data., message='Unknown error.')[RevenueCat] 😿‼️ PurchasesE
Hi Everyone,I’m trying to give an existing subscriber a free month using RevenueCat’s “Google Play: Defer a Subscription” API (https://www.revenuecat.com/docs/api-v1#tag/transactions/operation/defer-a-google-subscription), but I keep getting "Subscription not found for subscriber" in the response.I’m posting to this URL: https://api.revenuecat.com/v1/subscribers/{app_user_id}/subscriptions/{product_identifier}/deferI copied the product ID from the "product_id" field of the event data from when the user purchased the subscription, to make sure I was using the correct value. I have tried it with the product ID as both plain text and URL-encoded. The user ID contains only letters and numbers, so URI-encoding makes no difference there.My POST body looks like this:{ "expiry_time_ms": 1762620360000}I can’t figure out what I’m doing wrong. Does anyone have any insight?
import SwiftUIimport RevenueCatimport RevenueCatUIstruct BuyPremiumInfoOrButton: View { @EnvironmentObject var store: Store @State private var displayPaywall = false var body: some View { Group { switch store.premiumState { case .notLoaded: Text("Loading...") case .hasPremium: Label("You have premium", systemImage: "crown") case .doesNotHavePremium: Button { displayPaywall.toggle() } label: { Label("Upgrade to Premium", systemImage: "crown") } case .error: Text("There was an error loading your premium status") } }.sheet(isPresented: self.$displayPaywall, onDismiss: { store.refresh() }) { PaywallView() } }}The above is my code. Its just using the PaywallView() from the RevenueCatUI. But this one seems to not dismiss the sheet that the
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.