Get help with anything related to RevenueCat.
Recently active
Hello,We are encountering an issue when attempting to grant an entitlement to users. The entitlement works as expected the first time, but when we revoke it and grant it again (as part of our test suite), the entitlement does not update correctly. Specifically, the old entitlement is still showing, and the expiry dates are incorrect. Could you please provide some guidance on this issue? As you can see below, the start and end dates do not match as expected. https://api.revenuecat.com/v1/subscribers/2SANDBOX768/entitlements/Referrals/promotional{ "start_time_ms":1731403098690, "end_time_ms":1731403598690}{ "request_date": "2024-11-12T09:11:30Z", "request_date_ms": 1731402690493, "subscriber": { "entitlements": { "Referrals": { "expires_date": "2024-11-12T08:56:32Z", "grace_period_expires_date": null, "product_identifier": "rc_promo_Referrals_custom", "purchase_date": "2024-11-12T08:48:35Z"
Hello there,Consider this very simple scenario, User Installs the app → Anonymous ID is generated by RevenueCat (this ID is searchable in the RevenueCat’s Dashboard) → User perform a sign in and newAppUserID is provided by us. Now, the newly provided app ID is an alias and the anonymous ID is the Original App User ID. Everything is good!Now → User reinstalls the app, a new Anonymous ID is generated by RevenueCat (this ID is also searchable in the RevenueCat’s Dashboard), User perform a log in → RevenueCat detects that one of the customer already has this alias (Our own App User ID) and merges. Now what about the customer that was created during the re-install of the app?
Hi, in appstore my subscription is valid until 11th of August, after which i have a trial period that will last until 11th of September. However, in the app I just see end date as 11th of August, and examining active entitlements and purchases logs, calling sync and restore doesnt change the end date and sync the purchase properly. Any help is welcome, thank you!On restore purchase I tried with both appstore restore function and revenue cats restore and sync, but no luck so far. func restorePurchases() { Task { do { try? await AppStore.sync() var customerInfo = try await PurchaseManager.restorePurchases() self.onAppear() AlertService.showSuccessAlert(message: "Purchases Restored") } catch { print("Error restoring purchases: \(error.localizedDescription)") AlertService.showGenericAlert() } } }I am initializing revenue cat in main like this and
We have 2 plans: Plan A at $5/month or $100/year, and Plan B at $10/month or $200/year.In Google Console, I set up 2 subscriptions for Plan A and Plan B. Each subscription has 2 base plans, one for the monthly duration and one for the yearly duration. Is this correct?Can we set up 2 replacement modes where upgrading from Plan A to Plan B applies the CHARGE_PRORATED_PRICE mode, and downgrading from Plan B to Plan A applies the DEFERRED mode? This rule is used by default when I set up in the Apple Store. Is it possible to have different replacement modes, or can we only apply one replacement mode?
I want to create Offerings that include discounted prices for specific Products. For example, let's say I added a promotion option within a Product in the Store Console to offer customers a discount on an existing subscription product. Then, I want to create Offerings in RevenueCat that include the discounted price rather than the base price, and link it to the Paywall. However, it currently appears that when creating an Offering, I can only set the Product itself and cannot choose which promotion within the Product to use. If there's a way to make this possible, please let me know.FYI: we use own paywalls.
I have a react-native app that uses "react-native-purchases": "^8.2.3". I have followed the steps in the docs but I still can’t get it to work.iOS and Google works fine. This is how I initialize IAP:Purchases.configure({ apiKey: <key>, useAmazon: true})when I callconst products = await Purchases.getProducts([Subscriptions.MONTHLY, Subscriptions.ANNUALY], PRODUCT_CATEGORY.SUBSCRIPTION)I always get `Timeout error trying to get Amazon user data`
I have three monthly subscription plans: Silver Trainer, Gold Trainer, and Diamond Trainer, all grouped under a single entitlement named ‘trainer.’ However, users can currently subscribe to more than one plan at the same time. I want to restrict each user to only one active subscription among these three. How can I enforce this restriction?
Hello, im using the “Transfer to new app user id” method. I don't want to use a auth system in my app. Im using the Webhook to grant users 10 free credits on INITIAL_PURCHASE and tracking the original_app_user_id and aliases in my backend. There is a problem though, when I reinstall the app on Android, the original_app_user_id changes and the old one is not included in the aliases array. So basically I use the same google account on my device but revenuecat references a different user after reinstall of my app and after cancellation of the subscription. My expected behavior is that the userid is bound to one google account and I don’t want that entitlements get transferred if user logs in with another google account. The user should be able to restore purchase if logged in with the same google account the purchase was made on and it should not be bound to the device.how to handle this without creating a auth system in my app?thanks in advance
Hi,Is there a way to edit the style of a Paywall beside the web editor? On an iPhone 7 we get a big blank space on the top of the screen and the feature section is really small. You can see a video of what it looks like in the attached file.
HelloLately, every 10 out of 10 new apps are being rejected with the reason: Guideline 2.1 - Performance - App Completeness. The reviewer does not see the submitted subscriptions in the first version of the app.After discussing with other teams, it turns out that this issue is not only affecting me but others as well, though it’s not widespread. The app settings are correct. We’ve built over 80+ apps, but this issue only started occurring a couple of months ago. Interestingly, if you resubmit the app around 10 times, it might eventually get approved, as somehow the reviewer begins to see the subscriptions.Recent observations suggest that the problem isn’t with RevenueCat or the programming language itself—other teams have faced the same issue. What are you doing about this? How are you solving it? It’s becoming impossible to work, as app reviews are taking 2-3 weeks to complete.From what we’ve noticed, this issue became particularly noticeable around 2-3 months ago.
Hi all,New to RC - in fact, new to front-end and app development altogether. I am developing an app using Expo and using RevenueCat for IAP and subscription which from I can see, works quite well.I see that there’s the meta data for each offering which I can configure and then download from the client side but I can’t see any examples on how I can impact RevenueCatUI.PaywallFooterContainerView / Paywall is rendered?Is it a supported feature or would I have to manually create a paywall component using the meta data? The documentation shows how to do this on Kotlin only https://www.revenuecat.com/docs/tools/offering-metadata/offering-metadata-examples Thanks in advance,Ray.
Hi everyone, when a user creates / restores a subscription in the application - how can I get his store account (mail)? or any other identifier associated with the store acount/subscrition id. which will be the same on another device. is it possible? I didn't find it in documentation/examples.
Hey there, good morning!I have this React Native app, and I have 2 separate environments for it: TEST and PROD. Naturally, both environments have separate DBs and users. My app is not live yet and I'll soon be integrating with RevenueCat, and I have a few questions on how do that, especially when I'm using the TEST env.Question 1Should I have separate RevenueCat projects for TEST and PROD? I believe it's best to try and avoid this, as it sounds it might get too confusing, handling multiple API keys, etc. This is an indie project, btw.Question 2Is it a good practice to upload TEST builds to the app store for testing? I'm assuming the best practice for sandbox testing is to always use PROD builds.Question 3Assuming I'll have a single RevCat PROD project and doing sandbox testing with PROD builds, that means that my TEST builds won't have any connection with RevCat/stores whatsoever. How to handle the RevCat-related code in my TEST env?I guess I'll need to check for the TEST env and bypas
Hi folks,I'm experiencing some issues with handling pending purchases in our app. Let me first outline the scenario:We have a consumable product that users can purchase repeatedly. Each time a user makes a purchase, we store tokens in Firestore collection associated with their Firebase Auth userId. We've also integrated RevenueCat with Firestore to log purchase events and we are using the same AppUserID in revenue cat as the Firebase Auth userId to keep data in sync.The issue arises when I test purchases using the “Slow test card (approved after a few minutes)” option. With this, the purchase initially goes into a "pending" state. I know that reopening the app later will register the purchase under the correct AppUserID in both the RevenueCat dashboard and our Firestore collection tracking RevenueCat events.I've read articles suggesting solutions, such as setting up a listener or periodically calling getCustomerInfo() to monitor for updates. The goal would be to automate this so that i
I am integrating RevenueCat into both my iOS and Android applications, and I've encountered an issue with how purchases are assigned to customer IDs across different logins: On iOS: When I log in with Account A, set the customer ID to A (with revenuecat’s login), and make a purchase (not subscription), the purchase is correctly associated with customer ID A in the RevenueCat dashboard. However, when I log out and log in with Account B (in my app), set the customer ID to B (with revenuecat’s login), and make another purchase, the new purchase still gets associated with customer ID A instead of B. On Android: After logging out of Account A and logging in with Account B, the new purchase correctly associates with customer ID B as expected. I've already set the “Restore Purchases Behavior” in RevenueCat to “Leave purchases on the original App User ID”.Expected Behavior: My expectation is that purchases made by customer A should only be associated with customer ID A, and purchases by cust
Hello, It’s unclear from your documentation what the recommended approach is when a company has two subscription levels (e.g. Basic and Pro). The Entitlements documentation clearly shows two separate subscription levels of “gold” and “platinum” in the images (below), but then the Offerings documentation only really explains what to do if you have a single subscription level (and then you choose the Monthly, Annual, etc identifiers). The recommendations on the forums seems to go from “use separate offerings” to “use a custom identifier”. Based on the example image you have on the entitlements documentation below, I’m assuming you’d recommend keeping both tiers in a single offering, but using customer identifiers instead of the default ones (e.g. gold_monthly, gold_annual, platinum_life, etc).I’d strongly encourage you to add this 2-tier setup to your Offerings documentation, since it’s a very common scenario, and it was really unclear to me what the best approach was. Thank you!
I keep getting rejected in the app store for the same thing - a black screen on load. I’m unable to reproduce the error on my end no matter what I do, whether in the simulator or on a real device, new install or whatever. All the review team give me is a screenshot of a black screen and tell me that’s what they get on launch. I can’t fix it because I can’t reproduce it, all I can do is add a time out on the revenue cat loading so it still gets past that point.I get barely any information out of them as you can image, so I have no further specifics and normally they approve it after the second or third time anyway because it probably manages to load or something. But every time I add a new update half the time they reject it again for this same black screen issue..There’s literally zero problems with the app, the subscriptions or how they are set up - everything works perfectly. Why do they have a problem with revenuecat loading in their review environment?
We have subscriptions setup in our app however our client wants to see which users from our database are subscribed. Is there a way to pass in an email so that we can query the revenuecat API to get a list of subscribed users and email, or to see on the customers dashboard the emails of those who are subscribed? Any advice will be appreciated. :)
Hello RevenueCat Support,I’m currently running an experiment where new users are enrolled into a test offering, which provides a specific offer (e.g., Offering B). However, I’ve encountered an issue with returning users who reinstall the app:When a user who previously used the app and uninstalled it re-downloads, they are treated as a new user and enrolled into the test offering as expected. Upon purchasing within this test offering, their purchase history associates with their old user ID, causing them to revert to the default offering rather than retaining the test offering they were enrolled in.Could you advise on the best approach to avoid this issue so that users in this situation continue to receive the test offering (e.g., Offering B) even after restoring their previous purchases? I’d like to ensure experiment consistency and prevent unexpected default offering switches for returning users.Thank you for your guidance!
Hi everyone, I’m having a problem with RevenueCat on my application, it’s giving me this error: And on my Application it works in the Xcode environment how can I solve this problem thank you! :
Hi,In my Flutter app I am using ‘purchases_flutter’ (6.2.0) for IAP and everything is working fine with Google or Apple stores. However Amazon IAP is not working - getting following error when call ‘offerings = await Purchases.getOfferings();’:‘Timeout error trying to get Amazon user data’It seems that error returned from server side, any chance to clarify what can cause this error? I reviewed all configuration on both, RevenueCat and Amazon, everything seems according to docs.
I've set a 30-day trial for the annual plan and a 7-day trial for the monthly plan in Apple Store Connect. However, the paywall is not displaying the correct trial periods. it shows 7 days for annual and 14 days for monthly, How can I resolve this issue?
Hello,Whenever I submit a build, the Google Play Store (and possibly the App Store) automatically runs a series of tests they’ve created. If I submit multiple builds in a day, the number of test interactions can exceed the number of actual users who downloaded the app that day. I don’t have a login page, everybody can use my app anonymously.Is there any way to exclude these test users from the RevenueCat dashboard? They significantly skew the free trial start statistics.
Hello, I have detected what appears to be fraudulent activity. In October, one of our apps (older, unmaintained) reported unusually high revenue (~4x). I found the anomaly in Mixpanel: 49 in-app purchases where made from Tokyo between October 4 - 13th. Each of these users literally opened the app, started a 7-day free trial, and never returned. In every single case. Strangely, most of these trial converted, resulting ~4x the normal revenue. My app did not experience any boost in ratings or rank (49 downloads wouldn’t really move the needle here). But it did see a steep rise in revenue. As far as I’m aware, this “IAP attack” hasn’t occurred in any other app we operate, nor is there any impact on private API/backend resources. QuestionWhat kind of attack is this? Should we report it to Apple or might that backfire into a suspension? Would greatly appreciate any insight on this.
Hello! I am architecting the backend for a mobile application and despite reading through a lot of documentation posts, I feel I’m going in circles trying to grasp some subtle points and would love to get some answers before committing a lot of development. So I understand the basics of user IDs and anonymous user ids. Our app will ONLY allow users to login (and get an explicit User ID recorded in our database) AFTER a purchase.No problem: users get an anonymous ID, they sign in and we assign them a new, unique App User ID, which we record, and use login() to associate with their RC account. The question happens when the same user logs into a fresh device (or reinstalls). They get a new anonymous ID upon starting up, but then what happens when they “Restore purchases”?My hope is that we would be able to get access to the previously assigned App User ID. However, the documentation for Restoring Purchases mentions:If an anonymous ID restores and the owner of the receipt is an identified
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.