Get help with your SDK implementation.
Recently active
Hello, Our app allows user’s to change their subscription, so that when their current subscription expires, the new subscription will start.I was looking for some data from the RC SDK that would indicate this upcoming change but I can’t find anything at all. The dashboard will show that a users `renewal preference` has changed, but the SDK doesn’t seem to have this information.I found this issue, which addressed the same topic, but the “answer” (not from an RC employee) was to just not handle that scenario… which as you can see from the last comment, isn’t great.Is there anyway we can get details of the subscription renewal change?
Hello, I am using the RevenueCat Paywall system. My application does not use compose, I use activity, fragment and xml system.I can use RevenueCat Paywall perfectly. Now I want to do A-B testing using the Experiments feature. I followed the document but I could not apply A-B testing.Let me explain what I did step by step:1. I made all the necessary installations for RevenueCat paywall and I was able to successfully display the paywall I designed by giving offerName as a parameter and purchases are working.2. I designed a new paywall and associated it with an offer.3. I made a configuration as I added in the visual from the Experiments section.4. I started Experiments.Result:A-B test was not applied. The paywall or offer I wanted is not coming. The default offer is constantly coming.I am sharing the code snippet I used and the configuration on the experiments page visually. Can you tell me where my mistake is or how I can solve it?Best wishes!Note: My app version corresponds to the vers
I wanted to go through an example and understand the current state of a subscriber. The dashboard has “Subscription expired 11 days ago” and my database still has the user marked with the subscription as active and entitled.The way I manage the user database record with entitlements is only via webhooks (I listen to them and grand and remove entitlements accordingly). I think I have some logic issues since in this example the record is not in sync. Example is for user ID: eL9WN4QjQpZgB36ZCPnGhuIC2cq1Customer History in the RC dashboard has these as last few events: My database has these records (event is central USA time): as you can see, the last events are a RENEWAL and then a CANCELLAION after 3 days (which is what my configured grace period is). I did not receive any “conclusion” event for this user. No BILLING_ISSUE, no EXPIRATION nothing like that.As you can see EXPIRATION came first and that is when I removed their entitlements. But then a RENEWAL came 8 days later so I added th
I know for web billing the user can access their customer portal on each email - What’s the recommended path for providing a “billing” screen in the app itself?Is the recommended path to simply use the purchases SDK and build a custom GUI or can we load in the customer center dynamically?If custom GUI, is the customer center link anywhere in an SDK response for things like getting invoices, receipts, etc.. might be good enough to simply have a “manage subscription” button that links out to you all. Thanks!
## Issue DescriptionWhen implementing RevenueCat UI (v7.x.x) in a Flutter application, I've encountered a consistent issue where `PaywallResult.cancelled` is always returned in iOS Sandbox testing, even when purchases are successfully completed. This affects both consumable purchases and subscriptions. In android works well. This issue is only with the Paywalls v2. With the v1 used to work correctly. ### Actual Behavior- Android: Works as expected, returning `PaywallResult.purchased` for successful purchases- iOS Sandbox: Always returns `PaywallResult.cancelled`, even though: - The purchase is successfully processed by RevenueCat - The entitlement/purchase is correctly reflected in RevenueCat dashboard - Customer info is properly updated I would like to know if there is any known solution for this or is related with the sandbox environment. Thanks!
same as reported here and no solution is provided in that thread:
Message:Hi RevenueCat team,Some of our Android users are encountering a fatal error when calling Purchases.getOfferings():PlatformException: PlatformException(error, There is no singleton instance. Make sure you configure Purchases before trying to get the default instance. More info here: https://errors.rev.cat/configuring-sdk, null, lb.f0: There is no singleton instance. Make sure you configure Purchases before trying to get the default instance. More info here: https://errors.rev.cat/configuring-sdk at com.revenuecat.purchases.Purchases$Companion.getSharedInstance(SourceFile:12) at com.revenuecat.purchases.hybridcommon.CommonKt.getOfferings(SourceFile:8) at com.revenuecat.purchases_flutter.PurchasesFlutterPlugin.getOfferings(SourceFile:5) ... ) This issue is happening sporadically in production, and the error implies that Purchases.configure() was not called — however, our code ensures that configuration is completed before any calls to getOfferings() are made.This may indicate a ra
Hi RevenueCat team,We're seeing a critical crash affecting some of our iOS users when calling Purchases.getOfferings(). The app terminates with the following fatal error:EXC_BREAKPOINT Fatal error > getOfferingsWithCompletionBlock: > PurchasesHybridCommon/CommonFunctionality.swift This is not just an error — it’s causing the app to crash and close immediately, making the app unusable for affected users.This issue appears to originate from RevenueCat's SDK internals and must be addressed as a top priority. Please investigate and provide a fix or workaround immediately. This is a production-blocking issue for iOS.Thanks.
Hi RevenueCat team,Some of our iOS users are getting the following error when calling Purchases.getOfferings():PlatformException: 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, {readableErrorCode: CONFIGURATION_ERROR, readable_error_code: CONFIGURATION_ERROR, storeError: {code: 1, domain: StoreKit.StoreKitError, message: Couldn’t communicate with a helper application.}, 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
Hi RevenueCat team,Some of our iOS users are encountering the following error when calling Purchases.getOfferings():PlatformException: PlatformException(10, A network error has occurred. The request timed out., {readable_error_code: NETWORK_ERROR, message: A network error has occurred. The request timed out., code: 10, underlyingErrorMessage: The request timed out., storeError: {message: The request timed out., code: -1001, domain: NSURLErrorDomain}, readableErrorCode: NETWORK_ERROR}, null) #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:648) #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:334) File "<asynchronous suspension>" #3 Purchases.getOfferings (package:purchases_flutter/purchases_flutter.dart:264) File "<asynchronous suspension>" This happens intermittently on iOS devices, even when the internet connection appears to be stable. The error seems to originate from the underlying NSURLErrorDomai
Hi RevenueCat team,Some of our Android users are experiencing the following error when calling Purchases.getOfferings():PlatformException: PlatformException(3, The device or user is not allowed to make the purchase., {code: 3, message: The device or user is not allowed to make the purchase., readableErrorCode: PurchaseNotAllowedError, readable_error_code: PurchaseNotAllowedError, underlyingErrorMessage: Billing is not available in this device. DebugMessage: Billing service unavailable on device.. ErrorCode: 3.}, null) #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:648) #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:334) File "<asynchronous suspension>" #3 Purchases.getOfferings (package:purchases_flutter/purchases_flutter.dart:264) This happens exclusively on Android devices, and the error message indicates that billing is not available. However, the affected users are running on standard Android devices
Hi RevenueCat team,Some of our Android users are getting the following error when calling Purchases.getOfferings():PlatformException: PlatformException(10, Error performing request., {code: 10, message: Error performing request., readableErrorCode: NetworkError, readable_error_code: NetworkError, underlyingErrorMessage: Failed to connect to api.revenuecat.com/3.82.170.40:443}, null) #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:648) #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:334) File "<asynchronous suspension>" #3 Purchases.getOfferings (package:purchases_flutter/purchases_flutter.dart:264) This is happening only on Android, and it's clearly a connectivity issue between the device and the RevenueCat API server.The devices are connected to the internet and other network operations succeed, so we need to know why this specific request to api.revenuecat.com is failing.Please investigate and resolve th
Hi RevenueCat team,Some of our Android users are encountering the following error when calling Purchases.getOfferings():PlatformException: PlatformException(3, The device or user is not allowed to make the purchase., {code: 3, message: The device or user is not allowed to make the purchase., readableErrorCode: PurchaseNotAllowedError, readable_error_code: PurchaseNotAllowedError, underlyingErrorMessage: Error when fetching products - DebugMessage: Billing Unavailable. ErrorCode: 3.}, null) #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:648) #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:334) File "<asynchronous suspension>" #3 Purchases.getOfferings (package:purchases_flutter/purchases_flutter.dart:264) This is happening exclusively on Android devices. The message suggests Billing Unavailable, but users are using valid Google Play accounts and devices. We're not sure why RevenueCat is failing to fetch pr
Hi RevenueCat team,Some of our Android users are encountering the following error when calling Purchases.getOfferings():PlatformException: PlatformException(10, Error performing request., {code: 10, message: Error performing request., readableErrorCode: NetworkError, readable_error_code: NetworkError, underlyingErrorMessage: thread interrupted}, null) #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:648) #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:334) File "<asynchronous suspension>" #3 Purchases.getOfferings (package:purchases_flutter/purchases_flutter.dart:264) File "<asynchronous suspension>" This is happening only on Android and appears to be triggered sporadically across different users. The underlyingErrorMessage: thread interrupted part is concerning — it’s unclear why this would happen under normal conditions.This issue is blocking access to offerings and needs to be addressed immediately
Hi RevenueCat team,Some of our Android users are intermittently experiencing the following error when calling Purchases.getOfferings():PlatformException: PlatformException(10, Error performing request., {code: 10, message: Error performing request., readableErrorCode: NetworkError, readable_error_code: NetworkError, underlyingErrorMessage: Unable to resolve host "api.revenuecat.com": No address associated with hostname}, null) #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:648) #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:334) File "<asynchronous suspension>" #3 Purchases.getOfferings (package:purchases_flutter/purchases_flutter.dart:264) This is affecting real users in production, and it’s blocking them from accessing any available offerings. The devices are connected to stable networks, and no other connectivity issues are present.Please investigate and provide a fix or actionable guidance. This need
Hi folks.I already have internal purchase logic in my app, and I’m trying to implement RevenueCat’s PaywallView to do A/B testing.My PaywallView presents this message: PaywallView has not been correctly initialized. purchasesAreCompletedBy is set to .myApp, and so the PaywallView must be initialized with a PerformPurchase and PerformRestore handler.Is there documentation on this requirement?
I am showing a PaywallViewController (iOS, UIKit) without a “Restore” button in my app (I am showing it in my own UI in a step before). Unfortunately, the “Continue” button now sits just at the top edge of the view which looks a bit unprofessional. I see no way to change this myself. Please see the attached screenshot (taken in the Catalyst version of our app). Thanks!
On Android devices, it appears fine; however, on iOS devices, it pushes the UI off the screen to the right. I have attached the Screen shot.
Hello everyone,When a user registers in my app, I create an account for them on the Revenue Cat platform with a POST call to this url https://api.revenuecat.com/v2/projects/projxxxxxx/customers. I ask for the creation of a new customer and I also ask for app_user_id RevenueCat to be the unique identifier that my user has in my app so that I can find him easily when he is in RC.When I go to “customers” in R C, my customer is there, with the app_user_id set to the unique identifier in the app. So so far so good!Except that when my user takes out a subscription on app, Revenue cat creates a new Revenue Cat identifier for him, whereas I want the customer to keep his app_user_id identical to the unique identifier in my app.
I’m testing family sharing on subscriptions and IAP in sand box. I have an IAP that unlocks a lifetime access to the app and if users that are in a family sharing group purchase it, other members of the group are able to access it via restore purchase. However, if a member subscribes to the monthly membership, they get access to the app through the lifetime IAP, but are also charged a monthly subscription. When they sign up for a subscription, it creates a new alias.I understand that sandbox environment can be wonky but I’d like to get an idea of the expected behavior in prod from those who have tested this previously. What’s the standard way for users to download a family shared app? You cant access Settings > Your Name > Family > Subscriptions with a sandbox account. Is it expected for users to be charged a monthly subscription even though they have access to a family shared IAP? Thank you!
Hello everyone :)I am trying to give different links for English and Local language for footer links at paywall.I could not find it.Can we add localized links for footer links Privacy Policy and Terms and Conditions at paywall?
Hello RevenueCat Team, I am currently working on integrating the RevenueCat REST API v2 into our backend systems. During testing in the sandbox environment, I’ve encountered an issue where the /subscriptions endpoint returns an empty items array, even customer object has valid entitlements in Sandbox. This behavior is not limited to subscriptions integrated via Stripe like the post “REST v2 subscriptions empty in sandbox”; it also occurs with subscriptions made through StoreKit. This issue has been previously discussed in the community before. However, the problem persists and significantly impacts our development workflow. The inability to retrieve sandbox subscription data via the v2 API hinders our ability to manage and verify user subscription statuses during testing. Consequently, we are compelled to rely on the deprecated v1 API for this functionality, which is not ideal for maintaining a modern and efficient codebase. We kindly request that the RevenueCat team consider extending
Background: My app stores user content. When it receives a TRANSFER webhook, it will move all owned content from the old account to the new account.On both IOS and Android, I get the expected behaviour when a logged in user restores a valid subscription: The entitlements are transferred to a the new account & a TRANSFER webhook is sent.The divergence comes when dealing with an expired subscription. IOSStepsCreate a subscription Cancel the subscription + wait for expiration Sign in on a different app account Press Restore purchasesOutcome: No entitlements in new app account, no TRANSFER web-hook sent AndroidStepsCreate a subscription Cancel the subscription + wait for expiration Sign in on a different app account Press Restore purchasesOutcome: No entitlements in new app account, TRANSFER web-hook is sent So for me, the Android case is wrong. Is there a reason for the inconsistency? Thanks,Jon
Hello,The steps I perform:1. Create a new user (the user appears in RevenueCat Dashboard).2. Grant entitlement to the user in the Dashboard.3. Run Purchases.restorePurchases() in the app (Flutter)4. Then Purchases.getCustomerInfo()The steps work perfectly in iOS: the customer info contains the entitlement.They doesn’t work on Android though. restorePurchase does not seem to account for the promo account given in the Dashboard: D/[Purchases] - DEBUG( 5926): ℹ️ Restoring purchasesW/[Purchases] - WARN( 5926): ⚠️ allowSharingPlayStoreAccount is set to false and restorePurchases has been called. This will 'alias' any app user id's sharing the same receipt. Are you sure you want to do this? More info here: https://errors.rev.cat/allowsSharingPlayStoreAccountD/[Purchases] - DEBUG( 5926): ℹ️ Querying purchase history for type subsE/libEGL ( 5926): called unimplemented OpenGL ES APID/EGL_emulation( 5926): app_time_stats: avg=1898.39ms min=4.90ms max=16965.74ms count=9D/[Purchases] - DEBUG( 592
I’ve implemented the RevenueCat SDK and tested the entire purchase journey using the TestFlight version of the app. Everything worked smoothly on iPhone (tested with different iPhones).However, my app was rejected, and upon reviewing the feedback and attached screenshot, I noticed the reviewers tested it on an iPad. I then tested the same TestFlight build on two iPads — both returned an error when calling getOfferings. The same code works correctly on iPhone but consistently falls into the catch block (at `….Purchases.getOfferings()) on iPad.SDK version: "@revenuecat/purchases-capacitor": "^9.2.1"Since it works on iPhone, we’re confident that the product identifiers and configurations are correct. We only test on real devices. StoreKit testing is not implemented, so simulator support is not expected and not needed. Tested devices: iPad (9th generation) – iPadOS 18.4.1 iPad (10th generation) – iPadOS 18.4.1 App Review test environment: iPad Air (5th generation) – iPadOS 18.4.1 In Ap
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.