Discussion and help from anything related to RevenueCat.
Recently active
I’ve recently migrated my React Native application from using react-native-iap for handling in-app subscriptions to RevenueCat.I’m wondering how this migration affects existing users who already purchased a subscription through the old react-native-iap setup. Specifically: Will those users automatically retain access to their premium features once I switch to RevenueCat? If not, what steps do I need to take to ensure their previously active subscriptions are recognized in RevenueCat? Do I need to do anything special (such as syncing historical purchases or importing users) for RevenueCat to detect their old subscriptions? Additionally, my app already includes a “Restore Purchases” button that previously worked with react-native-iap.If I now connect that button to RevenueCat’s restore method (Purchases.restorePurchases()), will it correctly detect and restore subscriptions that were originally made before the migration?Basically, I want to make sure that users who paid under the old
I was wondering if there was an option (or if there isn’t, whether an option could be added) to use the in-app browser for app-to-web purchases instead of redirecting users to an external browser?Thanks and please let me know!
Hi,For each transaction of the same customer I get multiple duplicate customers in Stripe that all have the correct rc_customer_id and associated email.I thought a way to solve was to retrieve the stripe customer ID and pass it during the purchase process but i cant retrieve it from RC web billing sdk. Is there any other way ?Thanks for you help !
In our app we have basic and pro subscription and we are showing it with a regular price. Now we want to show a discounted subscription price to those user who is not using our app for a certain period. Maybe we will send a email with deeplink.If user click the deeplink app will trigger and after validating deeplink we will show the discounted price?What is the best way to do that?Currently, in the paywall I can see that there is a option to add promotional offer id. But it is for app store only. But for Android (Google Play Offer) where to set that? Check the below screenshot of Adapty. They have a nice option to add both id. Again clean documentation.Our expectation is two create two paywall or offering.One is regular another is 20 percent discount. For example blackfridayoffering. So in the blackfridaypaywall we want to connect those apple and google offers. We don’t want to use promo code as google promo code doesn’t provide discounted price of the subscription.
Hello! I am using RevenueCat in my React Native app. I have recently started using the custom attribute and targeting features to dynamically show different offering options to subsets of users. I would like to periodically run a reconciliation between RevenueCat and my own backend to make sure that the attributes set on users in RevenueCat are correct, according to data stored in my database. I’m unsure of how I can export custom attribute values for all users in the RevenueCat ecosystem. Things I’ve considered:Scheduled data exports - this seems to be driven by transactions, so users who haven’t made a purchase wouldn’t be included, and if a user’s attributes have changed from the time they last made a purchase, this wouldn’t be reflected. Using the Rest API https://api.revenuecat.com/v2/projects/{project_id}/customers. This endpoint doesn’t appear to return custom attributes, and only returns pages of 100 users. Manually creating a customer list and exporting via email. This seems m
RC is throwing “Must provide product parameter”and when i send pkg it throws “must provide discount parameter” error. both discount and pkg exist.snippet: const offerings = await Purchases.getOfferings(); if (offerings.current?.availablePackages?.length > 0) { const packages = offerings.current.availablePackages; for (const pkg of packages) { if (pkg.product && pkg.product.discounts && pkg.product.discounts.length > 0) { const discount = pkg.product.discounts[0]; // Use the original, unmodified product and discount objects if (discount && discount.identifier) { try { addLog(`Found discount for ${pkg.identifier}. Fetching offer...`); const paymentDiscount = await Purchases.getPromotionalOffer(pkg.product, discount); // Attach the promotional offer to the original package object
Hello,So today I got a notification that a user has purchased an in-app subscription from my app. Everything was fine, until I checked the product that was purchased. To my surprise, it was offered from an inactive paywall (was moved to inactive for more than month now, as I’ve created a new, more enhanced paywall with a totally different products).Does this mean that an inactive paywall may still be visible for some users, and it’s not guaranteed to show only the currently active one?
I am using purchases-kmp, and I keep getting Undefined symbol: _OBJC_CLASS_$_RCCommonFunctionality error when I build on Xcode.
I was wondering if this is intended or not? I have the AppsFlyer integration enabled and it sends events for Android / iOS subscriptions but NOT for RevenueCat web subscription events for my app.
I have a couple of products that require Web Billing :Mobile App (Apple & Android) Mapped app store products for RC Web Billing with the Stripe integration, but using RevenueCat Web to handle the user flow. RevenueCat has the “Stripe Account” in my project ✅ The products “disappeared” from Stripe when I upgraded the stripe environment. As far as i can tell, everything is working… I see the subscription active in my user’s sandbox details within RevenueCat NOW, I am adding a new tier of products - for WEB ONLY - there is no mobile app reference for this I did not setup products in Stripe because it seems to work without it. However, I noticed these docs expressing that i have to have products in Stripe In order for Stripe subscriptions to unlock entitlements, you must set a Product Identifier in the desired Offering to match a Stripe product ID exactly.So - what is the real answer?Yes you have to have products in stripe No you don’t need them, but it’s a recommended
My paywall is displaying completely fine. The issue is that the images I used on the dashboard are not populating on the actual paywall on my device. The images are blank. Not sure how to fix… any help is appreciated.
The documentation says this about the Test Store API key: Switching between Test Store and Real StoresTest Store uses a separate API key from your real store API keys. This allows you to control which store your app communicates with:Test Store API Key: Use during development and testing Platform Store API Keys (iOS, Android, etc.): Use for production buildsYou can find both types of keys in Project Settings > API keys in the RevenueCat dashboard. Switch between them by changing which key you pass to the SDK configuration. However, I can only see the “SDK Api Keys” here, not the Test Store API Key.Am I looking in the wrong place?
In App Store Connect, I’ve set up one subscription group that contains the following four auto-renewable subscriptions: PREMIUM – Monthly PREMIUM – Weekly SIGNATURE – Monthly SIGNATURE – Weekly im currently testing my application in Sandbox and Testflight but when user upgrade from one plan to another as long as its not the same plan the auto renew turns off automatically im confused is it just a sandbox and testflight thing? coz the autorenew keep working 5 6 times if its the same subscription but when user upgrade or downgrade to another plan it turns off
Hi everyone,I'm facing two critical subscription issues that are happening only on Android, and I'm hoping to find a solution. Our iOS implementation is working perfectly with the same RevenueCat setup.The Setup: I'm using RevenueCat's built-in Paywalls. My app has two tiers: "Plus" (lower) and "Pro" (higher). Both the Plus and Pro packages are correctly configured within the same Offering in the RevenueCat dashboard. Both products are set up in the Google Play Console with a 7-day free trial. Problem 1: Concurrent Subscriptions on Upgrade (Android Only)If a user with an active "Plus" subscription tries to upgrade to "Pro", they end up with both subscriptions active at the same time. The old "Plus" subscription is not replaced.On iOS, the same action correctly performs an upgrade, so I know my RevenueCat Offering is set up to handle this.Problem 2: Misleading Trial Offer After First Trial (Android Only)This is causing significant user confusion on Android. Here's the flow: A new
Hi team 👋I’m using RevenueCat for both subscriptions and consumable credits.My backend receives webhook events, and the frontend/flutter has a listener which when gets triggered calls getUserProfile() (which hits the be endpoint which calls RevenueCat API) whenever the user opens the app.I want to make sure my backend always has the latest purchase info instantly, even if a webhook is delayed or missed Should I: Use both webhooks and the RevenueCat API (as a fallback) to sync the latest transactions? Always update the stored store_transaction_identifier based on the latest transaction from the purchases associated with customer API? Just want to confirm the best practice to ensure no missed updates across subscriptions and one-time purchases.Thanks!
Hi!I’m currently building an iOS app using React Native and RevenueCat for handling subscriptions.In App Store Connect, I’ve set up one subscription group that contains the following four auto-renewable subscriptions: PREMIUM – Monthly PREMIUM – Weekly SIGNATURE – Monthly SIGNATURE – Weekly I have a few questions regarding how upgrades and downgrades work within this setup, especially when using the Purchases.purchasePackage(pkg) method in RevenueCat. Question 1 – Upgrading Between Monthly PlansIf a user is currently subscribed to SIGNATURE Monthly and decides to upgrade to PREMIUM Monthly (both within the same subscription group and both having the same time duration - 1 month): Will the upgrade take effect immediately, or only after the current billing period ends? Does iOS handle this automatically, or do I need to write any additional code to manage upgrades (similar to Android)? In other words, does RevenueCat automatically trigger the upgrade and reflect the entitlement
Hello,Loving the product and learning new things about it daily! Recently I tried to implement the Paywall feature, and the design and SDK implementation went super smoothly. One thing though, and I’m testing this on TESTFLIGHT so maybe it could have an impact, but the images are not loading.Here is my Paywall as previewed on the designer and in the preview app:Paywall on the DesignerAnd here is how it looks in the app itself in Testflight:Paywall on Testflight. I know this has been posted before but I can’t find a resolution.Could you help me out? Thank you!
Hey guys,I have a bit of a weird situation: I have one offering configured in RC, containing two products:monthly Sub lifetime itemWhen testing, everything seems to work properly. Especially the lifetime item works as expected.Funnily, when I hit the purchase button in my app for the Sub on Android and DO NOT purchase the item, I throw the correct error at the user, but the user still gets access to the premium features somehow.This does not happen on a lifetime item.When I checked my app behaviour, I found, that the difference in my app is, that on a monthly sub I already send the apps userID to RC before doing the purchase (which I do not on the lifetime item).As I use FlutterFlow for my app (with the RC integration), I added some custom code before the purchase action.This is the code I call: await Purchases.configure(PurchasesConfiguration(publicApiKey)); await Purchases.logIn(userId);Could that be the culprit?Am I doing something wrong here? Should I call this AFTER the purchase
Hi everybody,I’m implementing a setup where a custom subscription offering should be shown to users when they enter a specific key (referral code).Here’s my setup: • The custom offering (referral_offering) includes a package with two products — one for iOS and one for Android. • I’m using Flutter and calling Purchases.getOfferings() after setting a customer attribute (referrerCode) with Purchases.setAttributes(). • On iOS, getOfferings() works perfectly — 2 offerings are returned, and I can use the correct one from the map. • On Android, however, getOfferings() only returns the default offering. The referral_offering never appears in the JSON response.Things I’ve already tried: • Verified that the Android product in the custom offering is active, imported correctly, and linked to the right entitlement. • Confirmed that both the default and referral offerings are active and visible in the dashboard. • Tested with clean installs, cache deletion,
I’m trying to design a paywall that has a base offering (e.g. 1 or 2 consumables and 1 subscription) and a subpage (“More options” link) for the consumables where I intend to display more purchase options. E.g.1st page: 10 credits 100 credits Annual subscription2nd page (for advanced users):150, 200, 300 credits monthly subscriptionThis kind of paywalls are “easy” to design in swiftui as using a NavigationLink but I cound’t find a way to do it with the paywalls v2.Is it possible somehow?
Dear RevenueCat Community,I am using the RevenueCat SDK in my Flutter application and have implemented App Tracking Transparency (ATT) on iOS, requesting the user’s permission before a purchase. When the user grants permission, I call Purchases.collectDeviceIdentifiers() to obtain device identifiers such as the IDFA.In my Flutter app, users can purchase subscriptions via Stripe. For this, a web view is opened for the user to complete the payment. Once the purchase is completed and the user returns to the app, the app submits the subscription information to https://api.revenuecat.com/v1/receipts to upload the purchase to RevenueCat. This is how the user gains access to the app features after the purchase.To receive purchase events centrally in my backend, I have added a webhook in RevenueCat that reports Initial Purchase and Renewal events to my endpoint.I have observed the following behavior: For in-app purchases (IAP), in the RevenueCat dashboard > Recent Transactions > Customer
When de-selecting sandbox data, the overview still shows the sandbox data for the "new customers" and "active customers" metrics. Is this expected?
Hey, I have 2 different Paywall Screens (coded myself).One: You Subscribtion is paused, click here to Resume (deeplink to playstore)Other One: Resubscribe, choose between those plans.But at the moment I dont know how i should decide which screen i should show. Any Ideas? Webhook and RestAPI are not a option for me. I just want it from the Client SDK.Thanks in advance!
on creating a new paywall when i clicking on Select one of our prebuilt paywalls and customize it to meet your needs it is not working suppose i have two project (A, B )can i get paywall from A in B?
Hello, I’ve successfully setup webhooks, and it works if i send test webhook from the dashboard (i receive webhook event payload on my backend). However, from my app (expo react native), I am using a test store (ios for now), and when I make a purchase (purchase is successful and appears on the dashboard transaction list) webhook never triggers? What could be the issue here?
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.