Discussion and help from anything related to RevenueCat.
Recently active
I am using the newly available rc_subscription_status in Amplitude to create charts on subscriptions, but I don’t seem to get to the same numbers as in the Overview or Charts sections of RevenueCat.For example, I am using the rc_subscription_status = active and comparing to the “Active Subscriptions” in RevenueCat charts, and there is a significant difference.Also checked for rc_subscription_status = trial, which is also very far from the count in “Active Trials” (a lot higher).Is there a formula that should be applied? Like: to get the Active Subscriptions, we should substract subscriptions with the cancelled (or other?) status?Some documentation on how charts are calculated in revenuecat would be very useful in order to replicate the indicators in other tools like Amplitude or Mixpanel.
Swift Package Manager,version4.39.0。 some users Why don't have callbacks?
I have an app that user can use to create new videos. I want to offer two plans, Lite and Pro. Lite subscription allows to create 5 videos / week. Pro version allows unlimited videos per week. How to implement this kind of subscription model? The main challenge seems to be checking how many videos are created during a billing cycle. Is there a way to get the current billing cycle information from the API?
Sorry for the long title! Basically, I am trying to just do the basic storekit-configuration json in my react native and expo project. I have the storekit-configuration.json that I copied and pasted from an Xcode project, but I am getting the following error: [Error: There is an issue with your configuration. Check the underlying error for more details. There's a problem with your configuration. None of the products registered in the RevenueCat dashboard could be fetched from App Store Connect (or the StoreKit Configuration file if one is being used). To be fair, I have been getting this error even before I tried to use the configuration file, but I thought this would help. I’ve seen some similar issues and followed what they said, but it still will not work. Has anyone had luck with this?
The functionality I am looking for is the user does not have to log in, they can just choose a subscription plan, double click and pay with Apple Pay. Why are we logging in manually with our email and password in this tutorial?Here’s how the user logs in:logIn(BuildContext context, String newAppUserID) async { try { await Purchases.logIn(newAppUserID); // user types in newAppUserId manually String appUserID = await Purchases.appUserID; // And we get an id of the user ... } on PlatformException catch (e) { ... }}
My Environment:iOS 17 SwiftUI RevenueCat 4.33.0 Xcode 15.2My Problem:I have set up two subscriptions in Apple App Store Connect and RevenueCat according to the documentation with one entitlement (“pro”), 2 products, packages and one offering. I have configured a paywall in the RevenueCat dashboard. In App Store Connect, I have configured Sandbox test users. In my App I use Sign-in with Apple to sign in with the test user and I use the Apple user ID to sign-in with the RC appUserID. In the RC debug overlay, I see the correct user ID and the former anonymous user ID. When I open the RevenueCatUI PaywallView in my App running in the simulator, I see the 2 offered subscriptions. Then I click the buy button and the Apple purchasing dialog opens with the chosen subscription for the Sandbox User. When I click to buy the subscription, I hear a “bing” sound (normally indicating a purchase). Then the Apple purchase dialog disappears and a progress indicator is visible in the purchase button of
Hi. Thanks in advance.I have simple question regarding apple sandbox behavior via revenuecat.I have monthly subscription and when I makePurchase monthly subscription, I can see it will auto-renew for 11 month then opted-outs (probably cancelled from apple)then expires.After expiration, when I re-purchase monthly again, then it opted-outs by 1 month.Is this as expected? Is there any this opted-out rules? thank you
Hello, I have configured my app (flutter) with revenue cat. I have two groups of subscriptions, those from v2 and the new ones from v3, on IOS. My problem is that the some of the previous subscriptions are not detected (either naturally or by restoring purchases), even though they are in the same entitlement. The purchase restoration function doesn't return any errors, just the customerInfo, with allPurchasesdProductIdentifiers, expired date … but one one them, the valid one, is missing. My revenue cat version is up to date (purchases_flutter 6.25.0). The rest of the functions work fine: purchasing, cross-platform restoration, link to the .... account. Can you help me? Thanks in advance
Added Facebook ads integration: https://www.revenuecat.com/docs/facebook-ads When I test events in sandbox only the ones with IDFA enabled are sent, even though $fbAnonId is set.This is reproducible every time IDFA is toggled on/off. Is this a bug? Cause from doing a research on this forum I found that IDFA should fallback to fbAnonId and send events regardless. I also have my Facebook ads up and running, and not receiving events from RevenueCat.
function_name: "ext-firestore-revenuecat-purchases-handler"severity: "DEBUG""Function execution took 6730 ms, finished with status code: 200" Logs are taken from Google Cloud Console, Revenue Cat extension 0.1.12.I have only 1 “Sandbox” customer, why RC function execution takes such an extremely long time?!! AppStore TestFlight / Sandbox auto-extends subscription each 5 minutes, and I have similar logs in Firestore (with RC Extension); in average, time varies from 800ms to 1200ms, and sometimes almost 7 seconds?Could you help please, is there any bugs / bottlenecks with this implementation? And how to disable “Debug”? Right now I am just testing, but I expect about 10,000 concurrent users and it can become really bad… thanks
We have bunch of applications live on App Store would like to create single subscription to unlock premium features on those all apps. We have gone through all documentation and understand about how we can implement same thing. We came out with this solution using RevenueCat.RevenueCat allows to create different apps under one project.We would like to know to evaluate our solution and want to confirm we are on right track or if you see any wrong implementation or if you have any better solution, then let us know.Solution:1. Create project "Single" and add all applications under that project2. Create one new subscription for each appFor exampleApplicationOne -> com.applicationone.singlesubscriptionApplicationTwo -> com.applicationtwo.singlesubscriptionApplicationThree -> com.applicationthree.singlesubscription4. Create new entitlement named "single-subscription" and add those products from all appsSo if that single-subscription product purchased from any app, it will unlock p
Hello,I saw that google play requires you to have the option in the app and also through a separate webpage for users to delete their account. I was wondering what is the go to approach in terms of managing the subscription? Do we have to cancel the user subscription before deleting the account and then also delete the customer from the revenuecat side, or de we just delete the customer and that’s it? What would be the order in which we execute this operations?Thank you,Radu.
Hi, sorry if the title is confusing, hard to explain in one line. I am using the React Native SDK and testing on an iOS device in sandbox.The problem I’m having is that Purchases.getCustomerInfo() seems to be returning an expired entitlement in the active list on the first app run after it’s expired. On all subsequent runs, it disappears as expected because it’s expired. But it means the app thinks the user still has an active entitlement for that first run when they should not.To try and explain the steps to reproduce:User purchases a subscription, which activates the entitlement. User uses the app during the subscription and all works as expected. User closes the app. Subscription expires (dashboard reports it is expired and entitlement is expired). User opens the app, which fetches customerInfo. The entitlement still comes back in customerInfo.entitlements.active at this time. User reloads the app or closes and reopens, which refetches customerInfo. The entitlement is no longer in c
Hi all,I hope I am not asking a question that has already been answered, if so I couldn’t find the answer. My app has multiple one off in-app purchases. I would like to display these for purchase. If I add them all to an offering is there some way to exclude products (packages) that have already been purchased from the paywall when displaying the offering? Thanks L
How to enable double tap to pay feature for users? We have integrated RevenueCat into our flutter app and configured the products successfully. We are still pre-launch so our testing is currently in Sandbox mode. Currently when testing the pay flow the user sees the paywall successfully, but there is no option to allow the user to double tap to pay. Instead there is a password field that the user must enter to authenticate their purchase. Is the double tap feature just not visible due to the Sandbox mode or is there something we’re missing? I’d rather use RevenueCat for managing user subscriptions than have another provider in front of RevenueCat that handles taking payments for users. Thanks in advance!
I have default paywall selected but I can see wrong paywall design on ios and android app. Alot of text is missing and not according to selected paywall as default.What can be the reason? please help, thanks
Hi, I was looking at sending customer information to firebase as described here. https://docs.revenuecat.com/docs/firebase-integration There are example security rules here rules_version = '2';service cloud.firestore { match /databases/{database}/documents { match /${param:REVENUECAT_CUSTOMERS_COLLECTION}/{uid} { allow read: if request.auth.uid == uid; } match /${param:REVENUECAT_EVENTS_COLLECTION}/{id} { allow read: if request.auth.uid == resource.app_user_id } }} Are these security rules meant to be copy/pasted directly into firebase? They flag up some syntax errors when I try to and I’m not sure how they are supposed to be changed. I think the “${param:REVENUECAT_EVENTS_COLLECTION}” is the problematic part.
Hi guys has anyone worked with revenue cat for subscriptions before ? I have a weird error saying 'Error configuring purchases:[Error: There is an issue with your configuration. Check the underlying error for more details. There's a problem with your configuration. None of the products registered in the RevenueCat dashboard could be fetched from App Store Connect (or the StoreKit Configuration file if one is being used). More information: https://rev.cat/why-are-offerings-empty]'I am using this custom hook for it. Is there any obvious mistake? I am using the Identifiers in Apple App Store Connect ‘’This is my setup in the revenue cat dashboard
Hiwe experience crashes on Android that affect our crash rate on Google Play which is bad.We are using "react-native-purchases": "7.1.0"Sentry:NullPointerExceptionParameter specified as non-null is null: method kotlin.jvm.internal.l.f, parameter packageIdentifiercom.revenuecat.purchases.hybridcommon.CommonKt in purchasePackage at line 6com.revenuecat.purchases.react.RNPurchasesModule in purchasePackage at line 87java.lang.reflect.Method in invokecom.facebook.react.bridge.JavaMethodWrapper in invoke at line 149com.facebook.react.bridge.JavaModuleWrapper in invoke at line 148com.facebook.jni.NativeRunnable in runandroid.os.Handler in handleCallback at line 938android.os.Handler in dispatchMessage at line 99com.facebook.react.bridge.queue.MessageQueueThreadHandler in dispatchMessage at line 1android.os.Looper in loop at line 250com.facebook.react.bridge.queue.MessageQueueThreadImpl$4 in run at line 38java.lang.Thread in run at line 923
Hi folks,We launched our first mobile app with subscriptions recently, and I’ve been keeping an eye the RevenueCat summary and reports to see how we’re doing. But I’m a little confused about how MRR is calculated, and which number to use for daily reporting.First, I’ve noticed that the MRR number in “Overview” is lower than the current MRR in the MRR chart. In our case, MRR in Overview is currently 6.5% lower than the latest MRR shown in Charts. Is there a reason these numbers don’t agree?Second, your older docs talk about MRR being calculated over a 28-day period, but the current docs no longer say this, and ARR is described as being MRR * 12. Our numbers in Charts confirm this: MRR = ARR * 12. So is MRR now calculated over a period of 365/12=30.42 days? Or is MRR fixed to a whole number of days (maybe 30?) and ARR is just a bit imprecise?Thanks for clarifying!-Abe
I have subscriptions in my app that include 7-day trials. RevenueCat handles introductory offers automatically, which is great. However, I want to provide additional custom promotional offers using Apple's "Promo Codes". Examples of these offers could be:3 months free 6 months freeMy question is: Does RevenueCat automatically manage the redemption and application of these custom promo codes? Or, do I need to handle this logic separately within my app?Any guidance or experience with this would be incredibly helpful!
I’m trying to synchronize a users subscriptions to my backend. I have a user with a sandbox subscriptions, I’m i’m trying to get information on their subscription status via:curl --request GET \ --url https://api.revenuecat.com/v2/projects/xxxxxxxx/customers/xxxx04c3-9caa-456f-9afc-f84cea6f2bf6/subscriptions \ --header 'Authorization: Bearer sk_xxxxxxxxxxxxxxxxxx'I get a 200 OK, but the items array is empty.{ "items": [], "next_page": null, "object": "list", "url": "https://api.revenuecat.com/v2/projects/xxxxxxx/customers/xxxxxxx-9caa-456f-9afc-f84cea6f2bf6/subscriptions"}Both the RC dashboard and SDK show me that the user has an active entitlement.The endpoint has an optional query parameter “environment” which can be set to “sandbox” (doesn’t make a difference) but at least it tells me it should work for sandbox? What am I missing here? Is there a secret query parameter similar to V1 that I need to set to get the sandbox purchases included here as well?
Hello! Here’s the api url: https://api.revenuecat.com/v2/projects/${PROJECT_ID}/customers/${CUSTOMER_ID}/subscriptionsCorrectly Added header: headers: {'Authorization': `Bearer ${AUTHORIZATION_TOKEN}`,'Content-Type': 'application/json'}Here’s the response:{ "items": [], "next_page": null, "object": "list", "url": "https://api.revenuecat.com/v2/projects/XXXXX/customers/$RCAnonymousID:0ee378058790XXXXXXXXXXXX/subscriptions"}Customer has Yearly ACTIVE Subscription in Production. Could you please help how to retrieve Subscription items?Thanks!
Here I am instantiating the Purchases SDK:So according the docs, if I do not provide the app user ID, the Revenuecat should generate one: But when I try to print the app user id, it is returning null? Also I am confused with Purchases.logIn() and Purchases.logOut() methods as I can not figure out their purpose. Can someone also explain the following scenarios: 1)Let’s say user purchases subscription successfully and exits the app(not log outs, just closes the app) and when the user opens the app later how do we know that user is premium user?2)Let’s say user purchases subscription successfully and accidentally deletes the app. When the user downloads the app again how we gonna restore his purchase? I know there is Purchases.restorePurchase() but how does it know if the user has purchases the subscription before? Can you please explain it? P.S. Do not mention the docs please explain it in a simple way if possible.
I’m trying to migrate to the RevenueCat paywall.I’m having an issue where I’m only seeing the “call to action” text on the button and not the “Call to action for an introductory offer”.Here’s my pay wall settings: And here’s what I’m seeing in the app when I test:If I tap the action button, I can see that it presents me with a free trial. Am I doing something wrong?
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.