Discussion and help from anything related to RevenueCat.
Recently active
Hi,I have several apps under the same RevenueCat project, and the project icon currently mirrors the icon of one of my apps. This gets confusing when I use RevenueCat from my Android device: on the Transactions screen I can only see the project image, so I can't tell which app a transaction belongs to unless I rename each product.Would it be possible to add an option to upload a custom project image? That way I could set a neutral icon that isn't tied to any single app.Thanks!
Hi everyone,I wanted to start a quick conversation about the recent UI update to the subscription type badges—specifically the Renewal and New Sub tags.As developers, we stare at this dashboard daily. I noticed the recent changes to these tags, and to be honest, I think the older version was much better. With these new heavy pill-shaped backgrounds, they look exactly like clickable buttons rather than simple status indicators. This can be visually confusing and draws unnecessary attention away from the actual data.A cleaner, more minimalist approach—like what we had before, or just simple colored text without the solid backgrounds—makes the interface feel much more intuitive and native to our daily workflow.I've attached a screenshot showing exactly the ones I mean.Does anyone else feel the same way about this recent change? Would love to hear your thoughts!
We use a RevenueCat Web Purchase Link with Paddle Billing as the payment provider.In Paddle Sandbox, our discount is active, has a customer-facing code, and enabled_for_checkout is on. We also enabled “Display discount field on the checkout” in Paddle’s Checkout settings.However, the embedded Paddle checkout opened through our pay.rev.cat Purchase Link shows no “Add discount” / promo-code field.Paddle’s docs say customer code entry is controlled by showAddDiscounts. Inspecting the RevenueCat-hosted checkout bundle, it appears to initialize Paddle with showAddDiscounts: false by default.Is customer-entered Paddle discount-code redemption currently unsupported for RevenueCat Web Purchase Links? If it is supported, where can we enable or override showAddDiscounts for a Paddle web config or individual Purchase Link?We are specifically asking about a user manually entering a Paddle discount code—not RevenueCat Billing discounts, which do not apply to our Paddle-backed products.
If your Paywalls v2 paywall is served through a workflow, the dashboard's play_store_product_change_mode setting gets silently dropped. WorkflowScreenMapper rebuilds the paywall's component data from the workflow payload and hardcodes productChangeConfig to null, so ProductChangeCalculator never runs and the purchase goes out with no oldProductId.End result: an existing subscriber who taps a different tier doesn't get upgraded — they end up with two concurrent Google Play subscriptions, both billed, with no error or warning anywhere. onPurchaseCompleted fires like nothing went wrong.Filed with full repro steps, logs, and the disassembly behind the root cause here:👉 https://github.com/RevenueCat/purchases-android/issues/4002Posting here too because we couldn't find any dashboard or API way to opt an offering out of the workflow path, and setPurchaseLogic is rejected under the default purchasesAreCompletedBy = REVENUECAT (SDK logs a warning and ignores it). If anyone has found a support
Our users' devices report A LOT of these warnings after we updated to the latest KMP SDK:[Purchases] - WARN: Could not resolve remote config blob(s) for 4 of 4 requested item(s) in topic 'ui_config': [app, localizations, variable_config, custom_variables]. Returning null. These are new in our latest Android release, and we're getting 1000s of them reported on Sentry. We haven't changed anything in our RevenueCat config/account, just updated the SDK.Current SDK versions (in which the warning occurs): com.revenuecat.purchases:purchases:10.16.0 com.revenuecat.purchases:purchases-kmp-core:3.4.0 com.revenuecat.purchases:purchases-kmp-core-android:3.4.0 com.revenuecat.purchases:purchases-kmp-mappings-android:3.4.0 com.revenuecat.purchases:purchases-kmp-models-android:3.4.0 Previous release contained these SDK versions (warning doesn't occur): com.revenuecat.purchases:purchases:10.14.1 com.revenuecat.purchases:purchases-kmp-core:3.3.1 com.revenuecat.purchases:purchases-kmp-core-an
On iOS, my Paywalls V2 paywall downloads its custom fonts from fonts.pawwalls.com on every launch, even though the exact same font files are bundled in the app and registered through UIAppFonts. The subsequent registration then fails, and the download stalls the paywall's first render by roughly a second.This looks closely related to this thread: https://community.revenuecat.com/sdks-51/font-are-downloaded-although-they-are-available-7359 — where staff identified "a bug on our end with the font name formatting" and the resolution was to re-upload the font file after the fix shipped. I'm on a much newer SDK than that reporter, and I have re-uploaded the fonts, but the behavior is unchanged.My main question is at the bottom: what is the supported way to have a V2 paywall use an app-bundled font without an uploaded file, so no download is attempted at all?**Environment**- react-native-purchases 10.4.2, react-native-purchases-ui 10.4.2- PurchasesHybridCommon / PurchasesHybridCommonUI 18.19
I got the mail from Adam about holding the event of shipathon at my campus and I replied on that mail the same day, but I didn't get any further updates on that. Our campus would be grateful to accept you as the hackathon in our college. Please reply asap.
Using React Native Paywalls UI ^10.7.1, on iOS, Text with {{ product.price }} is configured black for a selected package in dark mode, but appears white on device. Another package rendering the same {{ product.price }} text is not selected by default and behaves correctly. RevenueCat renderer shows both correctly.
The support for the native side has been released recently. However, it doesn’t seem like the same support is in place for React Native SDK. Is there any timeline for that?
Google Play recently sent an email announcing the new Review Refund API:“We are excited to share that the Review Refund API is now available to help you take an active role in managing chargebacks. This optional API enables you to share key transaction information with Play — such as item usage.”Does RevenueCat have plans to support integration with this API? If so, is there a timeline for when this functionality will be available?
It would be really helpful if the Paywall Editor supported max-width and max-height constraints for components and containers.Right now, responsive layouts can use options like Fill and Fit, but there isn't a way to allow an element to grow responsively while also capping how large it can become.For example, we'd like to be able to configure a component as:Width: FillMax Width: 500pxorHeight: FillMax Height: 600pxThis would let us create layouts that adapt to different phone and tablet sizes without having to use fixed dimensions or allowing components to become excessively large on larger screens.Essentially, we'd love CSS-style max-width and max-height behavior within the Paywall Editor.This would make building a single responsive paywall across different device sizes much easier.
It would be helpful if the Paywall Editor supported underlined text as a standard text styling option.Currently, we can configure properties such as font, size, weight, and color, but there doesn't appear to be an option to apply an underline to text.We have several designs where certain text, particularly links and interactive text, needs to be underlined for visual clarity and accessibility. Right now, we're unable to accurately reproduce those designs using RevenueCat Paywalls.Ideally, we'd like an Underline option alongside the existing text styling controls, similar to standard text-decoration: underline behavior.It would also be useful if underline styling could be applied to individual text spans rather than requiring the entire text component to be underlined.
We're seeing inconsistent styling behavior with a RevenueCat Paywall on Android, specifically on a Samsung Galaxy S22.The same paywall renders correctly when viewed through the RevenueCat Paywall Preview app, but when rendered within our own Android app build on the same device, there are styling differences.Specifically:The Annual package font color when selected is incorrect in our app build. The badge text size is also rendering at a different size than configured. Both styles render correctly in the RevenueCat Paywall Preview app. The issue is reproducible on a Samsung Galaxy S22.I've attached a video that toggles between the RevenueCat Paywall Preview app and our app on the same device to demonstrate the differences. You can see that the RevenueCat app renders the intended styling, while our implementation renders the selected Annual package text color and badge text sizing differently.Since the paywall configuration itself appears correctly in the RevenueCat app, we're trying to
Hi, I am integrating RevenueCat in my app and currently testing monthly subscriptions using the Test Store.I tried using the REST V2 api to get the customer’s active entitlements on my backend server. It gives proper response most of the time but during the process of renewal, for about a minute, I get an empty response for active entitlements.“items”: []So let’s say I made a purchase at 10:00AM, here is the series of observations:First purchase → 10:00AM to about 10:04AM - active entitlements presentAt around 10:04AM → Set for renewal → Active entitlements empty~10:05AM → Renewal → active entitlements presentThis repeats until the subscription is cancelled automatically after 5 times.I am using this endpoint:https://api.revenuecat.com/v2/projects/{project_id}/customers/{customer_id}/active_entitlementsIs this an expected behaviour? If yes, then, is the REST api a reliable source of active entitlements?Thanks,Abhi
After a year of running creator/affiliate campaigns for subscription apps on RevenueCat, here is the architecture that actually holds up in production. Posting it as a conversation because the affiliate threads here keep getting auto-closed while the same questions keep coming back.1. Attribution: typed codes as subscriber attributes. Let fans type the creator’s code into the app (a plain text field), then set it as a subscriber attribute before the purchase: Purchases.shared.attribution.setAttributes(["affiliate_code": code]). Typed codes work cross-platform, survive the App Store install gap, and need no deep links or fingerprinting.2. Revenue: webhooks carry the attribute. Point a RevenueCat webhook at your backend — every INITIAL_PURCHASE, RENEWAL and CANCELLATION event arrives with subscriber attributes attached, so each purchase and every renewal credits the right creator. That is the whole trick: RevenueCat already joins the two halves for you.3. Don’t build attribution on Apple
Hi there - grateful for help!Issue: promo codes created read as ‘not valid for this purchase’ when redeeming in app. I want to create a 30 day trial code. I have a fresh account registered as a tester, in the correct region, with payment information, although I cannot get a code for a free trial to a subscription to work in app. It recognises the code, as putting in an incorrect code produces a different error. I have a monthly base plan + a 3 day trial offering. The same for a yearly.Really at a dead end here, any suggestions/advice appreciated - thank you! 😁
Recently, we upgraded both our libraries (purchases and purchases-ui) to version 9.0.0 because Google Play required apps to use Play Billing Library (PBL) version 8 or later.Before that we had no issues with our app, purchases worked fine in locall and production enviroment.A few days ago a user issued an email to us that he tried to make a purchase of our one time package(‘consumable’). In revenue cat we saw that he was charged but the item in our app was still locked (indicating the payment wasnt successfull). I tried to trace where was the issue, but i couldnt find out. Today for the first time i replicated the issue and i made the same one time purchase in my local enivorment (sanbox), it registered the payment in revenue cat but i saw these error logs: There was a problem with the App Store. Problem communicating with the Store when trying to validate the receipt.The strange part is this issue happens at random times. After this unsuccessful payemnt i made, i tried a second time a
Components-based paywall: conditional intro-offer row is missing in the firstrender, even though eligibility is already cached## Setup- purchases-ios 5.70.0, SwiftUI, iOS 18- Components-based paywall built in the editor, presented with RevenueCatUI.PaywallView(offering:displayCloseButton:)- In the editor, a text row ("7 days free trial") is hidden by default and shown only when the customer is eligible for the introductory offer, by paywall logic.- Product identifiers below are redacted.## ProblemThe paywall opens with that row missing and shows it one render pass later.There is no transition or animation involved — the row simply is not there inthe first frame and is there in the next.The plan card grows upward, so nothing below it moves and the purchase buttonstays in place. It is purely cosmetic. Still, what appears late is the offeritself, which is the one line we would want visible from the very first frame.## What I triedResolving eligibility before rendering, so the answer is
Following up on Tarek's answer in the closed thread "Accessibility configuration support in Paywalls?" (community.revenuecat.com/sdks-51/accessibility-configuration-support-in-paywalls-7709) - that thread is closed for comments, so filing the concrete example he asked for as a new post. Component: the built-in paywall close (X) button, a `type: icon` component (icon_name "x"), not an image. Issue 1 - no accessibility label field: Image components support alt text (confirmed via the media gallery's "Image preview" panel). Icon components have no equivalent field anywhere in the builder - checked the Icon, Button, and Stack property panels for the close button, none of them expose a label/content-description field. Issue 2 - Android traversal order: on Android the close button also renders after the entire scrollable body content in the accessibility tree (confirmed via adb shell uiautomator dump on a real device with TalkBack on), even though the paywall's own component JSON declares "h
I have removed and deleted all products associated to the virtual currency, and deleted all users. Yet it still won’t let me to delete virtual currency.The error message is: `The virtual currency has transactions and cannot be deleted.`
HiI recently started adding more language localizations to my paywall, and I ran into an issue.Is there currently any way to localize the video used in the paywall?Right now, it seems that the video is shared globally across all localizations. The problem is that my "video" is actually an animation containing different translated textx. I really don't want to replace it with a version without any texts, because it's been performing as a great hook and has significantly improved the first impression of the paywall.However, I'm not sure how to properly support multiple languages if every localization has to use the same video.Has anyone found a workaround for this, or is video localization planned for a future update?Thanks!
Hi, i am keep getting this error on Android side of my app (iOS is live and works perfect):"There's a problem with your configuration. None of the products registered in the RevenueCat dashboard could be fetched from the Play Store"“There is a problem with your configuration in Play Store Developer Console. More info here: https://errors.rev.cat/configuring-products”I am keep getting this error and it makes paywall not visible on Android but I don't know what i missedLicensed user is configured on Play store and i logged in with it on physical device (Samsung Galaxy A07) I test on physical device Bank details are added and every agreement seems to be signed Product identifiers matches between RevenueCat and play store, on the RevenueCat dashboard it even says active Right API key is used to init the Android config I published a closed testing release with right countries selected, including my own country. I even updated prod country list and send it to review & got it approved (Ap
The documentation for the RevenueCat Test Store states the following:Test purchases made through Test Store behave like real purchases and subscriptions: they update CustomerInfo, trigger entitlements, and appear in your RevenueCat dashboard.I am wondering, should that description include, or explicitly exclude, purchase-related SDK operations like restorePurchases or syncPurchases? I can’t seem to find any official documentation about this.I am using the RevenueCat Android SDK, version 9.28.1. Once I have set the Test Store API Key, I can, in fact, make a test purchase, and I can see that the corresponding Entitlement is granted to the user by my app, and also that it shows up in the RevenueCat profile for the user’s custom ID (when Sandbox Data is enabled, of course.) But now I want to verify how restorePurchases and syncPurchases would work. However, currently neither work as I expect inside the RevenueCat Test Store.My test involves using a custom ID linked to a (one-time, non-cons
For RevenueCat’s Stripe Billing integration with Managed Payments, which auto-enables Stripe’s Adaptive Pricing (converting our price to the customer’s local currency at checkout using live exchange rates).The issue: when we display prices on our own site using getOfferings(), we’re showing our configured/base price — not the Adaptive Pricing–converted local price the customer will actually see once they reach Stripe Checkout. This creates a mismatch where the price on our site doesn’t match what shows up at checkout.Questions: 1. Is there any way to fetch or preview the Adaptive Pricing–converted price for a given customer/currency before they reach Stripe Checkout, so we can display an accurate price on our site? 2. If not currently possible, is this something on the roadmap — e.g., exposing an estimated localized price through getOfferings() or another API call? 3. Is there a recommended workaround other teams have used to avoid this mismatch (aside from disabling
Hi RevenueCat team,We've been testing the new Paywall v2 and have encountered rendering issues on several devices.The paywall displays correctly on some devices (for example, an iPhone 14 Pro), but on several Android phones the layout breaks in different ways.We've observed the following issues:The pricing selection card becomes too tall and pushes the Continue button and footer links off-screen. On some devices, the Restore Purchases link is rendered vertically, one character per line. On others, the pricing card overlaps the feature list above it. The behavior appears to vary by device and screen size rather than by our implementation.We've attached screenshots from several devices demonstrating the issue:Samsung A51 Samsung S24 (English) Samsung S24 (French) Samsung Z Fold3 iPhone 14 Pro (working as expected)We are using the standard Paywall v2 template without significant layout customization, so this appears to be a rendering issue in the paywall itself.Could you let us know:Wheth
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.