Discussion and help from anything related to RevenueCat.
Recently active
I havé the same problem can you help me this is my email : bilalneufcink@gmail.com
Hi RevenueCat community,I'm working on a React Native app and running into a persistent issue with anonymous-to-identified user merging. Would love some help figuring out if this is expected behavior or something I'm doing wrong.Background & Initial SetupMy app originally required registration before any in-app purchase could be made. After an App Store rejection (purchases shouldn't require registration), I updated the flow to allow anonymous purchases first, with registration happening later.Restore Behavior: Transfer to new App User IDThe Flow I Want1. User launches app → anonymous purchase made (no account yet)2. User registers/signs in → anonymous ID merges with their account ✅ (this works fine)3. Subscription expires → user signs out4. User relaunches app → makes a new anonymous purchase5. User signs back into their existing account → new purchase should merge/transfer to their accountWhat's Actually HappeningStep 5 fails. After signing back in, the subscription shows as inac
Hi! We’re looking into moving a multitiered model and I’m currently designing some paywalls for this.I’d like to use the Footer component to be able to have the purchase button always visible at the bottom with the plan length choice on top of it, but I’m unable to get the selected tab to effect the contents of the footer.Is there any way to make this work currently?
Hey everyone,I came across this previous discussion about Apple’s new “monthly subscriptions with a 12-month commitment” feature:https://community.revenuecat.com/sdks-51/monthly-subscriptions-with-a-12-month-commitment-7629?tid=7629&fid=51Since that topic is now closed, I wanted to ask about the current state of support on the RevenueCat side.If we enable this billing option in App Store Connect for an existing yearly subscription product, should everything continue working normally in RevenueCat without any additional changes?Main things I’m wondering about:- Will entitlements continue behaving normally?- Will RevenueCat webhooks continue firing the same way?- Any differences in renewals / expiration handling?- Is there any way to detect this billing model via SDK or webhooks?- Any known issues or edge cases before enabling it in production?We rely pretty heavily on RevenueCat webhooks + entitlement logic, so I just want to make sure enabling this on Apple’s side won’t unexpectedl
Hi everyone,I’ve created my app in App Store Connect and set up both an in-app purchase and a subscription. However, the In-App Purchase section does not appear on the app version page, so I can’t attach the products for review.At the moment, both products show Developer Action Required, but inside each item everything seems filled out and ready for review. I’ve also confirmed that the tax forms, business forms, bank details, and other agreements are accepted.The app itself got accepted, but the in-app purchase/subscription was returned, so I’m trying to finalize the deployment and resubmit everything correctly.I already tried checking the app version and submission flow, but the IAP/subscription section still doesn’t show up. Has anyone run into this before? What usually needs to be fixed so the section becomes visible and I can submit the app together with the IAP/subscription for review?Thanks in advance.
Hello RevenueCat Support Team,We are experiencing an issue with the getOfferings() function in our iOS app (Swift/SwiftUI).Details:In our RevenueCat dashboard, we have two packages within the same Offering:Weekly package (subscription) Yearly package (subscription)Both products are properly registered and published in the App Store, and we have confirmed their "Approved" status in both App Store Connect and RevenueCat.However, when getOfferings() is called in production (App Store build), only the weekly package is returned. The yearly package is missing from the offerings response.We have confirmed that:Store product IDs match exactly with RevenueCat product IDs Entitlements are correctly linked to both products The Offering includes both packages Both products show "Approved" status in App Store Connect The issue does not reproduce in sandbox (debug builds or TestFlight) , both packages return correctly The issue does not reproduce when Xcode is attached to the production build Waiti
Hi there, for context I’ve already sent a support ticket regarding this issue but wanted to get better visibility here as it’s a pressing matter for us to be able to experiment in this manner. Our Setup:SDK: react-native-purchases 9.15.2 (iOS SDK 5.67.1)Platform: iOS (React Native / Expo)Placements: 9 placements defined in-app (e.g., x, x_upsell, y_upsell, etc.)Targeting Rule: One live catch-all rule (no audience conditions) that maps each placement to a specific control offering. The "for all other cases" fallback is set to No Offering, with default set for "when not using Placements."Experiment config: Paywall design experiment with all 9 placements specified (different offering only at the x placement, all others kept the same as the targeting rule). Fallback offerings A/B are set. Targeting by app_version >= X.X.X. Enrollment: 100%. The Problem:Experiments using new_and_existing enrollment mode do not actually apply to users, even when the user clearly matches the targeting cond
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
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.