Discussion and help from anything related to RevenueCat.
Recently active
I have an offering containing a monthly and a weekly subscription option.I want to test replacing weekly with yearly so I created yearly products with Apple and Google and attached them to RevenueCat.Then I created a new offering with my existing monthly and added my new annual. However, the annual product is not showing up as a part of my offering from the client (both by checking `.yearly` and `.availablePackages`.The store status is listed as “Ok” for the associated product.
Dear RevenueCat Support,I am currently developing a React Native application that uses the react-native-purchases library for handling in-app purchases. I have encountered an issue where the session related to the purchases remains active even after a user logs out.I am using Firebase to authenticate, and the SDK is not generating anonymous ID like (RC: …). But the same ID stored in (originalAppUserId: '8NG2...') which is the same as the firebase User, is forever stored in the cache unless the app is deleted and redownloaded. I am wondering what the best practice is that is not .logOut, due to creating anonymous ID. I am aware of restorePurchases but I am gearing away from a button to pass the conditional renders. Also, is it appropriate to leave the .logIn in the authStateChange function for logging in with saved authentication data or to use the login just during the initial login part of the code. Thanks for your guys help. I hope to hear back soon! APP.js function onAuthStateChang
When I try to query Purchases.getOfferings it results in an errorconst getPackages = async () => { try { const offerings = await Purchases.getOfferings(); if ( offerings.current !== null && offerings.current.availablePackages.length !== 0 ) { setPackages(offerings.current.availablePackages); } } catch (e) { Alert.alert('Error getting offers', e.message); }};getPackages();What have I done so far?I have my EAS local device & simulator build with bundleIdentifier: com.myapp.dev this includes installing the RevenueCat SDK I have TestFlight App setup with my bundleIdentifier : com.myapp.production Following the Product setup Guide, inside TestFlight App, I have my subscription group "Core" setup Inside Core subscription group, I have my "Subscriptions" added: Monthly & Annual which show in "Ready to Submit" status I setup my Revenue Cat API Inside Revenue Cat, I added Product. I was able to use the automate
Hi all,Hi all,Today, I installed an SDK in my brand new project. After receiving the app API, I configured the instance of Purchases:Purchases.logLevel = .verbose Purchases.configure(withAPIKey: "my app api here")During my first few runs, I noticed that the console outputted a lot of information, which was good. However, after I added the following code, the console stopped outputting anything:// Using Swift Concurrencydo { let offerings = try await Purchases.shared.offerings() // Display current offering with offerings.current} catch let error { // handle error}// Using Completion BlocksPurchases.shared.getOfferings { (offerings, error) in if let offerings { // Display current offering with offerings.current }}I added print functions in all brackets as a test to see if they would output anything, but they did not. Additionally, all the output that I had seen at the beginning was absent as well. I removed the second block of code (the one with concurrency) to see if
We currently have a single Project on our Account but plan to add a second, in order to have separate apps with separate subscriptions.I have seen a post which says that MTR is tracked at an Account level, not per app, but I’m not sure how Projects fit in.We will have one Account, with two Projects.Each of those Projects will have two Apps (one iOS, one Android). Is MTR tracked at an Account level or a Project level?
I want to test and offer discounts to user that previously had subscription and now are expired, but are still using the app. I only want to give discount once (sanse of urgency and also I dont't want to spam user all the time).Is there any way I can track if I have shown discount offer to user using just RevenueCat iOS SDK?
purchased_at_ms The time is not accurate We found a problem and ask if the value purchased_at_ms is correct. We tested purchases-ios SDK version 3.14.4 and found the problem. We tested an iPhone 13 Pro Max, iOS 15.1, without a SIM card. With iOS 17.1, purchases-ios SDK 4.31.6 has the same problem ”event_timestamp_ms": 1704269598747, "expiration_at_ms": 1737447173000, "purchased_at_ms": 1705824773000, three times are incorrect. Test Procedure Set the system time to 2024-1-21. A subscription purchase succeeds. purchased_at_ms's time is 2024-01-21 16:12:53 Using version 3.14.2 purchased_at_ms is 2024-01-03 15:35:06 Would you like to ask what is the problem caused by this? This one uses version 3.14.4This one uses version 3.14.2
We have been using RevenuCat Paywall 4.31.5. Not able to see Close button on Paywall.Please help on it. It happens only on Landscape mode. Portrait is good.
Hi guys, I'm trying to understand how to deal with "App User ID" and user accounts. All good if I have the next flow:A user downloads an app. The user register in the app Based on the registered user account, I can generate an "App User ID" and send it to RevenueCat. Then, based on the registered user account, I always have access to the user "App User ID" because it is stored in my database and mapped to the registered user account. Later on, users can restore purchases anytime after they log in to the app. Because again, I have his "App User ID" stored in my database.But what should I do if I have no user registration in the first place? Is it possible? For example:A user downloads an app. I generate some random "App User ID" based on the device UUIDD The user goes through onboarding screens with a PayWall in the end. The user makes a purchase. All that I have now, it's his "App User ID" mapped to his device UUID, and that is it. If the user changes the phone or tries to log in on
Hello there,I am trying to implement RevenueCat on my Android app which does not have a Login system.I was wondering in this case how do I manage the UserID to stay the same throughout app deletion, re-installations and across devices? On my iOS app I used NSUbiquitousKeyValueStore, so that it’s connected to the Apple ID and it works perfectly, but I can’t find a way on Kotlin. I tried the Auto Backup APIs, but while it works on the same device if I delete and re-install the app, it does not work across different devices with the same Google Account. I know that even if a new User ID is created the purchase will be transferred cause there is only one receipt, but is it correct that it sort of creates different users that bounce the purchase around? Thank you,Giada
Hi,When testing the subscriptions i noticed that on the subscription management page on the play store (Android) there is no option to choose a different subscription tier. In comparison on IOS if you go to the store to manage the subscription you have all tier options to choose from (pic below).Is there any setting to enable this on Android also or is it not possible at all to do this on android?
Hello Team,So getting straight to the point, I was managing (storing, updating) entitlements manually, i.e when user makes a purchase from my app, I retrieve all the entitlement ids and store it in firestore -> users collection in unlocked_entitlement field. Now I realised that client (my app) should not be used to update purchase details. I learnt about webhooks recently and thought of integrating it with firebase and use it as SSOT to detect purchases. How do I store all the customers data that have already made a purchase?
Hello,I am using revenuecat sdk for flutter, and i configure the sdk using the android and ios public sdk keys and the user id corresponding to the user.I am trying to understand what will be the impact if someone decompiles my app and gets hold of the public/private keys? Could they connect to the revenuecat on my behalf and make operations like cancel subscription or request refunds..etc? From my understanding there is nothing holding them back to perform these operations.Also I am interested to know, if in our systems we identify the user with a standard auto increment primary key like 1,2,3...etc, could this be an issue for someone to mess with us if they also have the private/public keys? I am thinking decompile the app, retrieve the public keys, initialise the sdk with random ints that represent the app users ids and try to cancel, refund their subscriptions. Is this something that would be possible?Thanks!
Hello, just new here, I would like to know, how is the monthly money transferred in my app transferred to my bank account?Do I have to add my bank? and how can I do this?
My apps have a family subscription which allows users to share subscriptions to other users and it’s not restricted on a platform i.e users can share subscriptions to anyone be in Android or iOS. Is there a way to manage entitlements for users who have had their subscriptions shared by someone else. TIA!P.S I do have a backend API managing these apps so the user who is sharing a subscription will hit an endpoint to create a share a subscription to another user. I just want to know if there is a way I can use the API to create an entitlement for the shared user
I’m migrating an iOS app with a legacy user ID system. Currently, the user IDs are stored locally on-device (in the keychain), and I will be introducing a way to create a real account that can be used across devices (it will be Firebase Auth). I think I have a migration path designed, but want to check I’m not misunderstanding anything. Here’s how it would work:User launches new build of the app containing the new accounts implementation. If they are an existing user with a legacy device-local ID, I log them in to RevenueCat with that ID for continuity until a future point where they decide to create an account. If they are a new user as of the introduction of the new accounts implementation, I log them into RevenueCat as anonymous. They can subscribe and do whatever they want while in the anonymous state. When a user comes to create an account, I create it using Firebase Auth, immediately log them into RevenueCat using the new user ID, and then call `syncPurchases`.My assumption on th
Hello,I have an app with multiple creators and users can subscribe to many creators individually. Each creator is a separate subscription group in the App Store, so multi-sub support shouldn’t be an issue on Apple’s side. Each creator may have multiple products (monthly, annual, promotional, etc). Here is my setup:Creator A Apple: group_A with product_A RevenueCat: offer_A with monthly package containing product_A and entitlement_A Creator B Apple: group_B with product_B RevenueCat: offer_B with monthly package containing product_B and entitlement_B When a user purchases A, they see product_A in Apple and I see entitlement_A in RC. When a user purchases B, they see a success message on their device. Users sees both product_A and product_B in Apple, but I don’t see entitlement_B in RC. Only entitlement_A is in RC.What am I doing wrong? Is my RC setup wrong?
tl;dr: Is there any way for me to turn off the auto-renewing, so the subscription ends after a month? Hello,I have a pretty small app, so I’m still pretty new to RevenueCat.I get slack messages when certain things happen in my app such as new accounts created, subscriptions or trial starts, accounts deleted, etc. I got a notification that user xyz created an account. Great. Then they started a monthly subscription. Even better! Then I got a notification that they deleted their account. I was going to get their email from firebase to let them know they started an auto-renewing subscription, but since they deleted their account I don’t have any way of contacting them. I don’t want this person to waste a few dollars a month on an app that they don’t even have an account for anymore. Is there any way for me to turn off the auto-renewing, so the subscription ends after a month? I am also afraid of this user realizing this after a few months and leaving my app a poor review.ThanksBrad
Hi,I’m trying to setup RevenueCat to handle my google play subscriptions, i have followed all the instructionss and everything is good,but i’m stuck on creating Play service credentials: I followed every step in this tutorial https://www.revenuecat.com/docs/creating-play-service-credentialsand also tried the Troubleshooting the credential validation section on this tutorial but the issue is still present. what can i do?
I would like to create a discount for my annual subscription, so in play console I did something like this:As you can see, "yearly-autorenewing" is my basic subscription and "yearly-autorenewing-discount" is a discounted price.And my question is what am I doing wrong here by adding discount to my subscription as a product:Does this have to do with the fact that the discount is "nested" in the basic offer?
Hello, I have been trying to connect RevenueCat to my application for almost 2 weeks. It works fine on the iOS version, but for some reason it doesn’t work on the android version.I am trying to implement a subscription type of scheme, without having any other “in-app products”.The issue I am facing is attached in the image below. What I tried to do to solve the issue: I have recreated the JSON credentials twice and tried to submit them again.I have checked that the email has the right access rights.I have published a closed testing version (heard that might help but it didn’t). Thanks a lot!
I want to discuss strategies for enhancing the trial conversion rate of my Android app.Recently, I've noticed a trend in our dashboard where a significant number of users are opting to cancel their trials. This observation has led me to consider the importance of understanding the reasons behind these cancellations.To gain better insights, I am interested in exploring methods to solicit feedback from users at the point of trial cancellation. Could someone advise if there is a mechanism within Revenue Cat’s SDK that triggers a callback when a user cancels their trial? If such a feature exists, it would be beneficial to implement a dialog box or a feedback form that prompts the user to share their reasons for cancellation.Understanding the factors contributing to trial cancellations is crucial for us to address any underlying issues and improve the user experience. Your guidance on how to effectively implement this feedback collection process would be greatly appreciated.
This is the error I am getting: W/[Purchases] - WARN(24005): There is a problem with your configuration in Play Store Developer Console. More info here: https://errors.rev.cat/configuring-products I am following the guide here: Have not had the app published yet. But the interesting thing is in RevenueCat Dashboard, I can IMPORT my iNAPP products. RevenueCat can identify a new product created in my Play console, import it without any issues but can’t fetch ProductDetails! Is this normal? Again, have not published my app in Closed testing yet, waiting for review to finish. But since I’m a license tester on a physical phone, and RevenueCat can fetch the products themselves from the Dashboard, maybe there is something else I am missing?
Hi - I’m using a custom customer list (app.revenuecat.com/lists) to try to detect customers whose subscription to a certain product has expired. My filters are: All customers (Slower)Latest Product contains ‘[my product here]’Status is ExpiredEmail is null (likely irrelevant to my question) My problem is that this list regularly contains customers whose subscription hasn’t actually expired! The list will say ‘status: expired’ for all of them, but for many of them when I click in to the specific customer, it shows (accurately) that their entitlement for the product in question is NOT expired, and will renew soon. (The ‘entitlements’ section says ‘Subscription renews on [date]’). If I check the list again after that date passes, the customer is no longer on the ‘expired’ list. I think (but am not 100% sure) that this is happening when the customer is within 24 hours of renewing? Like it marks them as ‘expired’ when they’re 24 hours away from an auto-renewal, then after that 24 hours, it
I'm relative new to revenue, and I moved from Google play because I have some issues with people not get the purchases recognized, that's why I decided to go with revenuecat, however I have some issues now, some users seems that they don't have "premium" or the purchases are not recognized, then if they go to restore purchase, everything works, and seems that this is only for some users, apparently in some headunit, tablets and made Xiaomi/Chinese brand, probably the play store is doing something weird but they can restore the purchases without a problem, so I'm wondering if there is something that revenuecat can do, or any suggestion?I initialize RC in the main application, and it doesn't seems like a sdk setup issue since this only happens to some users, what else I can try? Thanks a lot
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.