Get help with your SDK implementation.
Recently active
Hey, I am getting default Paywall on Android using Kotlin Multiplatform (latest version 1.7.7+13.29.1)The errors on the logs are the followingMissing string localization for property with id: '5-cMAYlyz8', for locale: 'en_US'. Displaying default template due to validation errors. Could not process value for variable 'sub_offer_duration' for package '$rc_annual'. Please check that the product for that package matches the requirements for that variable. Defaulting to empty string. Could not process value for variable 'sub_offer_duration' for package '$rc_monthly'. Please check that the product for that package matches the requirements for that variable. Defaulting to empty string.I tried seeing in other posts that could be something in localization files, I changed many times the strings and nothing worked. Any clues?
Hi all, i’m getting this error just when i open up my flutter application in dev mode inside my android emulator: D/[Purchases] - DEBUG(13399): Retrieving customer info with policy: CACHED_OR_FETCHEDD/[Purchases] - DEBUG(13399): ℹ️ Vending CustomerInfo from cache.E/[Purchases] - ERROR(13399): Error deserializing subscription information. The input is not a SubscriptionInfoE/[Purchases] - ERROR(13399): kotlinx.serialization.MissingFieldException: Field 'product_plan_identifier' is required for type with serial name 'com.revenuecat.purchases.common.responses.SubscriptionInfoResponse', but it was missing at path: $E/[Purchases] - ERROR(13399): at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableValue(StreamingJsonDecoder.kt:93)E/[Purchases] - ERROR(13399): at kotlinx.serialization.json.Json.decodeFromString(Json.kt:107)E/[Purchases] - ERROR(13399): at com.revenuecat.purchases.common.CustomerInfoFactory.parseSubscriptionInfos(CustomerInfoFactory.kt:161)E/[Purch
Is there any way to show a component conditionally?Imagine that your app offers three different plans, and you want to display a list of features based on the selected plan. How can we achieve that?As far as I know, this is currently not possible. It's not possible to hide or show content based on the selected product.Is there any plan to support this kind of feature?
Subject: IllegalStateException in Paywall UI Composition (Android)Description:We're experiencing intermittent crashes when launching the paywall with error:"Unsupported concurrent change during composition". Steps to Reproduce:1. Call Purchases.sharedInstance.getOfferings()2. Launch paywall using PaywallActivityLauncher3. Crash occurs randomly during UI compositionEnvironment:- RevenueCat SDK: 8.14.0- Compose: 1.7.8- Device: Pixel 6 (API 34)Additional Info:- Same code works in another app- Crash occurs even with 200ms delay before launchRequest:Can you confirm if this is a known issue? Are there thread-safety guarantees for Paywall UI?
The last thing that I see in logs from RevenueCat is:`CustomerInfo cache is stale, updating from network in foreground.`Full log attached. SDK version: 5.21.0 (iOS)purchases_flutter: ^8.7.3purchases_ui_flutter: ^8.7.3iOS version 18.4.1, not simulator. Not reproducible on all devices only on some.No code was changed, old version of the app stopped working but worked previously.This line `await RevenueCatUI.presentPaywallIfNeeded(value.entitlementId);` never finished. Waited 5+ minutes. No timeouts or other errors.
I am testing out web paywall buttons in Revenuecat Paywalls. While testing out the flow in sandbox url, I get an Error 16, this is the URL for paywall https://pay.rev.cat/sandbox/rzncmmyjvdmgqpaq/123I saw a similar question but here the user was trying to purchase production products while stripe was in test mode, but in my case stripe is not in test mode. I followed this video about web paywall buttons https://www.youtube.com/watch?v=XF9cbvyiK48 and didn’t see him do any special config to get the sandbox paywall working
Hi all,In light of the recent court ruling against Apple taking the 30% cut in the US, I decided to try out the Web Paywall button that RC recently introduced. However, when creating the paywall after creating the web offering, I’m seeing this red alert when I make the button option to navigate to a web paywall. Also noticing that in my code (using React Native + Expo), when showing the Paywall with `RevenueCatUI.Paywall` and my new offering that has the web billing option (along with iOS), the paywall screen errors out and falls back to the default paywall. If I switch out the paywall button option from “Web Paywall” to something like “URL”, I no longer see this issue. Is this related to how I’m configuring web billing in my React Native app? I’m currently using react-native-purchases to configure my iOS and Android SDK for purchases, but do I need to do something similar to ensure the web paywall button works as expected?I’m also using my own custom app user IDs to identify users. Wo
Just a heads-up for anyone working with Paywall v2 in RevenueCat:If you add an image component to your paywall but don't select an actual image, the paywall will break at runtime. This can lead to unexpected errors or fallback behavior.Please make sure to always select an image when adding the image component.@RevenueCat team — would appreciate it if this could be fixed soon 🙏
Hello,I have created a custom Paywall V2 for my offerings and I added a text component with this content:First {{ product.offer_period_with_unit }} free, then {{ product.price_per_period }}. Cancel anytime. The variable {{ product.price_per_period }} is bold while the rest of the content is Regular. The text displays correctly in the preview but in the TestFlight build the variables appears as **{{ product.price_per_period }}**. Could anyone please point me in the right direction to fix this?Thank you in advance. [Screenshot from preview] [Screenshot from TestFlight build]
Is it possible to end a free trial and offer user to upgrade to a paying subscription?I’m working on a VPN app where I would like to offer limited bandwidth for trial users. If they use it before trial ends I want to offer them to convert earlier.This question was asked for iOS sdk, however iOS is a different market.I haven’t found any limitations from Google side to offer a limited functionality for trial period as long as it is clearly described on the subscription page.
What does “Error 12 Received malformed response from the backend.” mean when running this Flutter code?CustomerInfo? customerInfo = await Purchases.getCustomerInfo();How can I debug/fix this?Note that I am only seeing this in iOS.
I use revenuecat web sdk, my code: const {customerInfo} = await Purchases.getSharedInstance().purchase({ rcPackage: offerings.current.annual, customerEmail: customerEmail, htmlTarget: document.getElementById('purchase-button'),});Is there a way to make Apple Pay the default payment method?So that this tab opens immediately:
Hi! I created a custom paywall, published it, but the correct version is displayed only if the English localization is installed, in other languages the default paywall is displayed There is localization in the application, I also added localization in the paywall constructor The problem appeared today, before that everything worked correctly
So it has been a couple of days since I launched an app and today I got a chance to get my friend to try it out. He even purchased it as it was solving his problem. Then I checked both AppStore Connect Analytics as well as Sales Reports, even the Revenuecat Dashboard - none of these show the actual purchase. Is this info realtime or does it take time to reflect? And just to be sure, I checked with him he mentioned the pro features are unlocked as well which means the purchase has gone through.
I am using the following code in RN to determine if a user is subscribed: const customerInfo = await Purchases.getCustomerInfo(); const isActive = Object.entries(customerInfo.entitlements.active).length > 0; I have received multiple emails recently about people saying they are subscribed but being prompted to subscribe again. No code has changed in this regard. I’ve received emails from iOS and Android users. Is there a better check or a bug in the SDK? The above code is run when the app boots and sets a global session state. It seems to have worked well for a year+.
I’ve see this asked before both in terms of subscription price and in-app purchase price. It seems the only way to the current subscription price in the local currency is to get that information from the webhook. This seems completely against the core value proposition of Revenuecat as a source of record for in-app payments. Why don’t you guys actually fix your apis? Is this product still under active development? It seems the client sdks rely on the v1 REST api and the v2 REST api has been abandoned. Please clarify what’s going on and give a firm roadmap of when you expect to fill out the v2 api.
I’m sometimes seeing that the initial view of the RC Paywall or calling `Purchases.shared.customerInfo()` can be super slow - sometimes over 90 seconds. This even happens after I’ve loaded the offerings successfully.For Paywalls, this results in the view showing the ‘loading’ screen (where it has the skeleton of a paywall, with the ‘shine’ reflecting over the top) for an extended period of time. For calling `customerInfo()`, it means my app takes a significant amount of time before the function returns a value, or it means I don’t get any values from the `customerInfoStream` for that same duration after app launch.As mentioned, this happens even if I call `Purchases.shared.offerings()`, which always seems to return quickly.This seems to only be a problem on the first launch of the app, and it mainly seems to be an issue when running in the simulator - running from Xcode onto a real device seems to be ok, although this has me nervous. Primarily, I want to know if this behavior is exp
Hi team, This issue has been there for over week and I tried all possible solutions based on my search and asking around, the in-app one-time purchase flow seems to work absolutely fine if the app is installed on my device through XCode Build process or even in simulator but when installed through Testflight, it shows “No Packages Available”. This is my first app so it is getting even tricker, and just a few hours ago Apple rejected for the same reason saying in-app purchase is not loading. Because it shows “No Packages Available”, in “Upgrade Now” button is not visible. I checked the Revenuecat details as well as Apple Store Connect details and I see it seems to be correct. Any help please?
Hi team,I’d like to know how I can control which offers are shown on the paywall, depending on my own logic.Specifically:• On Google Play, if I create an offer with the eligibility set to “Developer Determined” and tag it with something like offerX, how can I make sure that the paywall only shows that specific offer if I choose to, based on logic in my code?• On iOS, if I create a promotional offer, is it possible to display the paywall with that promo shown as “redeemed” (active) or not, also based on code logic?In other words, I’d like to programmatically control which prices and offers are shown on the paywall: either the standard prices or the prices from a specific promotional or introductory offer I’ve created and selected.Is this currently supported using your Paywall API / SDK, or do I need to build a custom paywall to have that level of control?Thanks in advance! Best regards,David
Hello, I need help. My paywallscreen does not generate the Apple Store Connect purchase receipt in the Testflight environment and it is hindering the approval of my application on Apple. I thought it would be because the signature was in review status, but Apple support informed that the status is only approved when the application has the approved binary following the guidelines. However, our binary will never be approved because it does not generate the Revenue Cat receipt. What can we do? I need urgent support because I am thinking of removing the Revenue Cat implementation to resolve this error as soon as possible. And the following error appears: 'Unable to complete the purchase. Product ID not mapped'
Hi community,I’m stuck with the subscription product change before expiration. How to implement it in my android app (preferably in java)? All other operations are well executed through the paywall, except the product change. Unfortunately, it charges the new chosen plan at full price (instead a calculated pro rata up to the expiration date) and does not cancel the prior one. I asked to chatGPT, but there were a lot of issues with their suggested codes. I gave up with AI after more than 6 hours trying their codes. Each of their corrections generate new issues.Is there someone here who can help me?Ben
I have two views in my app: HomeView and ResultsView.Both of them have a navigation bar button which opens Paywall using fullscreencover. Paywall uses RevenueCat PaywallFooter. Now when purchasing from HomeView onPurchaseCompleted is called, however when we purchase via ResultsView onPurchaseCompleted is never called even though purchase goes through.Im guessing it has something to do with the fact that ResultsView is further down the Navigation Stack. But its super odd.
I recently realized I can use paywalls for consumables, the token packs in my game, which is great. But I can’t get the ideal config I’d like. My current home grown store has a buy button for each pack which I find more intuitive in this case than selecting a pack and one buy button for the whole group. I think that works great for subscriptions/lifetime where you just want one option, they all do the same thing, it’s just the terms that are different. In my paywall you can hit the buy button next to each pack or tap on the packs image (which would also be nice but would be fine if I couldn’t do that). As far as I can tell this isn’t possible but just making sure. If not would be great to have this. Attached is a screen of what my home grown paywall looks like. Additionally I have a badge showing % off compared to the base pack, I haven’t tried to generate that with the current tools, I’m not sure if it’s possible.. of course I can bake it into the images but ideally it’s dynamic a
Similar post https://stackoverflow.com/questions/72245004/add-an-offer-to-an-already-existing-user-subscription-in-my-android-app-google We offer a monthly subscription and want to incentivize users who attempt to cancel by presenting them with a discounted renewal of the same plan. We use a developer-determined offer for the same monthly subscription, applying it to replace their existing subscription.And trying to apply offer like this. /// switch subscription Future<CustomerInfo> switchToOffer(SubscriptionOption option, String oldProductIdentifier) async { return Purchases.purchaseSubscriptionOption( option, googleProductChangeInfo: GoogleProductChangeInfo( oldProductIdentifier, prorationMode: GoogleProrationMode.deferred, ), ); }While attempting this switch, the store returns an error: “Something went wrong on our end. Please try again”I am trying to figure out whether this approach is even possible, and—if it is—what we might be doing i
Hello everyone,We recently launched a new paywall experiment designed to display our updated v2 paywalls. However, a subset of users were shown the legacy v1 paywall—which still advertises a trial we’ve discontinued—and were subsequently billed during what should have been their free trial. In an effort to stem support ticket volume amid our active marketing campaign, we removed the v1 paywall entirely. Now, we’re seeing users presented with a paywall configuration that doesn’t even exist in our dashboard (see attached image). Has anyone encountered this behavior on React Native with RevenueCat’s new v2 paywalls? We’d greatly appreciate any insights or urgent fixes, as this issue is impacting our current marketing efforts.We’re on:expo 52.0.36react-native-purchases 8.9.1react-native-purchases-ui 8.9.1react-native 0.76.7 const handlePurchaseStarted = useCallback(({ packageBeingPurchased }: { packageBeingPurchased: PurchasesPackage }) => { posthog.capture("onboarding_paywall_purchase
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.