Discussion and help from anything related to RevenueCat.
Recently active
Hi RC Community! 👋Today, I was trying to use the RevenueCat dashboard to manually grant users some entitlements. According to the sacred texts (the internet), RC is supposed to fire off a lovely little webhook to my server when this happens. Simple, right?So, I set up my shiny new server sync, granted the entitlement to test it out, and waited. And waited. Nothing happened. The only thing that happend was RevenueCat updating the account itself inside of the dashboard, and that was pretty confusing because no webhook was being fired.Naturally, I did what any rational developer would do: I panicked, assumed everything was fundamentally broken, and started hacking together a completely custom, overly complex implementation. Spoiler alert: That was a terrible idea. 🤦♂️After losing way too much time and sanity, I finally discovered the catch: These specific manual dashboard events are only dispatched as Production events. I have no idea why it’s set up this way, but it cost me a good chu
Hey RC team,We recently had a problem where an Apple user signed-up to our App for the first time and subscribed to a product with a free trial. Unexpectedly, they were charged the full amount right away. Our App only offers auto-renewable subscriptions to users.I have checked in RC’s Customer History for that user as well as our own logs to see if the user’s trial eligibility was incorrectly determined and they were misguided by our App’s UI that they were eligible for a trial, but doesn’t seems to be the case.RC shows in the Customer History that the user started a trial and also shows 0 revenue reported. We even asked the user to provide us with a screenshot of the subscription details of our App in their Purchase History through their Apple Account. That also shows that the user was subscribed to a free period which will be renewed after X number of days.We would appreciate if you could tell us what could’ve happened here? I will be happy to share the AppUserId if need be.
Hi all,This is an Android issue, I’m currently not targeting iOS. I’m calling GetOfferings and it’s returning the offering, but the offering contains only one product, which is a non-consumable product. I also have two subscriptions which are not returned. I am currently using IapHub to handle my inapp purchases and everything works great there. But I would like to migrate to RevenueCat.The app is running on the closed test track and I am a tester. This is my configuration: Google Play:Non-consumable product. This works Subscriptions. Not working And TLDR:getOfferings only returns the non-consumable product, not the subscriptions Android only, app running in closed test track, I am tester RevenueCat Product ID’s match with Google Play Store (see screenshots) Inapp purchases currently work using IapHub, but I want to migrate to RevenueCatCan anyone spot what is going wrong here?
It seems KMP library isnt compatible with exit offers, is it planned?
Hello, we’re tracking our daily total revenue in the Transactions page in RC mobile app.However, we recently noticed that even when new subscriptions are added, the total revenue in that day decreases. It might have been because of refunds, which can reduce the sum, but after we checked that wasn’t the case.We tried to see if there’s a pattern in the change of sum number, but couldn’t find any. Sometimes the number goes up, and sometimes the number goes down, regardless of how many new subscriptions are added.Are we missing something here, or is this a bug?Thank you.
I’m using RevenueCat to display paywalls and have created multiple offerings for different targeting groups. In my Flutter app, I want to show different paywalls to different users based on the offering.I’m displaying paywalls using PaywallView from the RevenueCat SDK and passing a specific offering to it. However, instead of showing the selected offering’s paywall, it always displays the default offering’s paywall.I fetch offerings at app launch, and based on debugging, the offerings appear to be valid and correctly retrieved.This setup used to work as expected, but recently it stopped working. I’m currently using the latest version of the RevenueCat SDK (9.15.1).Has anyone experienced this issue or knows what might be causing the SDK to ignore the passed offering and fall back to the default one?
Hi everyone,I’m using the Airbridge integration, our dashboard is being "polluted" with sandbox transactions from our IT/QA teams testing in TestFlight. I noticed that some RevenueCat integrations (like Mixpanel, AppsFlyer) allow for a dedicated "Sandbox API Key" , but the Airbridge configuration doesn't seem to have this.My questions for the community/team: Is there a way to globally disable "Sandbox Environment" events specifically for the Airbridge integration? If not, how are others handling this? Does everyone just create a separate RevenueCat Project for staging/testing to keep the API keys isolated? Is there any plan to add an "Ignore Sandbox" toggle to the Airbridge integration settings? Any advice on keeping production MMP data clean without stopping internal testing would be much appreciated!
Hello everyone,I have a monthly subscription for my Flutter app. Just a single subscription plan.I faced an issue with at least two customers have an issue with their premium subscription because I am relying on the webhook for their subscription status.There is a pattern here:1. Subscribe2. Opt-out3. Force resubscribe (?)4. Subscription expiredFrom the images below, You can see that the customers manage to subscribe to the same subscription before it expired. I do Both of the customers are from Italy and using Android if that matter. Hope to hear any explanation on this. Thanks!
Hello friends!I have an app that is accompanied by physical products.Today the user buys the physical product (~4USD) from our Shopify store and adds it to their account in app when received via serial number to be used with app functionalities.I would LOVE to offer the physical products as one time in app purchases. No more Shopify and a much better user experience. Dream onboarding would be to download the app, pick monthly subscription for app, pick number of physical items and pay (adds ~4USD/item), then add your postal address in next step of onboarding.Or pick yearly subscription and get physical items for free, then add your postal address in next step of onboarding.And of course have a in app ”Store” where users can order physical items ad hoc. Is this possible with RC?
my dashboard shows that product is linked to an entitlementbut when user goes to purchase a subscription in the API call Purchases.getCustomerInfo()fetches no entitlements corresponding to that order (check below json)"entitlements": {"active": {},"verification": "NOT_REQUESTED","all": {}}Can anyone help me out in this?
I am trying to test some Android entitlement stuff and Sandbox seems broken.If I use an Android simulator:isActive is false on the entitlement I purchased in the sandbox environment no matter what I do. I can re-call getCustomerInfo or any other method and it will always be false. isSandbox is true, dashboard says sub is active. Confirmed anonymous IDs match.If I use a device:CustomerInfo’s entitlement is null when trying to get it with the entitlement ID.I verified that it is supposed to be active in the RevenueCat dashboard, and it is renewing once or twice. But isActive never becomes true, or on a real device it will always return null for all the entitlements.Yes it is the most up-to-date version.The app has been out for an extremely long time, so it’s not something like “sometimes it takes awhile when releasing an app!” All configuration is correct because everything worked fine before and nothing has changed.This was not happening at some point and nothing has changed on my end.T
I am currently trying to implement family sharing by using tabs on the dynamic paywalls but what I noticed is that the selected package does not change based on which tab the user is on. It remains either the default package on paywall load or until they change it. Is there a way to have a default package for each tab? I really could use someone’s help.
Hi RevenueCat team and community! I would like to animate Buy Now button like its breathing. I saw that it encourages users to buy to product but couldn’t find any method. Can you help me with that? Thanks in advance!Have a great day,Han
I have seen some other posts about this, and tried everything I have read up on - but I continue to get this error. Everything in the business section is filled out on app store connect. I have tried and regenerated this a few times. Any suggestions how to fix this is welcomed!
We are using a hybrid approach for our RevenueCat integration: iOS: We use the react-native-purchases SDK for native In-App Purchases. Mobile Web: We provide an option for users to purchase via Stripe Checkout Links directly in a mobile browser (bypassing the native SDK for these specific transactions). The IssueWe are consistently seeing Error 7746 ("This fetch token is currently being ingested") on the initial delivery of Stripe webhooks for these web purchases.Since we are not using the RevenueCat Web SDK to initiate these transactions, we are confused as to why a "fetch token" would already be under ingestion when the webhook arrives.We're seeing subscriptions sync, but the initial 7746 errors force Stripe to rely on retries, causing a delay in granting entitlements. We're not super concerned with this error, but mainly want to confirm that it is expected.Integration Details Webhook URL: https://api.revenuecat.com/v1/incoming-webhooks/stripe/app1280305636 Configuration: "Track
There’s other posts about this. Tried everything I have read up on - but I continue to get this error. Everything in the business section is filled out on app store connect. I have tried and regenerated this a few times. Any help? Thank you!
We'd like an addition to the close button delay feature that gives a visual countdown as follows:1. Counts down for a configurable duration in seconds (not to a target date, like the current countdown component)2. Displays as a numeric second counter inside a circular progress indicator that animates as it depletesUse caseWe use the close button delay to ensure users see our paywall content for a minimum duration before dismissing. However, we want users to see a visual indicator of when the close button will appear, rather than having it appear without warning. The circular progress bar with countdown number gives users a clear signal that the paywall will become dismissible shortly, which we believe reduces frustration and improves the user experience compared to a button that simply appears after an invisible delay.Desired behaviorConfigurable countdown duration in seconds (e.g., 5 seconds) Visual: numeric countdown ("5", "4", "3"...) centered inside a circular progress indicator th
Hi, Is is possible to create a Web Billing product with the API?I saw in the documentation that the create product endpoint doesn’t allow it but maybe there is another way to do it? Also, could you give me more details on the push a product to the store endpoint please?Is it creating a product on the AppStore Connect for example if we’ve created a product on RevenueCat? Thank you for your help! Damien
Hi everyone,I'm using RevenueCat Flutter SDK v9.15.1 and having issues with subscription upgrades and downgrades on Android (Google Play).Setup:- Single subscription ID: `pro_access`- Base plans: `starter_monthly`, `starter_yearly`, `premium_monthly`, `premium_yearly`, `professional_monthly`, `professional_yearly` if (Platform.isAndroid && oldProductId != null && oldProductId.isNotEmpty) { params = PurchaseParams.storeProduct( newProduct, googleProductChangeInfo: GoogleProductChangeInfo( oldProductId, prorationMode: GoogleProrationMode.immediateWithTimeProration, ), );} else { params = PurchaseParams.storeProduct(newProduct);}Questions:1. Should `oldProductId` be passed as `pro_access:starter_monthly` or just `starter_monthly`?2. Is `GoogleReplacementMode.deferred` the correct mode for downgrades?3. Is there anything specific to v9.15.1 that affects `GoogleProductChangeInfo`?Google Play returns a generic error and RevenueCat logs a replacement mode
I have an app with a few subscriptions that I imported into RC. Then my paywall is shown in the app and you can pay through it. Everything working fine. I also have a website for this app where I have a section talking about the subscription but I can’t show the prices since each country has a specific price. How could I solve this? I don’t want user to pay from website, just check the prices.Right now I’m saying “go to the app to check prices” but that’s awful from a marketing PoV.
Our app offers a single subscription, with a monthly and an annual payment plan (in Google Play terms, one subscription with two base plans). Subscribed users can access the whole content of the app without limitations.For better flexibility, we also offer subscribed users to switch the payment plan. Since this is a single subscription, we have to use the WITHOUT_PRORATION replacement mode. We build our purchase params like so: PurchaseParams.Builder(activity, subscriptionOption) .oldProductId(currentSubId) .googleReplacementMode(GoogleReplacementMode.WITHOUT_PRORATION) .build()Here is the problem: When a user is currently running with a subscription that has been restored (via the Purchases.sharedInstance.restorePurchasesWith(onError, onSuccess) method), it is no longer possible to switch the payment plan. For the “Transferring purchases seen on multiple App User IDs” setting, we use “Transfer to new App User ID”.The Play Store shows an error message “Error: We are unable to
As mentioned in the documentation https://www.revenuecat.com/docs/projects/restore-behavior#share-between-app-user-ids-legacy. I am unable to find any configurations available on RC; dashboard. We can choose between other Transfer Options available but not the legacy one.if I use anonymous login it provide new user without any active subscriptions.
On iOS paywallViewControllerWasDismissed is not called when the paywall gets dismissed.There should also be a way to stop the paywall from being automatically dismissed when the user completes a purchase.No SwiftUI. UIKit.Most up-to-date version. My configuration is fine. Testing on device.
Hey folks - hope you’re well. Wondering if anyone else has run into the issue where apparently the app is giving the ask to buy modal to the user but the parent never receives the notification? From what the parent tells me: other apps seem to notify them just fine so doesn’t appear to be an ios version mismatch.As far as I understand holding the payment is the correct step but unsure if in-app purchases (not subscriptions) need a specific set up in app store connect to get this to work? Unsure if I’m missing something obvious here Thanks!
We have the RevenueCat Meta/Facebook integration set up and CAPI events are flowing — we can see "Start trial" (87 events) and "Subscribe" (80 events) in Facebook Events Manager under Conversions API. Client-side Facebook SDK events (ActivateApp, App installs) are also working fine.Issue:Facebook cannot attribute trial starts or subscriptions back to our ad campaigns. In Events Manager, the "iOS 14.5 ATE True Status Rate" shows "No Rate Displayed" with a warning icon.What we're doing in the app before every purchase```// Right before Purchases.shared.purchase(package:)Purchases.shared.attribution.collectDeviceIdentifiers()Purchases.shared.attribution.setFBAnonymousID(metaAnonymousID) // from AppEvents.shared.anonymousIDPurchases.shared.attribution.setMixpanelDistinctID(distinctID)```We also call `collectDeviceIdentifiers()` and `setFBAnonymousID()` earlier during onboarding via `syncRevenueCatIdentifiers()`.For a confirmed test user (ATT authorized):- IDFA: available and valid- FB Anon
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.