Discussion and help from anything related to RevenueCat.
Recently active
It would be helpful for the SDK to allow apps to submit custom Anonymous App User IDs with their Configure() calls. These would be used instead of generating a $RCAnon app user ID, but would still be Aliased if/when the user subsequently signs in and the app calls .login().In my case, my app can provide a more persistent anonymous identifier than what $RCAnon accomplishes, which leads to a better user experience, but we refrain from doing so because we get undesirable Transfer Purchases to New App User ID behavior instead of the aliasing that happens with $RCAnon.It we could get that aliasing behavior with a custom AppUserID, we would supply our persistent anonymous identifier and the end-user would have a better experience.
Seems the Android Paywalls show Material3 Alert Dialog. Are there plans to make these customizable or disable them so we can show the errors in style that matches the rest of our App? Only way we have found to do this, is to resume(false) in onPurchasePackageInitiated and then taking over the entire purchase flow, but we would prefer to let the Paywall do the work.Even if we keep the default dialogs, their body seems to use non-localized Strings for the error message. Which also makes them bad for non-english users. https://github.com/RevenueCat/purchases-android/blob/de4475520fb0353daddbae2fccf2f402332688ea/purchases/src/main/kotlin/com/revenuecat/purchases/errors.kt#L56
Hi, Any update on changing the timestamps you’re sending to Customer.io via the direct integration from ISO to Epoch? I asked in this post before: Customer.io doesn’t run on ISO, they use Epoch. As it stands, this integration isn’t very useful (the most important piece of data that I need in Customerio is the user’s expiration date!).
I have an introductory offer applied to a one time purchase on the google play console with legacy compatibility checked. Whilst the UI in the app shows the discounted price when I click to purchase it and the google billing bottom sheet surfaces, its showing the full price. Is this a gap in your SDK to support introductory offers for one time products?
13
Hi, we are setting up server-side analytics forwarding and I need to confirm where Apple Search Ads (ASA) attribution is stored after RevenueCat collects it.Context- Our iOS app calls `Purchases.enableAdServicesAttributionTokenCollection()`, so RevenueCat collects the AdServices attribution token.- On our backend we receive RevenueCat webhooks and forward the event payload to our analytics tool. We'd like to rely on the webhook `event.subscriber_attributes` map for per-customer context (we also read the Customer API `attributes`). What I can't find in the docs1. When RevenueCat exchanges the AdServices token, where does the resulting ASA attribution (campaign ID / ad group ID / keyword ID / org ID) get stored on the customer? Is it stored as reserved subscriber attributes? If so, what are the exact attribute names (e.g. `$apple_search_ads_*` or similar)?2. Does this ASA attribution data appear in the **webhook event payload** under `subscriber_attributes`? Or is it only available via
Hello RC team,I have a question regarding the format for App User ID. From my understanding, the default app user id is prefixed with $RCAnonymousID However, on from my webhook log, I am seeing this value where the id is base64. This makes my backend code not working because this value doesn’t exist in my database and I am only using UUID v4 as the id.app_user_id :"na68yjrqU3LzQbk6h4Cwchw8l4pgILy5id9LAAGCaW4="aliases: ["na68yjrqU3LzQbk6h4Cwchw8l4pgILy5id9LAAGCaW4="]original_app_user_id: "na68yjrqU3LzQbk6h4Cwchw8l4pgILy5id9LAAGCaW4=" My dart code looks something like this.configuration.appUserID = appUserId;await Purchases.configure(configuration);From RC dashboard, I can identify the correct customer after user provided their email address and I have to transfer the entitlement to the correct customer if this issue happen.This issue happened once in a while and has happened for a few months. So far, only happened on Play Store purchases. Is there any docs talking about this base64 id?T
Hello,My Web Billing app config ("HOURRAIL App") is connected to a live Stripe account (verified in Account Settings, Mode: Live).Real transactions are going through with a “Web purchase link”.However, the config only shows a sandbox key (rcb_sb_...), no production rcb_ key is visible anywhere in the dashboard.Is there a step to explicitly generate/unlock the production key, or is this a provisioning issue?
A title says, when trying to set height: Fill on Tabs component, it does not work. Seems like it’s not growing as expected. This bug is present on Tab component only, Stack works properly.
I’d love to see more flexible credit distribution for subscriptions, especially for cases where the billing period and the credit refresh period are not the same. A common example would be an annual plan where the user pays once per year, but their included credits are delivered gradually, such as a fixed amount every month instead of all at once.This would be very useful for AI products where usage still needs to be controlled through monthly credit allowances. Having this built in would make the setup much simpler and reduce the need for heavy custom logic on the backend.I've seen a lot of similar feature requests but no news and I think it's something that RC user really really wants.
In the Android sandbox environment, the CANCELLATION callback is delayed until the subscription expires. However, in iOS, the CANCELLATION callback works without issue and is invoked after automatic renewal (subscription) is canceled.
I’m using Stripe with RC.And I use Stripe Test Clock to simulate ending subscription.It works fine with Stripe webhook, our system (BE) store the correct response from the Stripe webhook. But the mobile using RC’s entitlement and the subscription still there until the subscription will end in the future? Family (Monthly)Subscription expires in 15 daysMy question is: Does Revenue Cat support Stripe test clock simulation?
I have 2 non-consumable entitlements for my app. In the paywall, I include a “restore purchases” button. I present the paywall with RevenuCatUI.presentPaywall(). When a user taps the “restore purchases” button, the paywall is not dismissed and no update is shown until the user manually dismisses the paywall. Then the modal that I present is shown.While I’m sure I could make my modal visible via a higher z-index, I’d prefer to have the paywall to be dismissed when the user taps the restore purchases button. AI tells me to use RevenueCatUI.presentPaywallIfNeeded(), but how do I use that with 2 optional entitlements? I.e. present the paywall if either entitlement is missing.
We run an app with a yearly and monthly subscription. We have a great initial conversion rate, but a very high refund rate (10th-20th percentile). People are in general very happy about the product and we have 4.9 stars on the App Store. We are iOS exclusive.I noticed a strange pattern that I’ve seen repeatedly. Users seem to cancel their trial, but then it converts anyway and they request a refund (understandably). I attached a screenshot of a typical flow before a refund.What can be the reason for that? It is hurting out business.We use Superwall as paywall provider, it’s a Flutter app, we integrated the RC customer center so users can cancel within the app via Settings. Our monthly refund rate sits between 2-4%. We also activated the setting that RC automatically advises Apple to grant the refund, since I don’t believe in forcing people to pay for something they don’t want.Any hint is appreciated. Thanks!
Why has there been no progress in adding local time zone to the charts? Im in UTC + 10 so the default timezone is worthless to me.It means I have to export data if I want to actually correlate it with other sources.Why has RevenueCat ignored this issue for over a year? Yet I see adds everyday bragging about how many features they are supposedly shipping...
Hi RevenueCat community,I'm integrating RevenueCat into an iOS App Clip (targeting iOS 16+) and I'm running into credential validation issues. I'd love some clarity on the recommended setup.My setup:Main app bundle ID: com.mycompany.appname App Clip bundle ID: com.mycompany.appname.Clip Both should use the same in-app purchase products defined in App Store Connect App Clip is embedded in the parent app (as Apple requires) Using RevenueCat SDK v5.x (StoreKit 2)What I tried: I created a separate app entry in RevenueCat for the Clip bundle ID com.mycompany.appname.Clip, uploaded the same IAP key (.p8) and shared secret as the main app. RevenueCat validation returns: "The key is not valid or is not compatible with the Bundle ID of your app."The build with the Clip has been successfully uploaded to TestFlight, so the bundle ID definitely exists in App Store Connect but inside the mother app (not as a single standard app).My questions:Should I use a separate RevenueCat app entry for the Clip
Project: Heartwyse Issue: 3 Stripe products (2 recurring flat-rate subscriptions, 1 one-time flat-rate purchase) appear in the import list but fail on import with only the message "Import complete. 1 product failed." — no error code All products are live and active in Stripe So yeah as it shows I am having an issue importing 3 products from stripe into revenue cat. There’s no error code, it shows the products are live. It just won’t import them no matter how hard I try.
Please add chart/easy tracking of renewals. It would be very helpful to know each days total subs - conversions and renewals.Currently you have to troll through the raw customer list ThanksNicolas
I have these 4 subscriptions:In paywall the discounts are shown correctly but in the app, the monthly discount is not there: I'm using product.relative_discount for all of them.iOS works fine, just Android is the one with the issue
I have bit of a pickle. You have to have premium to be able to log in to my app, and when you log in I also log the user in with the user id in revenueCat, so I can trace them better. All good there.. BUT. I have users that buy premium on Android, and then they use their iPhone - also buying premium. And then they login on the iPhone with the same email as they use on their Android.It seems to me that the two subscriptions kind of gets merged. What is happening here? Am I setting myself up for pain? I’m thinking of adding a prefix to the user id. SO if they buy premium on iPhone and then log in, I actually log them in with ios_theirUserId and android_theitUserId.But maybe I should just change it so they can log in without Premium and then share the premium status between platforms. I’m not sure what’s happening now.
Hi everyone,I'm having major issues with RevenueCat in my beta app (built with Replit).When I try to make a purchase (both subscriptions and consumables), it gets stuck showing “Plans are loading, try again in a moment”.On top of that, on Android (internal testing) I get an error when opening the app saying it can't find the public API.I’ve configured everything: RevenueCat, App Store Connect, Google Play Console, secrets, etc. Other services like Google Maps and Google Sign In work fine.I’ve tried everything I can think of on the code and configuration side but nothing works. I really need purchases working in beta before production.Has anyone faced these exact issues recently with RevenueCat? Any ideas what could be causing this?Thanks in advance for any help!
Trying to update an IAP price on Google Play Store and I'm locked from making any changes because I need to migrate to wards the OneTimeProduct REST API (away from the current InAppProduct resource).Taking a look at the RevenueCat Google Play Store configuration docs, it looks like it still uses the inappproducts API.Is there any plans to migrate to the new OneTimeProduct API so that we can migrate away from the old and be unblocked to manage our prices?
My app offers a subscription that awards in-app credits on a recurring basis. These credits when used in the app cost me operational costs, with a relatively low profit margin. Occasionally a user will subscribe, use most or all of their credits incurring me significant charges, then request a refund which so far has been granted in full every single time by Apple.I have enabled sending consumption data to Apple, as well as tried setting the refund preference to decline refunds to avoid incurring further cash loss. I then contacted Apple, and they directly told me there is nothing I can do, and they do not have any suggestions. Perhaps this abuse is allowed by Apple, and we just have to price it in to our service cost, but I was wondering if anyone else has experienced something similar or if you have any genuine suggestions Apple isn’t sharing with me?
I had the design I wanted for phone and then switched to a tablet thinking that you all saved the phone version. I went to adjust that because it didn’t fit right on a tablet, and it messed up my phone design. Do you all not have a way to do phone and tablet separately? I’m not well versed with the design but on varying platforms, when I switch it has a separation for phone and tablet and one doesn’t affect the other.
Hi guys/gals, Does anyone know if I have to have a mobile app in order to use RevenueCat? I have a React/Node web app that I want to use RevenueCat has my paywall provider but I dont’ have a mobile app at the moment. Please advise or ask more questions about my situation. Thanks!-Colin
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.