Discussion and help from anything related to RevenueCat.
Recently active
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
I am using React Native Expo. When I test the purchase in the emulator, I encounter the following issue:Error 2: There was a problem with the store.It can’t load the paywall.I am using paywallHowever, when I add my Gmail ID to the emulator, it works fine.But Google Play Store rejected it.How to fix it to approve on store.Below are the versions I used:"react-native-purchases": "^8.5.3" "react-native-purchases-ui": "^8.5.3" "react-native": "0.76.5" "expo": "^52.0.19"
We've recently upgraded to RevenueCat SDK 8.6.1 in our React Native app and noticed a change in how the paywall events are triggered, for both our old Paywall v1 and new Paywall v2.Previously, when a user subscribed, the onPurchaseCompleted method was called as expected. However, in the latest version, users who start a trial now first trigger onPurchaseStarted and then onDismiss, without onPurchaseCompleted being called.Here’s our implementation: const handlePurchaseStarted = useCallback(({ packageBeingPurchased }: { packageBeingPurchased: PurchasesPackage }) => { posthog.capture("onboarding_paywall_purchase_started", { packageIdentifier: packageBeingPurchased.identifier, });}, [posthog]);const handlePurchaseCompleted = useCallback(async ({ storeTransaction }: { storeTransaction: PurchasesStoreTransaction }) => { posthog.capture("onboarding_paywall_purchase_completed", { transactionId: storeTransaction.transactionIdentifier, productIdentifier: storeTransaction.produc
Hi Everyone,Just a question on subscriptions. While testing on both ios and android using the same user identifier, i came across a problem ( I think...).If i start a subscription on an ios device, then log into the app on an Android device, will i need to have a seperate subscription for that device? Michael
Sorry if it was asked before, I searched but couldn’t find anything :(What is the best way to calculate the price for annual subscription per month/week? I want to show user, how much he/she will pay for an annual subscription each month or week.An app already implementing this, is Snapchat. I checked all over revenuecat documentation but didn’t find this feature.
i did all the steps mentioned in the documentation and im getting ? Could not validate subscriptions API permissions ? Could not validate inappproducts API permissions ? Could not validate monetization API permissionsI added the package name field from my project build file , but i didnt upload the app to play console , is that an important step to fix those checkmarks?
I’m encountering an issue where payments made using a slow test card are eventually refunded because they aren’t acknowledged in time. Environment:Google Sandbox environment and slow test card Android SDK 8.11.0 Real-time Developer Notifications have been configured as described hereSTR:Purchase a non-consumable (lifetime subscription) using a slow test card While the transaction remains pending, close the app and wait approximately 7 minutes Reopen the appExpected Result: The user has the non-consumable (lifetime subscription), and the payment completes successfullyActual Result: The user does not have the non-consumable (lifetime subscription), and the payment is refunded. Also, there is an email from Google indicating the purchase was cancelled due to lack of acknowledgment:This test purchase was cancelled because it was not acknowledged. You should ensure that all purchases are acknowledged so that they are not subject to refunds. For more information, see https://developer.android
I am encountering a packaging error in Xcode when trying to build my Unity project targeting VisionOS. This seems to be related to this question: However, the post was closed and I couldn’t find a definitive answer on whether this issue was resolved by now. I am on the latest RevenueCat SDK for Unity version 7.5.3.Thanks!
We have developed an app that we want to offer as a white-label solution to different partners in various markets. Each partner provides their own content, while we handle the development, updates, and maintenance. Revenue is shared based on a pre-agreed split from the subscriptions.From what I’ve read online, it is recommended to create a separate Play Store and Apple Developer account for each app variant. This helps prevent issues where a warning or removal of one app could impact others. Additionally, it is often suggested to use separate payment details for each app otherwise all the developer accounts will be linked to the same credit card information.My questions are:Does this mean we need to open a separate bank account for each app, or is there a smarter way to receive all payments in a single account? Are there best practices to streamline this process? A potential benefit of separate accounts and payments is that each app might remain eligible for the Small Developer Program
I’ve implemented Customer Center (works fine on iOS). On Android the dark mode doesn’t work properly. Using default color settings in the Customer Center Appearance config. "react-native-purchases": "^8.7.0","react-native-purchases-ui": "^8.7.0"
Hello! We have an integration from RevenueCat to Braze to capture Subscription Events. These events are flowing into Braze as Custom Events, however they should be considered Braze Purchase Events. Does anyone have any guidance on how to make this happen? We are using the default event names in the the Braze integration setup as shown here in RevenueCat.According to both the RevenueCat and Braze Documentation, if the event has currency/revenue it should be recorded as a purchase event, specifically initial_purchase_event and renewal_event. https://docs.revenuecat.com/docs/braze https://www.braze.com/docs/partners/data_and_infrastructure_agility/payments/revenuecat/#step-1-configure-braze-settings-in-revenuecatThe logging of Purchase Events (vs just Custom Events) is important because it allows us to leverage certain Braze features, only available for purchase events as shown here.Here is an example of initial_purchase_event being logged in Braze as Custom Events vs Purchase Events e
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.