Get help with anything related to RevenueCat.
Recently active
Our user journey may allow users to experience multiple trials of our subscription product. We are using the RevenueCat API to grant users an entitlement for a custom time frame. Unfortunately after one successful request, subsequent requests no longer create a new entitlement for the user. Instead it returns successfully with the old entitlement that was granted. Request 1 that grants the initial enitlement const resp = await fetch( `https://api.revenuecat.com/v1/subscribers/${userId}/entitlements/premium/promotional`, { method: 'POST', headers: { Authorization: `Bearer ${REVENUECAT_API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ end_time_ms: Date.now() + 1000 * 60 * 60 * 24, }), } );Returns { "entitlements": {"premium": { "expires_date":"2025-02-01T04:57:50Z", "grace_period_expires_date":null, "product_identif
How do I activate the sandbox? I've already logged in with Revenue and Google, but out of 10 sales on the 6th, I got an error. I contacted Google but was unsuccessful.Has anyone else experienced this?
Upgrade from a 1-month to a 6-month subscriptionWe want to offer users who have already subscribed an upgrade from a 1-month plan to a 6-month plan. When we show them our custom (React Native) paywall, no Offering or Product is displayed. let offerings = await Purchases.getOfferings();What is the best way to set this up?- Do we need to set up a new Offering with RevenueCat?- Do we need a new Targeting to show this new Offering only to subscribed customers?- Or should we just choose and display the offering oursleves like so offerings.all['my_six_month']Thanks in advanceKai
Hi,trying to make use of RevenueCat but I won’t get it to work on Android but only iOS.I am getting when trying to purchase a product on a simulator and on my Android device with:try { await Purchases.purchaseProduct('test_4weeks_4_extend'); } catch (e) { print(e); }D/[Purchases] - DEBUG(11123): ℹ️ Requesting products from the store with identifiers: test_4weeks_4_extendD/[Purchases] - DEBUG(11123): ℹ️ Products request finished for test_4weeks_4_extendI/flutter (11123): PlatformException(5, The product is not available for purchase., {code: 5, message: The product is not available for purchase., readableErrorCode: ProductNotAvailableForPurchaseError, readable_error_code: ProductNotAvailableForPurchaseError, underlyingErrorMessage: Couldn't find product.}, null)I have followed the complete setup and created the keys and they are successfully on the platform and also connection to Google is working for Developer Connection.The identifiers are matching the same on P
Due to an error on your side, an issue has simultaneously occurred within our service.We request compensation for any revenue-related losses caused by this issue.
Our app was rejected by apple because of a bad payment experience with the paywall pageWhen a user taps on the CTA button on the Paywall It loads the IOS payment sheet. User enters the password to confirm the purchase on the first one, a second IOS payment sheet is shown almost immediately. User re-enters the password a second time Payment successful. Note: The paywall is NOT what is been shown twice, its the IOS payment sheet that prompts the user to make a payment. In another thread, the solution was This is actually an Apple sandbox quirk. Other developers and myself have also experienced seeing the payment sheet twice (sometimes even more) when performing a test purchase. Nothing to worry about here! The production environment once you ship your app is much more stable.This was not helpful and doesn't solve the problem because our app was rejected. We can ship it to the Appstore.If this is an expected behaviour in the sandbox environment, how do we convince apple to pass the approv
I have a question about the TRANSFER event flow. I see this in the docs -For example, if UserA buys a subscription, then UserB logs into your app on the same device and restores transactions, UserB would now have access to the subscription and it would be revoked from UserA.Currently I’m implementing the handling of the TRANSFER event, so right now when trying to transfer our handler is returning a 500 because it’s not checking for the ids in the right place, which is fine, I can fix that. But even with the 500 response I see that UserB now has the entitlement but it has not being revoked for UserA. Is fixing this minor error so we now return 200 if the ids are valid enough to trigger UserA’s entitlement being revoked?We have some tracking of entitlements our side that we’ll be updating since I understand that the TRANSFER event doesn’t trigger any follow up webhooks but just wanted to clarify this point.Thanks!
Hi, We noticed that some users are missing in the export file we have on our S3.The user exists on RC dashboard when we look in the Customers tab.Do you know how is it possible?Just in case it has an impact, we didn’t select the option “Receive new and updated transactions only” so we receive everything each time. Thank you for your help,
I’m facing an issue with a white screen that pops up intermittently while testing RevenueCat integration in my app, especially when updating subscription status or making API calls. It only happens after these actions, and I’ve already tried clearing cache and reinstalling the app.I’ve double-checked the SDK setup and the subscription flow, but the problem persists. Anyone else dealt with this? Any tips on how to debug or fix it?
I’m testing my iOS app (designed for iPhone/iPad) on Apple Silicon, and when trying to purchase a subscription I get the next error:ERROR: 💰 Product purchase for 'pro_plan_subscription' failed with error: PurchasesError(error: There was an unknown backend error., userInfo: ["NSLocalizedDescription": "There was an unknown backend error. The API key is not intended for the Platform. (7810)", "NSUnderlyingError": Error Domain=RevenueCat.BackendErrorCode Code=-1 "The API key is not intended for the Platform. (7810)" UserInfo={rc_backend_error_code=7810, NSLocalizedDescription=The API key is not intended for the Platform. (7810)}, "rc_backend_error_code": 7810, "readable_error_code": "UNKNOWN_BACKEND_ERROR", "source_file": "RevenueCat/HTTPClient.swift:886", "rc_response_status_code": 403, "source_function": "parseUnsuccessfulResponse()"]) I’ve checked the RevenueCat admin dashboard and ensured there’s no separate option for Mac App Store. There’s only one unified AppStore option for iOS, m
What happens when I delete subscriptions in App Store Connect?Does `customerInfo.entitlements[“pro”]?.isActive` continue to return `true`?I want to stop renewing subscriptions, but still provide service to paid users during their validity period.
I’m setting up RevenueCat for the first time and have come across a handful of documentation bugs that I’d like to report. What’s the best place to report them?
Hi.I have used the Revenuecat extension for firebase for a while, but have not found the use of it as I cant see custom claims in the idTokenResult.I want to use custom claims to only allow users with subscription to upload files and then use this custom claims on firestore rules instead of only checking permission inside the application.I have configured the extension in revenuecat and enabled custom claims in the extension:Should custom claims be set in Firebase Auth with the user's active entitlements? DescriptionENABLEDBut when i fetch the entitlements in application, i only get theese:user?.getIdTokenResult(true).then((value) => print(value));{ "firebase":{ "identities":{ "email":[ "x" ] }, "sign_in_provider":"password" }, "user_id":"x", "aud":"x-app", "exp":"x", "iat":"x", "iss":"x", "sub":"x", "email":"x", "email_verified":true, "auth_time":"x"}Any suggestions, or cant revenuecat set custom claims that i can use
I am developing an application in Kotlin with Jetpack Compose and implementing the code to retrieve subscription offers, which include three different plans.I have uploaded the app to Google Play Store in production to test its functionality on a real device. However, when trying to fetch the products, an error occurs, even though the configuration appears to be correct.@HiltViewModelclass PurchasesViewModel @Inject constructor() : ViewModel() { var informationState: InformationUiState by mutableStateOf(InformationUiState.Hidden()) private set var offeringState: Offering? by mutableStateOf(null) private set var selectedPackageState: Package? by mutableStateOf(null) private set init { loadOfferings() } private fun loadOfferings() { Purchases.sharedInstance.getOfferingsWith( onSuccess = { offerings -> val offering: Offering? = offerings.current offeringState = offering selected
How to set up the free trial offer in Flutter and Google Play? In my Google Play Store Console, I have setup the base plan. I have then setup a trial 7 day offer. The offer is now separate from the base ID. When I use the base ID for my product offerings, it doesn’t automatically grab the Google Play offer. How do you implement this, is there a partial example to follow?From previous post: I don’t have a full example, but sharing some parts of the code to see if it helps (let me know if it doesn’t).The flutter repository has a sample app called magic weather with a paywall → https://github.com/RevenueCat/purchases-flutter/blob/main/revenuecat_examples/MagicWeather/lib/src/views/paywall.dartIt gets the store product from the available offering and uses it to render the paywall → https://github.com/RevenueCat/purchases-flutter/blob/main/revenuecat_examples/MagicWeather/lib/src/views/paywall.dart#L67-L79You can use `final freeOffer = storeProduct.subscriptionOptions?.firstWhere((option) =
Is revenuecat like 1% additional commission from the stripe credit card commission rate? Just curious with the system
Is the following still required in my AndroidManifest.xml?<uses-permission android:name="com.android.vending.BILLING"/>the Flutter installation guide doesn’t mention it but I’m following a video which explicitly recommends it.It’s mentioned a couple of times in relation to react native.
I recently implemented RevenueCat in an existing app.I noticed that when a user makes any purchase through the RevenueCat SDK, the "Customer Profile" screen on the dashboard shows the purchase history (including consumable items) prior to the introduction of RevenueCat.How is this accomplished?In StoreKit 2, you cannot get the purchase history of consumable items by `Transaction.all` (for iOS 17 and below).Also, is there a way to retrieve past purchase history, including consumable items, for users who have not yet purchased anything after introducing RevenueCat?It appears that `Purchases.shared.customerInfo().nonSubscriptions` does not return a history of past purchases of consumable items for users who have not yet purchased anything after introducing RevenueCat.
Hey!I wanted to make sure I understand the recommended approach of handling in-app purchases.Let’s assume my app has only one app store in-app purchase that charges on per-month basis.The app itself will run on IOS and is written in swift.My current authentication flow is as follows:the user opens the app and can log in or register via firebase with: Apple Account, Google Account, regular email + password account.What I don’t really understand is:Should I set the revenue cat userID to the firebase user ID in this case?When I set the userID to firebase user ID will the subscription only be active for this single account that was used to log in? Is there already some implementation that returns or informs the app when user is signed in but his purchase (membership) expired? How can you implement a 7-day trial in this case? The purchase is made by an apple ID account, but the beneficiary is the actual account that was used to log in in this case? Is there some event that can notify the fi
Hi,I have just gotten rejection from Apple because the IOS pop up sheet showed up once to subscribe and after subscription, the IOS payment pop up sheet showed up again which is twice. I have been able to replicate this in testflight and sandbox but I dont know how to solve this and go ahead.Can someone help please- It is so frustrating as it is Revenue cat prompting the sheet twice.
Hi, so i set up paywall of catrevenue to make things easier, but nothing easy for now. First, when i create the paywall i put an image on top. But i cant define what of the image should be shown, Its cropped and zoomed (for me) very randomly. The other issues im running into is that the Paywall is showing up when i Test it on my Iphone. On my Android Emulator it works
Hi, I cannot fetch offerings in Xcode, I set a NON Consumable IAP, and on product → store status there is a message: could not check Connection issue.Make sure the App Store Connect API credentials are configured properly.How can I handle this?
The dashboard only shows data from the last 28 days. I’ve applied the following filter, but the results don’t seem consistent. Is there another way to achieve this?
Hello, I am showing PaywallDialog with Jetpack Compose in my Android project. I also did my localization operations from Paywall builder and saved it, but in the application it looks like the following
Hello,I have an app (written in React Native) and use RevenueCatSdk to facilitate my IAP purchases. In my app I want to set an IAP price for a profile to unlock it. I can create 3 different IAPs to represent the different price tiers. When a user goes to buy the profile I will get a webhook saying the user bought lets call it “profile_access_first_tier” however, I won’t know what profile they unlocked. I will know who the purchaser is, and the product, but the actual product can apply to multiple profile unlocks. Is there a way, when the purchase is happening from the frontend to attach a custom attribute that will be sent with the “NON_RENEWING_PURCHASE” webhook? Such as attaching a custom attribute like “sellerId” would be useful so I can then give the user access to that seller’s profile? Yes I can solve this in a different way by storing something saying the profile the user is on before the purchase happens then link the two in the webhook, but I think this would be more reliable
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.