Discussion and help from anything related to RevenueCat.
Recently active
EDIT: solved, user error
Something strange has been happening over this last week. Each user who starts a free trial has it automatically cancelled due to a billing error. Event data reported by RC contains "cancel_reason": "BILLING_ERROR".The app currently looks for billing issues (via billingIssueDetectedAt in RCEntitlementInfo) and guides the user to update their App Store billing. Beyond this, to prevent revenue loss, I’ve switched to a discounted offering without a free trial while I figure out what’s going on.For context, it’s an iOS app using Purchases v3.11.1 (although this is probably not an SDK issue).Any ideas as to what’s happening here?
As you can see below, my paywall sheet comes up with a stubborn back-navigation chevron, which is non-functional. I’m using SwiftUI and my app is a document-browser based app, which I have read causes a particularly sticky nav bar. I have a hacky way to hide it, if I want to also hide the close button as well, that relies on my black-background in the hero image.Any other ideas? .sheet(isPresented: $isShowingPaywall) { PaywallView(displayCloseButton: true) .tint(.black) // horrible hack to hide back chevron but loses dismiss button as well }
Hey Everyone, The Problem: Paywall looks great, is super easy to implement, BUT seems easy to bypassThe issue is when you runContentView() .presentPaywallIfNeeded(requiredEntitlementIdentifier: "standard")you get a great UI on the iOS paywall, but the user can swipe down and go to ContentView() for free, or press the ‘close button’ x in the upper right hand corner and get to the ContentView for free. This issue was raised here a few months ago, but there does not seem to be a solution yet. An Idea of Workaround, but it’s not there yetOne way I like to add logic goes like thisif subscriptionManager.isSubscribed || subscriptionManager.isOnIntroductoryOffer { ContentView() } else { PaywallView() //But seems to have no way to send this to ContentView }above you can see that I just to the logical check myself. But the issue then is that even if I call the PaywallView() itself, you do get th
My app requires a user account login before purchasing a subscription. It allows the account owner to create, edit and share content. I only have one subscription type & it’s required to create content. I will not allow family sharing of subscriptions. It’s important the content ownership is under the user account, this allows them to edit the content across platforms (Android, IOS, Web).My question is regarding the Restore Purchases option required on IOS. I see two scenarios here:Subscription is already associated with currently logged in user - no-op: I tell the user they’re already subscribed (the SDK Purchases object should already know that). Subscription was created in user account A, and they’re logged into user account B.For scenario 2, the only useful thing I could do is remove the content owned in account A and add it to account B. This could actually be useful for my app, if the user ever losses access to their original account A, I can tell them to create a new account
I am have flutter app(ios/android), usinng purchases-flutter 4.13.0(dev), 4.12.0(prod).The error appeared 4-5 days ago, it is in prod and dev. For android - this error does not appear every time but today very often. 4-5 days ago it was workingPlatformException(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)For iOS - I tried this code final purchaserInfo = await Purchases.getCustomerInfo();and it is never completedit is logs: [Purchases] - DEBUG: ℹ️ There are no requests currently running, starting request POST receipts[Purchases] - DEBUG: ℹ️ API request started: POST /v1/receipts[Purchases] - DEBUG: ℹ️ SKReceiptRefreshRequest finished[Purchases] - DEBUG: ℹ️ Loaded receipt from url file:///private/var/mobile/Containers/Data/Application/D1593594-6743-4414-BC41-E34FC5560BEE/StoreK
Hi team, Is there an example of a Revenuecat webhook endpoint that we can use in our backend php to fetch events data? we d'ont find a kind of information on documentation.We need a sample like this one (used on stripe) bellow : <?php// webhook.php \Stripe\Stripe::setApiKey('Your_Key'); $endpoint_secret = 'whsec_...'; $payload = @file_get_contents('php://input');$sig_header = $_SERVER['HTTP_STRIPE_SIGNATURE'];$event = null; try { $event = \Stripe\Webhook::constructEvent( $payload, $sig_header, $endpoint_secret );} catch(\UnexpectedValueException $e) { // Invalid payload echo '⚠️ Webhook error while parsing basic request.'; http_response_code(400); exit();} catch(\Stripe\Exception\SignatureVerificationException $e) { // Invalid signature echo '⚠️ Webhook error while validating signature.'; http_response_code(400); exit();} // Handle the eventswitch ($event->type) { case 'customer.subscription.created': // What to do break; case 'customer.subscriptio
In the app, I have an option to let the user change the language. This is due to my demographic not actually changing the language on their phone to match their native language.Due do this, the language itself is managed by my state system, rather than the localization of the phone or other resources. This is an issue, as there do not seem to be any options to change the localization of the paywall within the code.Will I have to ditch paywalls altogether? Or is there something I am not seeing here?
Our app is already live on the App Store. After setting up our in-app purchases (IAPs) for the first time in App Store Connect, we created a new release version and submitted it along with the IAPs for Apple’s review (with the publish setting set to manual).Our IAPs were approved last night, and our release’s status is now “Pending for Developer Release”, but when testing on RevenueCat, we are unable to fetch any offerings.Could this be due to the 24-hour waiting period, or might there be another reason?This is the example we used to test:https://github.com/RevenueCat/purchases-ios/tree/main/Examples/MagicWeatherSwiftUIThis is the error message we received:The operation couldn’t be completed. (RevenueCat.OfferingsManager.Error error 1.)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).This is the code we called:try await Purchases.shared
Im using the the new Paywall UI library for react native. I have created a paywall with a Spanish localized version. However, when testing the app on iOS with the default language set to Spanish I get the default paywall in English. I have not yet tested this on Android. Im using react native purchases and purchases-ui 7.16.1 and expo sdk 49
I have done all setup, my subscriptions are in Ready to Submit status. I have done the required configuration on revenucat as well. I tried it on my physical deviceBut still getting the below error: ERROR: 🍎‼️ Error fetching offerings - The operation couldn’t be completed. (RevenueCat.OfferingsManager.Error error 1.)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-empty2025-03-26 19:11:36.691266+0530 pbgo_app-Stage[97115:6434967] [error] ERROR: 😿‼️ 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-offering
The new paywall feature looks amazing! Is it possible to use with capacitor (I think not but wanted to verify) and when might it be available? Any suggestions of workarounds for the interim? Thanks!
Hi, we are trying to add a close button that has a top right alignment but couldn’t figure out the right configuration in the paywall v2 builder. We could only successfully put it on the top center but we can’t seem to figure out how to make it be placed on the right. With what components can we use to make this happen? Thanks!
I want to have some primer text before displaying the paywall, the text would change depending on whether a user has already used the trial.Given this scenario: User A logs in, starts trial and subscription, we have a hook to update our platform to reflect that the user is now premium, and then user A logs out of the app after a while.User B logs into the same device, isn’t premium so sees the primer The Google account has used the trial before, which seems to be reflected in the paywall but I don’t know how we are supposed to check that same state for our primer.This answersuggests using the entitlements, which does work but not for a new user. There is a suggestion at the bottom of that page to sync purchases but we don’t want to transfer purchasing from one user to another. Really I would just like to know what does the paywall check. Do I need to fetch all the offerings, and check all the packages to see whether the products have a freeTrial subscriptionOption?
Im encountering a nasty bug that is severely messing with the functionality of my app; once a user purchased at the end of the onboarding they immediately get routed back to the welcomeScreen which is the start of the homepage. I can’t find any errors whatsoever but I feel like it has anything to do with RC. ive also enabled the debug logs but im unable to find anything. Where am I supposed to see these logs when working with FF? Any clues on how to fix this? thank you!
Most of my offerings have same set of products.Considering I need to run multiple A/B tests involving metadata’s small change to test paywall copies and other small UI/UX changes.Which is the best way to handle multiple offerings in RevenueCat admin page?Should I delete unused offerings from admin panel when A/B test finished?Or maybe reuse offerings from previous A/B tests and update their metadata, but wondering if it will mess up original A/B test where it was used for?Are you planning to add some sort of offerings archiving to avoid them being selected, but still visible in charts without deleting them?Is it okay to have 20+ offerings at some time or even more? Already have 10 of them.
Hi,we are using webhooks for updating user profiles in our database. So far everything worked fine, but from today (or maybe yesterday) we can’t do this anymore for promotional “purchases” because the webhook event body is missing the app_id property. It is there for regular purchases.promotional:"api_version": "1.0", "event": { "aliases": [ "xxxxxxxxxxxxxxxx", "$RCAnonymousID: xxxxxxxx" ], "app_user_id": "xxxxxxxxxxxxxxxx",regular: "api_version": "1.0", "event": { "aliases": [ "$RCAnonymousID:xxxxxxxxxxxxxxxxxxxxxxxx" ], "app_id": "appd5b6xxxxxxxx", "app_user_id": "$xxxxxxxxxxxxxxxxxxxxxxxx",Is this intentional or a bug?Thanks!
We are building an Capacitor app that has both a mobile and and web components. For now, we are only planning on allowing customers to buy the subscriptions on mobile apps, but still need to provide the subscription level benefits to them when they are on the web. Each user has a user id. What options do we have for getting the customer info with their current entitlements on the web? Currently I dont have any web projects only ios and android. Thanks
I am facing an issue with product identifiers in RevenueCat across different platforms.In my app, I have the same product available on both the App Store and Google Play. While I have attached the same entitlement to both, the issue is that the identifiers are different, which is making it difficult to manage on both the backend and frontend. On the App Store, the identifier is correct. On Google Play, a base plan ID is automatically appended to the identifier. Because of this, I need to handle different identifiers separately in my backend and frontend, which is causing complexity. Since the entitlement is the same, purchases are working fine, but managing separate identifiers for the same product is not ideal.Additionally, I have mapped all products to the offering for both App Store and Google Play in RevenueCat.Could you suggest an efficient way to handle this issue?
I followed this guide while watching a YouTube video. I have enabled all the necessary settings, including “Google Play Android Developer API”, “Google Play Developer Reporting API”. Is there a solution to this problem? I'm new to this, so please explain in simple terms where to go and what to do.
Hello,I have an issue with android where the users should click the restore purchase button for the subscruption to be applied again, I use the built in RevenueCat Paywall.is there a way for the purchase to get restored without the user have to restore it if there is an update?Thanks.
I’m trying to answer the question using RevenueCat charts and data. At what price point is optimal for install to paying conversion that results in higher LTV?We done some A/B price testing, but not across all prices, and also had different prices at different types.I can look at retention charts and segment by Product ID (which we use to distinguish between pricing).But I can’t segment any conversion charts by product ID. So I can’t tell when and at what price we saw higher install to paying conversion, to determine what is the optimal price for conversion and revenue. Maybe I'm looking at this the wrong way. Any help is appreciated!
Hi!I get a platform exception when a user cancels the purchas of an in-app product. I cannot catch the exception. Physical device, product is correctly setup, afaik. Error:PlatformException (PlatformException(1, Purchase was cancelled., {code: 1, message: Purchase was cancelled., readableErrorCode: PurchaseCancelledError, readable_error_code: PurchaseCancelledError, underlyingErrorMessage: Error updating purchases. DebugMessage: . ErrorCode: USER_CANCELED., userCancelled: true}, null)) try { final customerInfo = await Purchases.purchasePackage(currentPackage!); // Check if the product was successfully purchased by verifying active subscriptions. if (customerInfo.activeSubscriptions.contains(revenueCatProduct)) { markAsPurchased(); } } on PlatformException catch (e) { bool isCancelled = false; if (e.details is Map) { final Map details = e.details as Map; if (details['userCancelled'] == true || (details['readableErrorCode']
As far as I understand, the onPurchaseError callback on the PaywallView gets called whenever any of these errors occur: https://www.revenuecat.com/docs/test-and-launch/errors#purchasing-errors. I’ve been testing this by canceling a purchase. But as far as I can tell nothing inside the function call is getting executed:onPurchaseError: (error) {log(“Hello World”);} If I look into my logs, I can see that the error was thrown correctly though: E/[Purchases] - ERROR( 4764): 🤖‼️ BillingWrapper purchases failed to update: DebugMessage: . ErrorCode: USER_CANCELED.nullE/[Purchases] - ERROR( 4764): 🤖‼️ PurchasesError(code=PurchaseCancelledError, underlyingErrorMessage=Error updating purchases. DebugMessage: . ErrorCode: USER_CANCELED., message='Purchase was cancelled.') I’m using:> purchases_flutter 8.6.1> purchases_ui_flutter 8.6.1 SIDE NOTE:Observations apply to both V1 and V2 paywalls.So far, all that I can only confidently say is that onPurchaseComplete and onRestoreComplete are wor
Hi there,I am very into this purchase-subscription-use-everywhere-thing. What I have read and learned so far:A user with his Apple ID is and a custom App User ID (so he is logged in to RC and can be identified across platforms) is purchasing a subscription. In my RC dashboard config for the app ‘Transferring purchases seen on multiple App User IDs’ is set to ‘Transfer to new App User ID’. So in case, if this user (still working with his Apple ID) is (been) logged out and logs in again using a different custom App User ID, the subscription will be transferred to this, and the last App User ID will loose the subscription. Right? The user has a second iOS device (let’s say an iPad). As long as he is using this device with the same Apple ID and the same custom App User ID, he can ‘restore purchases’ and can use the subscription. Right? Now let’s say he adds an Android device. Of course, this is not used with an Apple ID, but a Google ID. The user logs in to RC with his custom App User ID a
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.