Discussion and help from anything related to RevenueCat.
Recently active
We are offering the same subscription at different price levels through different subscriptions in Google Play.So instead of updating prices of a single subscription by country we have the same subscription at different price levels available in certain countries only.RC only allows one product per package, so we have to set up dynamic package selection in our code.We are wondering what data we retrieve from RC based on the user requesting an offering with multiple packages in their country.For the offering, when we explicitly request a package / store product that is not available in the user’s country will it return null or will it resolve?Currently we are getting mixed results from the api, but are not sure if some are just caused by some subscriptions being available to fetch for RC and others’s not bc they have been created at different times - thus this post.
Hello, I’m using React Native and getting this issue. I have seen it in a previous post but looks like the SDK has been updated since then. "react-native-purchases": "^8.5.2", "react-native-purchases-ui": "^8.5.2",
Is it possible for a paywall (SwiftUI) to show introductory / trial offers? I’ve browsed through documentation and the RC API. This seems like such a popular request I’m surprised that this is so hard to find.
For .NET MAUI developers that would like to use Android and iOS RevenueCat functionality we have created a wrapper that is really easy to usehttps://github.com/Kebechet/Maui.RevenueCat.InAppBilling https://www.nuget.org/packages/Kebechet.Maui.RevenueCat.InAppBilling/ The wrapper serves as an abstraction for both platforms and abstracts away the need for you to use platform-specific code. Bindings used by the wrapper are:Android: https://github.com/Kebechet/Maui.RevenueCat.InAppBilling/tree/main/src/Maui.RevenueCat.AndroidiOS: https://github.com/Kebechet/Maui.RevenueCat.InAppBilling/tree/main/src/Maui.RevenueCat.iOS This project was created because of the mobile app we created and thus it will be supported as long as the app itself.
Lately, I’ve been getting more messages from users where fetching offers from RC does not work.They are getting the error (on Android):Unable to resolve host "api.revenuecat.com": No address associated with hostnameCode: 10(Error performing request.).Is this ALWAYS related to the user’s devices or network?What the best way to help users getting this error?Cheers,Chris
Hello!I am moving from my Stripe Web PayLink implementation to Revenue Cat. I want to have everything managed my RevenueCat.I have create an entire and simple Web PayLink configuration that duplicate (or similar to) the one I have on Stripe.However, just this no-code implementation is erroneous.The error code returned is: 16. The error is trigger just right after I entered / confirmed the billing email address.My PayWall address, where 1 is the user id, is the following:https://pay.rev.cat/yhhjrzrccqdonyxj/1 Screenshot of the error:Thank you!
My app was recently rejected during review due to missing currency symbols in the subscription pricing. I display the price string directly from the RevenueCat SDK, which should fetch details from the Play Store API. Previously, my app was rejected because the paywall wasn't loading correctly. In my appeal to the review team, I explained that this issue can occur when users aren't logged into the Play Store or are using an outdated version. While they approved that appeal, I received this new rejection upon resubmission. I'm concerned that another rejection could lead to app suspension.
Hi, it's my first time setting up RevenueCat. So I just want to be sure I won't face an issue on production.I have one subscription which can be monthly or annual, each being its own product. I've set up both products as an entitlement, while testing on sandbox environment I noticed a potential issue. When I sign up for Monthly plan then switch to Annual Plan and cancel the subscription, the `willRenew` flag remains true until the monthly plan reaches the expiration date, even though it won't renew since it's been cancelled. This is also reflected on the Dashboard so we see: - Started a subscription of `monthly` ✔- Changed their renewal preference to `annual`✔- Opted-out of renewal for `monthly` ✔And on the Entitlements card: `monthly.product.id`Subscription renews in X minutes it only updates the dashboard info and the willRenew flag once the expiration time has been reachedIs this just a sandbox behavior ? If this is the expected behavior, how can I check if it won't renew?I'd like t
When trying to understand unexpected user journeys involving cancelation / re-subscription for iOS users, it would be really helpful to identify when a user had changed their subscription in iOS settings vs. an in-app purchase. Is there a way to distinguish these just from looking at a purchase event in RevenueCat?
Hey, I have setup a RevenueCat and before making any purchase attempt, the price shown is in USD. Once I press buy, I am prompted to login to my apple account and after the login, the correct currency is selected. In the app the currency updates after I close and reopen the app. Is there a possibility to change the default currency to EUR from USD? My app is not even available in any country that uses USD as legal tender so it is confusing to my users. I have so far only tested in Testflight on two devices.
Hey, I am setting up Revenue Cat together with Superwall. I now created a custom purchase controller for superwall, according to their docs, that basically uses the RC SDK to handle purchases. I now want to identify users using our internal user UUID. The goal is that a subscription is tied to a user account and is active as soon as a user logs in on a new device. Do I have to login on Superwall AND RC? Or is Superwall enough and the information is passed on to RC?In Flutter code: // This?Superwall.shared.identify(user.id);await Purchases.logIn(user.id);Or just this?Superwall.shared.identify(user.id);Thanks!
Hi guys, I’m trying to test purchase on Xcode Simulator, but encountered “Error fetching offerings - 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). ”I’m using a Local StoreKitConfiguration, and I tried both the same or different productID with revenueCat and Apple Store Connect. (not sure whether the local configuration should be the same as those two) The StoreKitTestCertificate is renewed and updated to revenueCat each time I try. Upload Subscription Offers Key to revenueCat. The configuration is selected in the duplicated schemeSeems like the configuration file is not working, I checked there was a post described a similar issue, but not solve my problem. Can you guys help me with this?
I'm not sure what to do with this point. When I look at the configuration of my apps, they all have Store Status OK with a green dot. I have set both the APIkey and the entitlementsID in the app and I know they are correct. Running on iOS. I'm testing with an app that I've had on the App Store for quite awhile so I'm sure it's in-app purchase is set up correctly. I've got the P8 key file from App Store Connect set up. I'm still getting this message when I try and run the MagicwWeather app to test. 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
Hi everyone,I’ve been trying to wrap my head around subscription management across different devices and Apple IDs but am struggling to fully understand how it works in certain scenarios. I’m new to managing subscriptions and would appreciate any guidance or insights.Here’s the scenario:General ContextI have an app where users can:Purchase subscriptions. Log in to their accounts via the app or web. Access premium features once subscribed.Let’s break this into a few cases to illustrate the challenges I’m facing:Case 1: Same Apple ID, Different DevicesDevice A: A user (let’s call them User A) installs the app, signs up, and purchases a paid plan using Apple ID A. User A can log in with their credentials on Device A (or web) and access premium features without any issues. Device B: User A logs in to their account on a second device (Device B) using the same credentials. Here’s the problem: When I test this in a sandbox environment and try to upgrade the subscription from Device B, the
My app offers an in app product which can be purchased multiple times but if the user have already purchased once i’m getting following error:`Ignoring purchase request for already subscribed package`I’ve set the product to Consumable in Revenue Cat Also set the following tick mark in google play console: Note that this is a lifetime product i don’t charge on monthly or yearly bases.Ps:i’m using paywall template. now tell me that do i need to write my own paywall screen in Jetpack Compose or some configuration changes will fix this?
The email:Hello,It looks like you’re still using version 4 of the Apple Search Ads Campaign Management API. After February 11, 2025, version 4 will no longer be operable.Move to version 5 of the Campaign Management API before the deadline to avoid any disruption to your campaigns and reporting.!--> I think this could be related to the Revenue Cat + Apple Search Ads integration. Do I need to do something on my end to use the v5 or this is already handled by RC?I'm using react-native-purchases v7.28.1Thanks!
I'm facing a challenge with managing trial offers for anonymous users on new devices The ProblemRevenueCat’s checkTrialOrIntroductoryEligibility is iOS-only, so I’ve built a workaround using allPurchasedProductIdentifiers to determine trial eligibility. It works like this: const customerInfo = (await Purchases.getCustomerInfo()).customerInfo;const numPurchases = customerInfo.allPurchasedProductIdentifiers.length;if (numPurchases > 0) { setShowTrialOffer(false);} This works as long as the user stays on the same device because RevenueCat caches the Anonymous ID. However, if the user:Starts a free trial Cancels the trial before it ends Deletes and reinstalls the app (or switches devices)RevenueCat creates a new Anonymous ID when the user reopens the app. As a result, allPurchasedProductIdentifiers will be empty. This allows the user to start another free trial, repeating the process indefinitely. Potential Solution: syncPurchasesCalling restorePurchases could prevent this, but it may
I'm building a web to app funnel that transitions users from my web app to my iOS app, and I'm running into a challenge with purchase synchronization. Currently, I have two separate RevenueCat projects:Web Purchases: Managed under RevenueCat Billing with its own API key. iOS App: Managed under RevenueCat iOS with a separate API key.When a user completes a purchase on the web, I want to ensure that once they transition to the iOS app, their entitlements (or purchase status) are correctly recognized and loaded.My Questions: Is it possible to connect or sync the purchase data between these two RevenueCat projects? If so, what’s the recommended approach to ensure that a web purchase reflects properly in the iOS app? Are there best practices or workarounds for handling separate API keys and project configurations when implementing a web-to-app purchase funnel? For example, can I share user identifiers or purchase tokens between the two projects? Has anyone implemented a similar setup? I
I checked a couple of articles including this one about how to sync between mobile app & web app. However, I am curious if there’s a preferred user flow when opening the mobile app for the first time if signed up on web. My concern is too much stuff to wade through just to get to the app content.Today, I currently display a Paywall immediately when opening. After subscription is successful, we make them login - Google or Apple oAuth options only. At this time we call the RevenueCat `login` method so the email is linked to our backend auth `userId`. At this point - on mobile - the user & our DB is in sync. On Web, all the user would have to do is login and then we check the RevenueCat SDK customer info to see if they were a mobile user. However, if the user signs up on web & then opens on Mobile, is the solution to have an intermediate screen that offers “existing user login” or “continue for free” option which triggers the paywall? I don’t know that I like the sound
Hello,I am testing an app as external tester and I managed to subscribe to a monthly subscription. Now, I want to test the user subscription deletion and re-subscription. I see that in Sandbox environment it shows me that subscription will be renewed or expired in 1 day, not 5 minutes.Even if I delete the customer from RevenueCat and restart an app, after first paywall page, my iPhone shows me that I have a valid subscription and I can continue it, but I am unable to restart a full subscription cycle again.Could you please help me? When I was testing subscription as internal tester, the expiration time was 5 minutes so I was able to restart the process, is it connected with the fact I am not internal tester but external? Thanks!
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.
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.