Discussion and help from anything related to RevenueCat.
Recently active
Hi there,We have been using RevenueCat for our subscriptions since November last year, and have several internal users on lifetime memberships.Just this morning, several of our lifetime users (but not all) have been having issues. Their active entitlements are returning as existing, which is correct, but for some reason it is returning some as a trial period type (I think) because in the app it is detecting their trial as being expired, which is only does if the entitlement is period type trial and the expiry date is passed. This only happened since this morning, and it only happens for some users. Is there perhaps an issue going on with such entitlements? As soon as I revoke and re-add the lifetime membership for these users it works for them as expected.Thanks in advance for any help!
I’m trying to test my app before sending it out for beta in TestFlight. I need to make sure the paywall works properly, but there seems to be an issue.I built my app in Flutterflow. The way I have things set up:A user can add one project and do whatever they want with that project If they try to add more than one project (numProjects !=0), I trigger the Revenuecat “Paywall” action, providing the entitlement ID I then have forking logic that checks if the user has that entitlement If the user has the entitlement, they should be able to move forward and add a project without interruption If the user doesn’t have the entitlement, they should see the paywall component I builtBut I’m testing in my local environment (on my iPhone via XCode) with a Sandbox user, and the paywall component displays every single time, even though I can see in Revenuecat that this user has the entitlement. The first time I went through the flow, I was able to make the purchase with the Sandbox user, and I see the
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
Apple has appealed, but for the moment out-of-app purchases seem to be allowed in the US. From the updated App Store terms:3.1.3 Other Purchase Methods: The following apps may use purchase methods other than in-app purchase. Apps in this section cannot, within the app, encourage users to use a purchasing method other than in-app purchase, except for apps on the United States storefront … Fantastic news, at least on the surface. I’m holding off until we see how using external payments affect search placement. My app is new and I need user numbers more than $$, so I’m going to stick with App Store payments for the moment.WDYT? Are you considering switching your iOS app over to web payments? Let us know how it goes!And if the RevCat team has any guidance here, I’d love to see another blog post like this one about the earlier ruling. (Thanks!)
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.
Hi, is there a way to not show text depending on if introductory offer is selected?In my purchase button when introductory offer is selected I’m showing a stack of two text elements, and when no introductory offer is selected I want to show only one text element.Currently I can only set the second text element to be empty with font size of 1, but it still occupies space, and the ‘continue’ element is not centered. When I set the font size to 0, it takes even more space. introductory offerno introductory offer (in prod, continue is not centered)purchase buttonbottom text element
Hi RevenueCat team, I’m trying to delete a product from our project, but I’m seeing the following error: “There are transactions in the system using this product.” The product ID in question is: com.predictwind.AnchorAlert.12months This product: Is not attached to any entitlement Is not included in any offering Was likely used for testing or was previously active but is no longer in use Since I don’t have any current references to this product, I’d like to either: Remove it completely from our dashboard, or Get a list of app_user_ids or transactions still tied to it so I can understand what’s preventing deletion. Can you assist with identifying what’s blocking deletion or help remove this product if it’s no longer active? Thanks in advance,
Hi!We see that on iOS 18.4 was increased error rate. This problem is on StoreKit 2 and StoreKit 1.Description of the error on iOS 18.4 is “The operation couldn’t be completed. (StoreKit.InvalidRequestError error 1.)” I found this error in new API: https://developer.apple.com/documentation/storekit/invalidrequesterrorDo you have the same problem? How you handle it or maybe you added any fix?Thank you!
I'm building a Flutter mobile app that uses RevenueCat with anonymous user IDs — there is no authentication or login system.On first app launch, I store the user's anonymous appUserID securely. If the user makes a purchase, I save their credit balance and subscription status in Firebase, keyed by this RevenueCat ID. I also call setAttributes to store this ID (e.g. firebase_user_id) as a RevenueCat customer attribute.Now, my question is:If the user uninstalls the app or switches to a new device (but uses the same Apple ID or Google Play account), and then taps restorePurchases() (which creates a new anonymous App User ID), will the customer attributes from the original App User ID be automatically synced and transferred to the new user?I would like to rely on that attribute (e.g. firebase_user_id) to reconnect the user with their Firebase data — without requiring login or using a custom App User ID.Alternatively:Is there any way to access the original App User ID (i.e. the ID that Reven
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,when I look at the charts I have a “Proceeds” and “Transactions” row for every product. If I divide proceeds by transactions I get a per-unit proceeds value of 11 up to almost 17 USD. (for an in-app purchase for 22 USD) Why is that? Should that not be consistent?Of course there can be some currency variations but they can’t be so big that 14.28 € (proceeds from Apple for a purchase of 19.99 € in Germany / small business) is 11.50 USD, which would amount to more than 4 € difference.I checked very thoroughly and could not find any proceeds number per unit that would come close to the 14,28 € from Apple. I assume the numbers I get from the charts are correct and they seem to match what we get from Apple & Google, I just need to understand why this seems to vary so much every day. Thanks!
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
Hello, this is a follow up on a problem we have on iPhone 7 that is still unresolved: It’s been over 4 months that the issue has been escalated to the engineering team and the issue still persists. Can-we have a status update?
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 🙏
I’ve setup a License Tester as myself to test the subscription system.Paywall is displaying and it goes through the motion and confirms the subscription has been successful, and checking my “Payments and subscriptions” in Playstore showed Active.This was not displaying in the above dashboard, I’ve cancelled it a few times just to test if a cancellation would appear, but nothing.I’ve also noticed some errors in the Cloud API for the Android Developer API, I can’t see the error exactly but I’ve provided a screen of what appears to be potentially causing the error.Any assistance in finding a resolution would be great - thank you!
When I tried to set the Google Developer Notifications Topic ID, I noticed that the project shown in the selector below was incorrect.I suspect this happened because I accidentally uploaded the wrong Service Account Credentials JSON.As a result, the project path displayed in the dropdown menu is clearly different from the GCP project I intended to use.I have already re-downloaded the correct Credentials JSON and uploaded it to RevenueCat,but the Google Developer Notification Topic below still shows the wrong project path.How can I resolve this? (The new JSON uploaded and approved) The path projects/devsparkslab3... is pointing to the previously uploaded incorrect Credentials JSON, not the expected one.
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.
Hello,I wanted to try to create a Paywall V2 for one of my Offering (I have already a V1 configured) but on the Editor I can’t select any Offering in the Paywall component as you can see here :I have also tried to duplicate one of my offering, but anyway it doesn’t show up.Is it a bug or did I miss something ?Thank you
Hello,We’re looking at the behavior of RevenueCat when using promo-code in the device store (Google Play, Apple Store) and would like the community to confirm or correct these statements:When a promo-code is entered in the device store, our app isn’t active and thus can’t look in our code for the App User Id. RevenueCat save some attribute (IP Address? MAC Address?) from the transaction to recognize the user. If only one existing App User Id has this attribute, it link the promo-code to this id. If several existing App User Id have this attribute, it link the promo-code to the latest active id. If no App User Id has this attribute, RevenueCat create a new App User Id with the promo-code If the promo-code has been assigned to App User Id X but the user log in with App User Id Y, they’ll not get paid access and will see the paywall. In this case, the user can click on Restore purchase in the paywall to get access without login with App User Id X. This however will take 1-2 minutes before
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:
when i want to save my offerings, nothing is happening.if i save android product to offer, it’s okay.but when i wanna try with apple product, nothing happening.this console logs shown when i press save6sense JS Hit MAX_ITERATIONS in getNameOfClosestParentindex-BldvizOr.js:436 6sense JS Form Element: <fieldset aria-hidden="true" class="MuiOutlinedInput-notchedOutline css-1gocwb">…</fieldset> cannot have a name determined from parents, skippingindex-BldvizOr.js:436 6sense JS Hit MAX_ITERATIONS in getNameOfClosestParentindex-BldvizOr.js:436 6sense JS Form Element: <button class="MuiButtonBase-root MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-disableElevation MuiButton-root MuiButton-text MuiButton-textPrimary MuiButton-sizeMedium MuiButton-textSizeMedium MuiButton-colorPrimary MuiButton-disableElevation css-12rgzh1" tabindex="0" type="button">…</button>flex cannot h
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.