Discussion and help from anything related to RevenueCat.
Recently active
I'm working with flutter, using an apple sandbox account. According to the logs, everything seems to be working fine.PROBLEM - 1But after clicking the paywall and logging in the sandbox credentials, I get this error 2: there was a problem with the app storeHow do I resolve this?PROBLEM - 2In the iPhone emulator, after clicking on paywall, the Apple login modal works, but when I create a build for TestFligh on my iPhone, after clicking on paywall, nothing happens. What could be causing this?PROBLEMA - 3After clicking on the paywall to purchase a plan, shouldn't the package purchase mode automatically open in the simulator? All that appears to me is a modal to log in with apple credentials. flutter: 🏠 DEBUG: Starting HomeScreenflutter: 🛍️ DEBUG: Checking premium accessflutter: 🛍️ DEBUG: Checking if RevenueCat is configured...flutter: 🛍️ DEBUG: Do you have premium access? falseflutter: 🛍️ DEBUG: Entitlements active: {}flutter: 🛍️ DEBUG: All entitlements: {}flutter: 🛍️ DEBUG: Search
Apple Review is getting rejected repeatedly due the following error: 🍎‼️ Error fetching offerings - The operation couldn’t be completed. (RevenueCat.OfferingsManager.Error error 0.) Underlying error: The request timed out.. This is only happening on Apple Review devices. I’ve tested in Simulator and various physical devices with different iOS versions and cannot reproduce. Here’s how I initialize RevenueCat: ...Future<void> initRevenueCat(ProviderContainer container) async { if (!Platform.isIOS) { throw UnsupportedError('Unsupported platform for revenuecat'); } if (kDebugMode) { await Purchases.setLogLevel(LogLevel.debug); } final configuration = PurchasesConfiguration(revenueCatApiKey); await Purchases.configure(configuration); Purchases.addCustomerInfoUpdateListener((_) { container.invalidate(customerInfoProvider); }); Purchases.setLogHandler(revenueCatHandler);}...Future<void> main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.
[using Flutter SDK] on iOS when I call Purchases.purchaseProduct and it throws the exception(s) PurchasesErrorCode.paymentPendingErrororPurchasesErrorCode.storeProblemErrorThe docs suggest that this is not an error and to inform the user that the purchase is pending.For some customers, they do not succeed in setting up a valid payment method at this point. I have instances where the actual purchase comes through 30+ days later (when a payment method is finally established, probably for another reason). At this point the payment is taken but the user may have uninstalled my app by then! Ideally, I would like to cancel the pending purchase in the App Store at this point and then require my users to go through the purchase flow a second time.How can I programatically cancel a pending purchase on iOS or at the very least, see this state outside of the purchaseProduct exception and report it to the user?
I am showing a discount paywall, after the user cancels the first paywall, but for some reason, It works well while testing, while in test flight, but once approved by apple in production it throws the below error RevenueCatUl.PaywallError 0The RevenueCat dashboard does not have an offering with identifier'pro_40_off_paywall'.also shown in the image.code - try {const secondPaywallResult = await RevenueCatUI.presentPaywall({offering: {identifier: 'pro_40_off_paywall'}});Even thought “pro_40_off_paywall” exists and works in dev and in testflight, hope someone can please help.
I put out a build using xcode16.2.. and started getting ipad users on older ios versions telling me the app crashes on startup.. I was finally able to reproduce and I get a crash when initializing rev cat crashes on this lineprivate let purchaseCompleteCallbacksByProductID: Atomic<[String: PurchaseCompletedBlock]> = .init([:]) Xcode reports:Thread 1: signal SIGABRTAn abort signal terminated the process. Such crashes often happen because of an uncaught exception or unrecoverable error or calling the abort() function. I’ve not gotten reports for iphone users.. but I’m not certain it’s just ipad related. Has anyone seen this? I haven’t touched the store code in a while.. the particular file that invokes rev cat hasn’t been touched in a year. I support older ios version.. 12.4 is the lowest so it’s using an older version of the sdk as well : ver 4.43.3 Any thoughts ? feels like it may be somehting cropped up with the new xcode and sequoia .. I’m not sure what else it may be
I have downloaded my p.8 file to upload to revenuecat but I am getting message it’s the wrong one - it’s asking for a subscription file but I don’t see that as an option in the apple developer account - please help!
Hey folks,how is it possible to set up the condensed footer for my iOS app? Im using the Bengal paywall and I can see in den preview settings that there is a possibility to set it up as fullscreen, footer and condensed footer. I can't get it to be the condensed footer version. Do I have to put this into my code? Thanks for any help. Best,George
Hello,I just want to ask1. What are the rate limits of the REST API?2. Is it ok if I call the REST API for every webhook received or is that unnecessary?Thank you! :)
Hey,I suddenly started getting 500 errors from the grant promotionals API. I’m running a promotion on my app right now that all new signups get free access until January 2. This of course is suddenly broken.The response I’m getting from RevenueCat is{"code":7110,"message":"Internal server error."} I of course want to figure out what the problem is now, and not 48 hours from now when support finally gets back to me.
I want to use the RevenueCat SDK in my iOS widgets. I tried to use it once before but our users were reporting that their widgets would randomly show “no subscription” (our UI when we determine the user doesn’t have a current subscription), so I commented out the RevenueCat specific code but now I want to try to add it back in. The SDK notes say (https://www.revenuecat.com/docs/configuring-sdk):“You should only configure Purchases once, usually early in your application lifecycle. After configuration, the same instance is shared throughout your app by accessing the .shared instance in the SDK.” However there doesn’t seem to be a good way to achieve this inside an iOS widget since getTimeline() can be called multiple times, I didn’t see another place where you can easily instantiate a singleton RevenueCat instance. I’m not sure if this multiple Purchases object issue was the cause of our previous issues where sometimes it was reported the user didn’t have a subscription even when they d
purchases_flutter: ^8.3.2I keep getting this error and I followed Google Play Checklist but it did not help me. I have an offering with 3 packages. I made sure that identifiers in RC are the same as in the Google Play Store except for “:auto-renewing” which is appended to the identifiers in RC. Please see the image When examining each product in RC, the product status is set to OK as shown in the following image: Here is how the product identifiers look in the Google Play Store: In the Google Play Store, the products are active as shown in the image:Also, I confirmed that the Google Play Package is correct and I do have valid credentials as shown in the image. I am not sure what else to do. Could someone please help?
Is there a way to change the styling for the WebSDK checkout form fields? I know we can update the general styling for the form but it is causing some UI issues:The select field for country styling looks like this: Also, on prefilling the card details in the browser, it looks like this: I tried overriding the css variables but no use. Is there any way to control this?
We are hoping to do a first release on app store with our subscription paywall, however, we want to allow our testflight users to continue to test for free. I want to check if app is downloaded via testflight environment and conditionally bypass the paywall. StoreKit has a Method called a thing called AppTransaction that has a environment field to it. There are StackOverflow post that resolved it using swift, but i am using expo. Is there something equivalent in revenueCat? What is the best way to approach this?
I'm using presentPaywallIfNeeded to call a paywall in Flutter. But I want it to be locked, user cannot swipe to close. How do I do this?
There is an issue with your configuration. Check the underlying error for more details. [Error: There is an issue with your configuration. Check the underlying error for more details.]{"nativeStackAndroid":[],"userInfo":{"underlyingErrorMessage":"There's a problem with your configuration. None of the products registered in the RevenueCat dashboard could be fetched from the Play Store.\nMore information: https://rev.cat/why-are-offerings-empty","readableErrorCode":"ConfigurationError","readable_error_code":"ConfigurationError","message":"There is an issue with your configuration. Check the underlying error for more details.","code":23},"code":"23"}how to fix this issue? I have checked ids. they match. Moreover, I’m also able to import products from console to revenue cat? But when i use sdk it gives error. My app is in internal testing and is waiting for review. Do I wait until review? Moreover, I don’t think closed testing would be the issue? Otherwise I shouldn’t be able to add subscr
Hello. We’ve integrated webhooks (Django rest). Basically what the user sees on frontend once they click is a spinner. Meanwhile we fire purchasePackage which in no time upon finishing should fire a webhook to our backend.. on the backend we create a Payment object with the transaction id from the webhook. On frontend as the spinner is spinning, after the purchasePackage request goes through, we wanted to begin verifying whether the backend has synced already (aka created the payment object). We wanted to call in a loop payment/<payment_id>/state … but for that we need transaction_id that was send in the webhook which is what we assumed will be returned from purchasePackage as part of the response … but as we understood, we’re not going to receive the transaction ID in the response of purchasePackage at all? … so what is the best way with capacitor to proceed to get the correct transaction id? Or do we have to completely change this logic ..thank you
I’m looking for some guidance on handling a case where a user can’t restore purchases on an Apple TV with multiple users. The setup is:The user who purchased my annual subscription (let’s call them User A) can access all premium features throughout the app. They are not the default user on the Apple TV, but I’m not sure if that matters. The default user on the Apple TV (User B) is using my app without a subscription and is trying to restore purchases to unlock premium features. When they do that, they get a MissingReceiptFileError. My Apple TV app is configured to “Run as Current User”, so it manages separate data for each user on the device (I’m not sure if that’s important to RevenueCat or not).The user then tried to delete the app and reinstall it, this time using the default Apple TV user (User B). This is what happened:They get the “A family member has already bought this item” message when downloading the app, and confirm the download They open the app and try to subscribe to the
Hi,In my SwiftUI app, I manage the app state with enums, and the paywall only presents to the user when I set the value of uiState to .displayPaywall.When this happens, the following code runs: case .displayPaywall(let uuid): PaywallView { viewModel.retry() } .presentPaywallIfNeeded( requiredEntitlementIdentifier: "premium") { _ in viewModel.fetchLandmarkInfoIfAllowed() } }And this is the PaywallView. The idea being that if the user dismisses the Paywall by clicking the X button, I show a simple message and a button that should supposedly trigger the Paywall view again: struct PaywallView: View { let onRetry: () -> Void var body: some View { VStack { Text("Max free daily limit reached. Upgrade to Premium for unlimited use.") .multilineTextAlignment(.center) .padding() Button("Retry") {
English (United States), Catalan, and English (Canada) have errors.I’m facing an issue while saving changes to my paywall template in RevenueCat. An error message appears:"English (United States), Catalan, and English (Canada) have errors." I’ve tried the following steps:Clearing cache. Testing in incognito mode.The issue persists. Console log highlights this specific error: An invalid form control with name='localized_strings_by_tier.en_US.gRcPHXRzvt.tier_name' is not focusable.
I’m currently facing an issue where there’s a noticeable difference between the data displayed in my dashboard and the RevenueCat dashboard. Specifically, the metrics (e.g., revenue, subscriptions, subscriber) don’t seem to align, and I’m unsure what might be causing this discrepancy.I used the RevenueCat API to create my dashboard
I am currently implementing a payment system for a web platform using RevenueCat Billing and Stripe. I have successfully implemented the functionality to cancel an active subscription using the following API endpoint:https://www.revenuecat.com/docs/api-v2#tag/Subscription/operation/list-subscription-entitlements However, I was unable to find an API for reversing (undoing) a canceled subscription. Could you please let me know if such functionality exists and, if so, point me to the relevant documentation or endpoint? If this feature is not supported, any advice on possible alternatives would also be greatly appreciated.
The documentation on IOS Offers Codes states that Offer Codes were added in IOS 14 (2020) and there is a warning that in-app redemption is buggy/unstable. Is this still the case 3 years later - or are the docs outdated? Quoted from article:https://www.revenuecat.com/docs/ios-subscription-offers“Since launch, Apple's in-app Offer Code redemption sheet has proven to be extremely unstable. For example, the sheet may not connect, may not dismiss after a successful redemption, and may not accept valid codes. Additionally, sandbox and TestFlight behavior has been seen to be inconsistent.A workaround may be to instead redirect customers to the App Store app to redeem codes as described below.”
Hi,I just migrated to the latest RevenueCat SDK on iOS (from 3 → 4). I also setup SearchAds attribution, but I only want to use the standard attribution (I’m not showing ATT prompt). I am using the latest iOS SDK (4.11.0) via cocoa pods. I noticed that on all iOS versions except 14.5, my app loads. On 14.5, it hangs after calling -enableAdServicesAttributionTokenCollection:- (instancetype)init { self = [super init]; if (self) { _purchases = [RCPurchases configureWithAPIKey:@"[MY API KEY HERE]"];#ifdef DEBUG RCPurchases.logLevel = RCLogLevelError; //RCLogLevelDebug#endif if (@available(iOS 14.3, macOS 11.1, macCatalyst 14.3, *)) { [_purchases.attribution enableAdServicesAttributionTokenCollection]; } _purchases.delegate = self; } return self;}Any ideas why this might be happening? I’m importing iAd, AdServices, and RevenueCat. It works 100% when I comment out that function call.Thanks!
Even though I have successfully made a purchase in my app, a page opens for me to pay again. When I close this page, it opens again and again and enters a loop. I thought this only happened in the simulator and I didn't care. But I did it on a real device and the result is the same, the payment page opens many times.
Hi everyone,I manage several white-label apps, and when I first set up RevenueCat, I bundled some apps into the same project—looking back, I realize that might not have been the best choice.Now I’m trying to dig into data like LTV, or conversion to paying users and others for individual apps, but it seems like I can only see this data at the project level. I can’t find a way to break it down by app, and I’m wondering if I’m missing something.A couple of questions:Is there a reason we can’t segment charts by app? Is there any workaround to this? Is there any way to move my apps into separate projects without losing historical data?I’d really appreciate any advice or insights from the community. Thanks so much for your help!
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.