Discussion and help from anything related to RevenueCat.
Recently active
Hi,I’ve set up my in-app subscriptions in App Store Connect and created the offerings in RevenueCat. The products appear correctly in the RevenueCat dashboard, and the getOfferings() call works without errors.However, I’m still getting an error when trying to make a purchase with Purchases.purchasePackage(...).My subscriptions are marked as Approved in App Store Connect and attached to a subscription group.In RevenueCat, the products are linked to the correct entitlement and offering.I’m not seeing the “Missing Metadata” warning anymore, but the purchase still fails.Could you please help me identify what might be going wrong?Thank you!
hi, onPurchaseCompleted (or any other event) is not fired. I present the paywall like:.sheet(isPresented: $showPaywall) { PaywallView(displayCloseButton: true) .onPurchaseCompleted { customerInfo in print("onPurchaseCompleted") }... .onRequestedDismissal() is only fired when I manually tap on close button on paywall. Im using 5.33.0 version. Im testing on my real device iPhone 15 pro max, ios 18.5. Alo does not work on simulator etc. I have removed lib, add it again, cleared cache... This is getting very annoying.some debug info are no requests currently running, starting request POST /v1/receiptsDEBUG: ℹ️ API request started: POST '/v1/receipts'DEBUG: ℹ️ API request completed: POST '/v1/receipts' (200)DEBUG: ℹ️ PostReceiptDataOperation: FinishedINFO: 💰 Finishing transaction '...' for product '...monthly'DEBUG: ℹ️ Serial request done: POST /v1/receipts, 0 requests left in the queueDEBUG: ℹ️ Sending updated Cus
Hi everyone,I’m currently stuck on an issue that I’ve spent countless hours trying to fix, and I’m hoping someone here can help. I’m using RevenueCat for my first app, and I’ve set up everything according to the documentation.My subscriptions are fully configured in App Store Connect and are marked as "Ready to Submit." The product IDs match exactly between App Store Connect and RevenueCat, and I’ve attached these subscriptions to my app version in App Store Connect. I also confirmed that my RevenueCat offering is active and includes these products.Here’s the problem. My RevenueCat paywall works perfectly in the simulator. The paywall loads, the subscription products appear correctly, and everything functions as expected, including test purchases.However, when I install the app through TestFlight on a real device, the paywall fails to load and throws Error 23 from RevenueCat, saying there’s an issue with the configuration. I’ve tried everything I can think of:I’ve uploaded new TestFlig
Hi,Although I used to use it without any problems and was able to successfully pull product information from app store connect, I realized that it is not working now.What I’ve tried: Followed and applied all the instructions here: https://www.revenuecat.com/docs/service-credentials/itunesconnect-app-specific-shared-secret/app-store-connect-api-key-configuration Double checked all keys (issuer id, key id, vendor number) Created new app-store-connect api key with the app manager access and uploaded p8 file. waited at least 24hr. I set app specific shared secret by following https://www.revenuecat.com/docs/service-credentials/itunesconnect-app-specific-shared-secret I double checked my app bundle id Checked My in app purchase key is validated but app strore connect api still has an issue. I attached revenuecat and app store connect screenshots.Please help me to fix this.app store connect api
I went from using react-native-iap, due to losing a lot of money on refunds because of a purchase acknowledgment issue I couldn’t figure out.Came over to use RevenueCat, heard great things, setup account, it gave me all the check marks. Pulled in all my previous data, even refunded data. (which is EVERY purchase) I have a trivia game.Now products can’t be found.I have 1 subscription: Unlocks premium access, an “Everything Bundle” which unlocks everything in the app, always, forever, 1 price. Then I have individual IAPs for specific packs.[RevenueCat] ℹ️ Product not found: everythingbundle1 - Product Type: subs, Reason: PRODUCT_NOT_FOUND, Serialized doc ID: I imported all my products from Google Play Console, and they are set as Non-Consumable. (Photo for the one above below) But I don’t see why they are coming over as subs, even though they are setup as IAPs in google play console. I have offers setup and entitlements (Example of the same one)Every single IAP & Sub are all not abl
Long time RC user, very happy with the service!I have a question regarding handling rewards for “perks”:Is that possible to implement without my own server and only use RC?Ref: https://support.google.com/admob/answer/9603226?hl=enMy scenario is that I can setup a perk I want the user to get, when a reward is verified.But I only use “anonymous” users in RC, since I want it optional to give out info for the user.Cheers from Norway,Lars
Hi, I have two paywalls in my flutter application. Subscriptions and offer paywall. Subscriptions paywall is default but offer paywall needs the offer parameter to show. After subscriptions page, when ı navigate to offer, old page preview shows at first. Because the second page is rendering the offering parameter. It looks pool quality. You could check the images. How can ı fix this?
In the in-app purchase key configuration section, I am uploading files from a previous app and I keep getting this error. Why is it a problem in this app while it is not a problem in any other app? Please help. “The key is not valid or is not compatible with the bundle id of your app.”
Hello to allBy the try {CustomerInfo customerInfo = await Purchases.getCustomerInfo();// access latest customerInfo} on PlatformException catch (e) {// Error fetching customer info}How is it possible to get which products that the customer purchased ? In my case, I have 2 consomables that are 10 and 50 games, I want to know which one that the customer purchased and in this case,,treat this information as a variable.Thanks for your helpVincent
Hello, Unfortunately I could not find any information in the docs or on GitHub if trials from Paddle can be used when building a custom paywall using the purchases-js SDK.Was wondering if I have something wrong in my setup or if this is just not supported at the moment. Trial is being returned as “null” even though I added it to Paddle for this price."subscription_options": { "base_option": { "base": { "cycle_count": 1, "period_duration": "P1Y", "price": { "amount": 4999, "amount_micros": 49990000, "currency": "EUR" } }, "id": "base_option", "intro_price": null, "price_id": "mypriceid", "trial": null } },
I'm using RN 0.74.5 and this is the first time I've put my app on the store, I've tested it on both a virtual machine and a real machine locally using xcode via the storekit config file, but why is there a question mark unversioned (image 1) but when I put it on Testlight, I can't get the Offerings (image 2)Do I need to add any API key in AppDelegate.mm? Can anyone help me?
Hello! I have a paywall editor query.I have a tab for yearly vs. 3 months. I have selected annual as the default package, but when I test on my phone, it defaults to 3 months. Has anyone else had this issue and found a fix? The packages are pulling through correctly in the bottom box when annual/3 months are selected. I have also tested it by attaching one of our offerings to a template paywall and am having the same issue. Any help / guidance hugely appreciated!
My paywall works fine for iphone but on ipad the bottom text is being cutoff and the user has to scroll to see it. I tried playing around with things like padding on the paywall editor but can’t get the paywall to go bigger. I also tried fixing it vibecoding but nothing is working. App is coded in swiftui. Not sure if it’s a revenuecat issue or if it’s the code in my app. Any ideas how to fix it? The images are attached.
Subject: Unable to Retrieve Offerings in Thunkable (Android)Hi RevenueCat Support Team,I'm building an Android app with Thunkable and using RevenueCat for in-app purchases.In my project (created in RevenueCat), I have already created an Offering named "default" and added the correct product to it.In Thunkable, I’m using the “in app purchases offerings” block on screen open, but it always returns null for the identifier.Here are the details:- Platform: Android- Offering: "default" (with product correctly attached)- In Thunkable: Using the `in app purchases offerings` block when the screen opens- Behavior: - In Live Viewer: When I tap the purchase button, I get the error “Something has gone wrong.” - In Google Play Internal Test: The first screen loads, but the app doesn't react or show offerings. - Offering identifier is always null- I’m testing on a real Android device using Google Play Console’s internal testing trackCould you please help me understand why the offerings are n
Apple offers a new web service (pre-release): Retention Messaging API.When a customer goes to cancel a subscription, they are shown a message and/or a discounted offer right within the system iOS cancellation flow.This is a powerful mechanism to protect revenueCan RC offer drop-in support for this such that a developer can configure text, images and Products similar to the Paywall builder.If this is not already on your short-list, I’d strongly request it.
I found google remove the “Query Purchase History” method recently, so Purchases.restorePurchasesWith not work on RevenueCat SDK 9.x.Any solution for SDK 9.X for user restore their purchase? https://developer.android.com/google/play/billing/query-purchase-history
I’m building a mobile app where multiple users can log into the app on the same device, and each user should have their own individual subscription managed via RevenueCat and Google Play Billing. We’ve enabled restorePurchases() in our app before every new purchase attempt — as recommended. Also, we’ve set “Block Restores” in RevenueCat settings (i.e., Keep with original App User ID), so that subscriptions are not transferred between users.Here’s what happens: I log in as User A in the app. I subscribe to the monthly plan. I then log out and create a new account: User B. Even after manually switching to a different Google Play account in the Play Store app (Settings > Profile > Switch account), when I try to subscribe again under User B, I get the error: “There is already another active subscriber using the same receipt.” Expected Behavior:Each app user (e.g. User A, User B) should be able to: Have their own subscription Purchase separately even if they are on the same de
Can someone explain why feature items text are not showing on actual android device and on emulator?I have set the text colour to black as you can see from one of the screenshot but it doesn’t show up.If I change the Features background (top level) to some other colours then I can see the items appearing in white.Text properties on featured item.Feature items showing in preview.Feature items not visible on android phone. (Samsung Galaxy S21, Android 15)
Connection failed!We couldn't establish a link to the App Store. The App Store Connect API credentials are not valid or do not have sufficient permissions to list apps. Make sure the key has at least the App Manager role.I keep on getting this error and I 100% put everything in the right way. And I'm not sure why.
Hi, I'm building an iOS app using RevenueCat + Capacitor and encountered an issue when purchasing a non-consumable product (lifetime) via RevenueCat Paywall.I have three products configured in App Store Connect and RevenueCat: com.ddtapp.premium.weekly (weekly subscription) com.ddtapp.premium.monthly (monthly subscription) com.ddtapp.premium.lifetime (non-consumable) When I use the Paywall to purchase weekly and monthly, everything works as expected — the payment sheet appears and the purchase succeeds.However, when I try to purchase lifetime, the payment sheet does not appear, and I get the following error repeatedly:DEBUG: Will execute purchase logic provided by RevenueCat.INFO: 💰 Purchasing Product 'com.ddtapp.premium.lifetime' from package in Offering 'default'DEBUG: ℹ️ Found 0 unsynced attributes for App User ID: $RCAnonymousID:5d717e11cc7a….DEBUG: ℹ️ TransactionPoster: handling transaction '20000009...' for product 'com.ddtapp.premium.lifetime' (date: 2025-05-01 13:38:33 +00
I am completely lost on this one - posted already two times but somehow these posts are not showing up.Since I am completely stuck, all I can to is try again: I have already checked my setup multiple times and went through this guide (Why are offerings or products empty?) but I fail to see where I did my mistake.Is there any way for me to trouble shoot this issue?My staging environment has a released app which I installed via Google Play All my products IDs (SKU) exist and are active All SKUs are mirrored in RevenueCat The service account is happy products show up as active Bundle ID etc are fine - otherwise Firebase Authentication would not work either Checked my API keysI’ve checked with logcat but there’s nothing that would indicate an issue..Completely lost here :/
I integrated RC when StoreKit 1 was my only other option. I do not use or plan to use any of the various RC advanced features (experiments, paywalls, etc) and am still on the RC legacy Starter plan.I’ve looked into StoreKit2 and it does everything I need these days. I think that the analytics that ASC currently provides plus what Apple has promised in terms of new metrics this year is all I need there, too. So I am seriously considering migrating off of RC and only using StoreKit2 directly (reduces App complexity without having an intermediate layer on top of SK2, removes dependency on 3rd party, etc).I’m having trouble finding documentation regarding this, but I’m wondering exactly what the process is… and whether this means any new transactions I handle via StoreKit2 on new versions will not go to MTR.Existing/legacy versions of the app will of course still use RC as I can’t take back those versions out there in the wild ;)I do not have the “Track new purchases from server-to-server
Let’s say I have a NavController with 5 pages, and 3 of them should be behind paywall - whenever the user navigates to those routes, i would like to show the paywall if needed (thankfully this is handled within the paywall composable itself) - but i don't want the composable behind the paywall to render/run at all.The documentation shows this: @OptIn(ExperimentalPreviewRevenueCatUIPurchasesAPI::class)@Composableprivate fun NavGraph(navController: NavHostController) { NavHost( navController = navController, startDestination = Screen.Main.route, ) { composable(route = Screen.Main.route) { MainScreen() PaywallDialog( PaywallDialogOptions.Builder() .setShouldDisplayBlock { !it.entitlements.active.isEmpty() } .setListener( object : PaywallListener { override fun onPurchaseCompleted(customerInfo: CustomerInfo, storeTransaction: StoreTransacti
When I refer to the Google RTDN documentation to do the relevant setup, I encountered a problem when proceeding to the second step. Immediately after I selected the preset theme, an error message appeared in the web page's console, at which point the Connect to Google button remained disabled, and I'll post an image of the error below. Of course, I'm sure that each step has been set up correctly according to the documentation. all But I didn't find any answers about it in search engines and community, so any help there?
I set up Revenue Cat for my new app in February with a single monthly subscription option along with a six month free trial. So, everyone who signed up had to choose the monthly subscription option, because that was the only one available.We now want to add a yearly subscription option with a substantial discount. I understand that new users will now get to choose between the two. What I don’t understand is how existing subscribers (who chose the monthly subscription) could switch over to the yearly subscription model when their free trial comes to an end. Is that something that is automatically made available to them, or do I have to do something special?Thanks so much for any insight you can offer.Philip
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.