Discussion and help from anything related to RevenueCat.
Recently active
My first app with subscriptions just went live!Are App Store purchases made with promo codes displayed in the RevenueCat dashboard?I see purchases for my new app, but I also sent out promo codes. When I click on the transaction details, it states that it is production environment and the takehome_percentage is 0.85.I do see a “offer_code” is null, but nothing else about if it is a promo code or not.If anyone could shed some light on the subject I would appreciate it.
When an account expires on my app/website, the user will still have access to read their data if they choose not to pay. Therefore, I need a close button on the web billing page. Right now it appears to only support hard paywalls.
Does revenue cat, display the statistics for paywall rate % (% of users that viewed the paywall)
Hello,The question is about Flutter SDK on iOS.I noticed the following behaviour for RevenueCatUI.presentPaywallIfNeeded and RevenueCatUI.presentPaywall:- If the app was in the background, and I call “await RevenueCatUI.presentPaywall(...)” right after the app is resumed, the call never returns (awaiting forever).- Everything works if I add 500-1000 ms delay after the app is resumed.Could someone explain why is this happening? How can I wait for the SDK to be ready to show the paywall without adding an explicite delay?I tried:- await Purchases.getCustomerInfo();- await Purchases.getProducts();- await Purchases.getOfferings();Nothing from this list helps, only the actual delay does.Thank you.
Hello,We have started using Revenue Cat to manage in-app purchases, but we are having trouble recovering purchases that were not made via RevenueCat on Android. We login the user via SDK using Purchases.sharedInstance.logInWith("our-custom-user-id"). We wait for a successful response and if the user is logged in for the first time, we call Purchases.sharedInstance.syncPurchases() to sync the purchases not made via RevenueCat. The problem is the "timeline" of events. See screenshot.The webhook for the purchase was sent with an anonymous user ID because an alias was not created at the time. We are unable to sync purchases on our backend with an anonymous user id. Since the "SUBSCRIBER_ALIAS" webhook is deprecated, we are unable to wait for this webhook and sync purchases after that. Please help. Do you have any solution for this?Thank you in advance for your reply.
Hi,How can I check if a user has canceled a subscription or trial?If a user has canceled a subscription, his status is active until its expiration date. It's the same with the trial period. Is it possible to determine it was canceled, but at the same time it is still valid? Thanks
Hello,url = f"https://api.revenuecat.com/v2/projects/{project_id}/customers/{customer_id}/active_entitlements"The above URL returns a list of active entitlements for my sandbox environment which is great - I noticed for some of the other endpoints there is an “environment” field which looks to toggle between sandbox/production - does the above endpoint have an equivalent ?Couldn’t find any reference on how to distinguish between the sandbox/production data for this particular endpoint - there was mention of their being a “sandbox” flag but I can’t seem to find it.Hope that makes sense!
Hi!The product (Flutter) I’m currently building has users both on a web app and in a mobile app.One use case I’m struggling with currently is that a user might buy a premium subscription from the web app through Stripe and then open the mobile app which might have cached the CustomerInfo object for at ~5 minutes.Due to the caching, the user will not immediately see the subscription in the app which is not ideal as it can cause confusion. What are the best practices to deal with something like this?Edit:I know about the invalidateCustomerInfoCache() function. I’m interested to know if there is a recommended way to use that function. Any help and tips are appreciated!
I am encountering the following errors while testing my app’s integration with the Amazon Store.😿‼️ PurchasesError(code=UnknownError, underlyingErrorMessage=Timeout error trying to get Amazon user data., message='Unknown error.')I have already implemented purchases using RevenueCat for Google Play and Apple, and everything works fine on those stores.However, when I try to connect to Amazon, I receive this error. I am testing with a user account that is a tester on LAT, using an Amazon Fire HD 8 (2022) with Amazon App Tester (with a loaded JSON configuration).Any ideas on what might be going wrong and how to resolve this? I'm stuck on this issue. The app is ready for the Amazon Appstore, but the subscription issue is blocking it from functioning properly. Flutter 3.29.0purchases_flutter: ^8.6.0Log:D/[Purchases] - DEBUG(12948): ℹ️ Debug logging enabledD/[Purchases] - DEBUG(12948): ℹ️ SDK Version - 8.13.0D/[Purchases] - DEBUG(12948): ℹ️ Package name …...D/[Purchases] - DEBUG(12948): 👤 I
Hey,I have an issue where, when a user cancels a lifetime subscription, it doesn't show up anywhere — not in Purchases.getCustomerInfo nor in the customer's history.I've set up Google and Apple server notifications, but that hasn't changed the situation.Is there any other way to track when a user requests a refund?
Hi there, we are building a simple POC to test In-App Purchases, both Subscriptions and In-App Purchases, for iOS and Android. We have successfully tested this on iOS, being able to purchases a Subscription via the app and also performing actions from the device System settings, e.g. to upgrade and/or cancel the test subscriptions, capturing the events via our webhook endpoint. This was developed and tested, using live reload from Angular/Capacitor, via Xcode with a real device connected via USB. I have to say that Apple, with XCode and TestFlight, really do provide a much better platform for developing and testing apps, which Google and Android could really learn from and this leads to our current issue, that being Android.It seems to a little more confusing, and troublesome with Google. We have followed the docs (Google and RevenueCat) and created a Closed track in the Play Console, in which we uploaded an initial release build and have defined a list of email addresses for our
Hello,I was wondering if you could provide additional guidance on handling anonymous IDs. We are following the recommendations for enforcing Custom App User IDs (as described here: RevenueCat Docs). However, we still frequently receive webhooks containing anonymous IDs.We determined that most of these cases occur from users resubscribing through the App Store/Play Store. Additionally, during the recent RevenueCat API outage, we noticed webhooks with anonymous IDs. From the RevenueCat dashboard, we observed that the Custom App User IDs were not associated with the anonymous IDs until several hours after the outage was resolved.I have a few questions regarding this:Backend Association – What is a reliable way for our backend to associate an anonymous user ID with our custom user ID? Client Access – Is there a way for the client to retrieve the anonymous ID assigned to a user? Ensuring Custom IDs – Do you have any additional best practices or guidance on preventing anonymous IDs from bein
I have the following code, but only the paywallViewControllerWasDismissed method is being called. Other PaywallViewControllerDelegate methods are not triggered. Any solution for this? import Foundationimport RevenueCatUIimport RevenueCatimport UIKit class RevenueCatManager: NSObject { static let shared = RevenueCatManager() private override init() {} func presentPaywall(from viewController: UIViewController, offeringID: String) { Purchases.shared.getOfferings { (offerings, error) in guard let offering = offerings?.offering(identifier: offeringID) else { print("⚠️ Error fetching offering with ID: \(offeringID) - \(error?.localizedDescription ?? "Unknown error")") return } DispatchQueue.main.async { let paywallVC = PaywallViewController(offering: offering) paywallVC.delegate = self paywallVC.modalPresentationStyle = .fullScreen viewController.p
I keep getting an error when trying to add a new iOS app. I’ve filled out all the fields in the "New App Store app" section and followed multiple guides, but the error persists. I just set everything up in App Store Connect — could it be that I need to wait for approval? Has anyone else encountered this issue?
I'm using getCustomerInfo on the splash screen to check the subscription status when the app is opened for the first time (where the cache is empty). However, I’ve noticed that getCustomerInfo sometimes takes 10-20 seconds to fetch data, which is too long for a smooth user experience.Since I’m not using a server-side solution, what are the best practices to speed up this process purely on the client side? Would pre-fetching, background loading, or specific configurations help reduce the delay?Any insights or recommendations would be greatly appreciated!
I am only using ios products currently. The information pulled is incorrect and there are multiple errors. For example, one product is a yearly subscription of $12.99, but the price is $11.88 and there are prices for monthly and weekly subscriptions. I can’t complete testing with the inaccurate data, but I have found no issues in the xcode files or apple store.
Hello everyone.Please help me figure out where to look. My app is built on Flutter Flow. I’ve finally reached the stage of releasing the paid version, which includes subscriptions for 1 month, 3 months, and 1 year.After completing all the necessary integrations and settings, I published the app on iOS in TestFlight mode. However, when I open the app on my phone via TestFlight, the subscription page is completely empty. When I check RevenueCat, it says that the product status is not found. I’ve checked everything I could, and now I have no idea where to look for the error. Please advise me on what to do.App on iPhonescreen via flutterflowNot found status
Hello, We are seeing a weird behavior for some of our users: after purchasing a subscription they are not premium. To actually become premium, they need to do a restore of the purchase. Do you know what could be the issue? Thanks!
When using purchases_ui_flutter I get the following errors when trying to run a debug build:Could not resolve all files for configuration ':app:debugRuntimeClasspath'. > Failed to transform lifecycle-livedata-core-2.8.3.aar (androidx.lifecycle:lifecycle-livedata-core:2.8.3) to match attributes {artifactType=android-dex, asm-transformed-variant=NONE, dexing-enable-desugaring=true, dexing-enable-jacoco-instrumentation=false, dexing-is-debuggable=true, dexing-min-sdk=26, org.gradle.category=library, org.gradle.dependency.bundling=external, org.gradle.libraryelements=aar, org.gradle.status=release, org.gradle.usage=java-runtime}. > Execution failed for DexingNoClasspathTransform: C:\Users\porta\.gradle\caches\8.9\transforms\02266809379a8c0cb61126b0d331cfeb\transformed\lifecycle-livedata-core-2.8.3-runtime.jar. > Error while dexing. > Failed to transform constraintlayout-core-1.1.0.jar (androidx.constraintlayout:constraintlayout-core:1.1.0) to match attributes {
I’m trying to use v2 API but the https://api.revenuecat.com/v2/projects/{project_id}/customers endpoint it’s failing with “no_resource_found” error.Already enabled everything on API Keys settings (nothing to enable on customer permissions, just metrics and projects).Also can’t find a way to add customer_information:customers:read permission. Any clues?
I have tried to hit the https://api.revenuecat.com/v1/subscribers/{userId} endpoint and I receive data back, as the https://www.revenuecat.com/reference/subscribers api docs show: Get OR create a subscriberIf the provided app_user_id doesn't exists, a new subscriber will be created with the App User Id. However, when I go to my customers page I do not see that customer having been created. How can I achieve this? What I’m ultimately trying to achieve is to provide a user with access to my app without them needing to make a purchase, however in order to set a promotional entitlement it would appear the user needs to already be created.Any ideas?
Just testing Paywalls v2 on react-native. iOS works perfectly, Android is showing the fallback - standard paywall. "react-native-purchases": "^8.7.0", "react-native-purchases-ui": "^8.7.0",react-native: ^0.76.1The logs don’t seem to show any errors: ℹ️ Debug logging enabledℹ️ SDK Version - 8.13.0ℹ️ Package name - XXXXXXXXXXXXXXXX👤 Initial App User ID - nullℹ️ Purchases configured with response verification: DISABLED👤 Identifying App User ID: $RCAnonymousID:XXXXXXXXXXXXXXXXℹ️ Deleting old synced subscriber attributes that don't belong to $RCAnonymousID:XXXXXXXXXXXXXXXXℹ️ Listener setℹ️ Sending latest CustomerInfo to listener.ℹ️ setAttributes calledRetrieving customer info with policy: CACHED_OR_FETCHEDℹ️ Vending CustomerInfo from cache.ℹ️ Checking if cache is stale AppInBackground trueℹ️ Starting connection for com.android.billingclient.api.BillingClientImpl@aXXXXXXXℹ️ App foregroundedℹ️ CustomerInfo cache is stale, updating from network in foreground.Retrieving customer info wi
Error purchasing: Error Domain=RevenueCat.ErrorCode Code=8 "The receipt is not valid. The purchased product was missing in the receipt. This is typically due to a bug in StoreKit." UserInfo={NSLocalizedDescription=The receipt is not valid. The purchased product was missing in the receipt. This is typically due to a bug in StoreKit., rc_backend_error_code=7712, rc_response_status_code=422, NSUnderlyingError=0x301610a80 {Error Domain=RevenueCat.BackendErrorCode Code=7712 "The purchased product was missing in the receipt. This is typically due to a bug in StoreKit." UserInfo={NSLocalizedDescription=The purchased product was missing in the receipt. This is typically due to a bug in StoreKit., rc_backend_error_code=7712}}, source_function=parseUnsuccessfulResponse(), source_file=RevenueCat/HTTPClient.swift:890, readable_error_code=INVALID_RECEIPT}Until a couple of days back Lifetime plan used to work. Not sure what happened since 2 days I am unable to purchase this is sandbox mode - I am u
I went into my app store connect “sales” dashboard and noticed there are extra sales reported almost daily which arent being recorded by revenue cat. Neither do I see any webhook event being called nor any record present on the dashboard. The product id is same so I don’t get how its being missed. Around 80% of the subscriptions are still being recorded. Am I missing something? Future<(bool, String?)> purchasePackage({required final Package package}) async { return await executeWithCatch(() async { await Purchases.purchasePackage(package); return (true, null); }); } loadingEnter(); final recordSuccessError = await ref.read( revenueCatOfferingProvider.notifier ).purchasePackage( package: availablePackages.elementAt(ref.read(paywallCardIndexProvider)) );
I recently launched a monthly and annual subscription for my app. Both don’t have a free trial, because the product already has a built in free trial (it’s a golf app, users get 5 free rounds a year and then can do either subscription to get unlimited rounds).I’d like to offer promo codes to new users that either give them a free trial or a discount.I built something using offer codes, but tbh offer codes are just so janky on apple’s end that the experience is pretty rough. I’d really love to use introductory offers and build something like so1) I have my own promo code table in my backend that maps a promo code to a SKProductDiscount id2) By default on my paywall screen I only show my products (no introductory offers)3) Users can enter a promo code and if it’s valid, the endpoint will return the SKProductDiscount id4) If the id matches an introductory offer of one of the products, I either update the UI or just trigger the purchase(package:discount:) call automaticallyI know this flow
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.