Get help with your SDK implementation.
Recently active
Hi, We're using RevenueCat Web Billing and noticed that the managementURL from the SDK/API returns a URL like: https://api.revenuecat.com/rcbilling/v1/customerportal/{tx_id}/portal This redirects to a page that asks users to check their email for the management link. The email then contains a tokenized URL like: https://billing.revenuecat.com/{app_id}/{sub_id}?token=xxx This adds an extra step for users. Is there any way to get the tokenized URL directly via SDK or REST API (v1/v2) so users can access the customer portal immediately? Thanks!
I current offer subscriptions through the App Store, Google Play, RC Web Billing, and Stripe directly.I’m investigating implementing the Customer Center and see that it fully supports managing App Store & Play Store subscriptions and promo offers for win backs but it’s not clear to me if it supports management of subs from RC Web Billing and Stripe.My specific questions are:If a customer has a RC Web Billing sub: Can they cancel/manage it from the Customer Center? Do they still have to re-auth from the email magic link? Can I configure win back promo offers? If a customer has a subscription through Stripe directly, can they manage it from the Customer Center, ideally by linking to the Stripe Customer Portal? I’m fine without promo offers on Stripe but it is important that my existing Stripe subscribers can continue to manage their subscription directly from my app, via the RC Customer Center.Thanks!
Hi everyone,I recently changed my setup in the google play store so that both my basic and pro plan are part of the same subscription so that users can switch easy between them, before i had them as separate subscriptions. Now they are part of the same subscription as 2 different base plans.This solved the issue of being able to purchase a new plan and keep the old one, now when you upgrade/downgrade you only keep your new plan.However, im noticing that allPurchaseDates in customerInfo on react native now returns only the latest purchased product, even if i switch 3-4 times it always just keeps the last one. Is this expected? On ios seems to be fine, ie i get all made purchases. I primarily use this for my free trial eligibility, so if theres a better way to determine this that might help too.
Hello, I’m currently trying to setup a Play Store global discount on my one time purchase using the new “Offers” system.This is talked about in this thread: In your first reply you state “This is currently supported” but in the last one you state “Unfortunately I don’t have an ETA for one-time product offers yet but they are in our roadmap”, although you seem to be only talking about RevenueCat generated paywalls and not custom ones using the standard Purchases.getOfferings.My question is thus: are the new Play Store discounts supported in any way by the RevenueCat SDK? and if not does this mean there is currently no way to provide a global time-gated discount on one store products? (other than manually editing the current price at the expected discount start and putting it back later...) The only thing I found that seems somewhat related to this feature is this undocumented field but the comment clearly state it’s null on Android and I my testing shows it is indeed null... /// Coll
I am setting up two tiers of subscription “Plus” and “Pro” I have followed threads from other posts on the forums such as: iOS its 1 Subscription group, with 2 service levels Android its 2 separate subscriptions RevenueCat its 2 separate entitlementsUsers are successfully able to purchase either tier with thisI am now trying to figure out how best to handle allowing a user to upgrade their entitlement from plus to pro in react-nativeThe issue with presenting the paywall again is that the user sees the same tier they already have (plus), which seems confusing and I wouldn’t want them to re-pay for the same subscriptionIs it possible to re-use the existing paywall I use for upgrading to either plus or pro hiding the plus option conditionally? or do i need to create a second paywall with only pro features displayed?Appreciate any thoughts on how to structure this!
Hello,Currently, the Customer Center only supports plan changes on iOS and doesn't seem to offer this functionality on Android.Is this something that is planned or possible? Since we already have subscription groups configured, could we potentially implement this using pure Flutter code by leveraging the official API?The tool is great, but having to use the Customer Center for iOS while maintaining a separate custom page for Android plan changes is difficult to justify and explain to our end-users.Thank you in advance for your help!
i have integrated RevenueCat Paywall ui in expo using the `react-native-purchases-ui` package. i’m trying to show the managment screen on expo dev client on my ios device after subscribing with test packages.await Purchases.showManageSubscriptions()but getting this error `ℹ️ managementURL is nil, opening Apple's subscription management page LOG aa undefined`i have checked the full setup quite a bit of times but couldn’t find any issue and also couldn’t get the relevant information from the docs as well. may be i’m mistaken, please point me to the correct direction if i missed something on the doc.i have checked with await Purchases.getCustomerInfo()✅ customer is there but customer -> `managementURL` is null. ❌and by default it fallback to apple’s default management screen, which keep loading for few mins and later show connection error, try again.just for more context, i have done these steps correctly.Purchases.configure({ apiKey, appUserID });await Purchases.logIn(userId);
After renewal of my Apple Developer Membership my paywall stopped showing the products. There was an issue with the membership which led to my app being delisted from App Store for a couple of days. After contacting the support and fixing the issue, the paywall stopped working in production.In the logs I see:ERROR: 🍎‼️ Error fetching offerings - The operation couldn’t be completed. (RevenueCat.OfferingsManager.Error error 1.)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-emptyERROR: 😿‼️ 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 info
I am experiencing a persistent issue where Purchases.getOfferings() and sometimes getProducts() hangs indefinitely on Android. No error is thrown, and no response is returned, even after waiting for several minutes. This prevents the paywall from being presented. iOS is working as expected. Environment:Framework: React Native / Expo (SDK 54) Build Tool: EAS Build (Development Client) SDKs: react-native-purchases and react-native-purchases-ui (v8.12.0) Platform: Android (Testing on physical device)What I have verified and configured:RevenueCat Dashboard: Google Play credentials show as "Valid credentials" with green checkmarks for Subscriptions, InAppProducts, and Monetization APIs. Account-level permissions (including "View app information and download bulk reports") have been granted in the Google Play Console. The Public API Key in the app matches the one in the dashboard. App Configuration (app.json / Manifest): Declared com.android.vending.BILLING permission. Set launchMode to
I was testing plan upgrade on iOS in sandbox, and there seems to be inconsistent results from revenueCat log and delegate call.I was subscribed to plan_casual then purchasing plan_pro.After successful purchase, I can see in the console log that plan B is purchased “INFO: 😻💰 Purchased product - 'plan_pro'The delegate purchases(_ purchases: Purchases, receivedUpdated customerInfo: CustomerInfo) got called immediately after, however with product identifier plan_casual.After about 1 minute, storekit payment queue got update with the correct product id “Plan_pro”, then in about another 5 seconds, revenueCat delegate got called with product id “plan_pro”.
I’m trying to set up Meta Ads integration. Android works perfectly fine and I get 200 as a response back from Meta. IOS keeps failing and returning a error message. IOS request body is as follows (this fails):{"access_token": "[token here]","data": [{"action_source": "app","app_data": {"advertiser_tracking_enabled": true,"application_tracking_enabled": true,"extinfo": ["a2","","","1.1.5","Version 26.1 (Build 23B86)","","nl-NL,nl;q=0.9","","",0,0,"",0,0,0,""]},"custom_data": {"content_ids": ["scandoc_premium_montly"],"content_type": "product","contents": [{"id": "scandoc_premium_montly","quantity": 1}],"currency": "USD","order_id": "d389bfdf5ea1d930fa5c6ef4fcd9e3ab179a57fa","value": 4.99},"event_id": "d389bfdf5ea1d930fa5c6ef4fcd9e3ab179a57fa","event_name": "Subscribe","event_time": 1766084555,"user_data": {"anon_id": "XZ54193BB4-03AA-439C-83E6-357CD34D8D5E","em": "ccd793a81dd0c1ca94492edb501f3a7717a40a76c093dff515b2f7b36108576e","external_id": "a28b66322fd410eccb57ba8cfc5616ffde208dba32
Hello, I have a concern which I hope you can address.Our current situation is:We currently handle web based subscriptions using Stripe We want to add the option to purchase subscriptions via the Web Purchase Button on mobile We would like to provide the Stripe Customer Id to the Web Purchase Button checkout flowOur signup flow creates Stripe customers and saves the Stripe customer id to our database, which we then use when creating the checkout link (current web flow). This is something we did after noticing problems with duplicate customers created after passing the user email to the Stripe checkout API and allowing Stripe to create them automatically. (multiple stripe customers for same email)Is there some way to avoid automatic Stripe customers with your checkout flow and have them be assigned manually?This is also important for our existing Stripe customers, which will duplicate if the Web Purchase Button uses the email to create the checkout.Thanks.
Hi, I was doing a size analysis of my app, and it looks like the Flutter SDKs are around 10 MB each, which seems a bit much. Can someone on the RevenueCat team look into this? From `flutter build ipa --release --analyze-size` RevenueCatUI.framework 10 MB RevenueCat.framework 10 MB
RevenueCat's CSS for web Paywall has a global reset that sets font-family: sans-serif on aLL elements using the * selector. This is overriding Font Awesome's icon fonts. When the paywall opens on the web, my icons all turn into rectangles!If this is happening,, it seems to be a bad idea to target the * selector. Unable to find a solution as of yet
It seems that API v2 has been in development for a while, but I only just discovered its existence yesterday. I have 2 questions:What’s the best way to follow progress on its development? I don’t see any sort of CHANGELOG in the docs, or any blog posts about it. As I’ve started playing with the API, I have feedback, ex: missing expandables. What’s the best way to provide feedback about it?
If I log in then relaunch the app so the RevenueCat SDK initializes with the appUserId populated, the paywalls launch perfectly.If I log out, paywalls are displayed. If I then log back into the same appUserId (or any other), paywalls aren’t displayed.If I launch the app logged out, paywalls are displayed. If I then log in (to the same appUserId), paywalls aren’t displayed.The call to `offerings.currentOffering(forPlacement: “placement_id”)` does return an offering in all cases.The following is executed in all cases, with a non-nil offering:``` Group { PaywallView(offering: offering, displayCloseButton: true) } .onRestoreCompleted { customerInfo in ...```Any ideas what might be preventing the paywalls from rendering?
Hello everyone,I'm facing a frustrating issue where RevenueCat fails to fetch my newly added Consumable products, giving the error Could not find products with identifiers. However, my existing auto-renewable subscriptions (Weekly, Monthly, Yearly) are fetching and working perfectly in the same app.My Environment: Device: iPhone 8 (iOS 16.7.12) - Real Device Xcode: 16.0.1 (Build 17A400) App Status: Live in App Store (Version 1.0) RevenueCat Configuration: Products created, Entitlements linked, Offerings configured. The Issue: I added 3 new Consumable products (Credits system) in App Store Connect. They match the IDs in RevenueCat. When I run the app on a real device (Sandbox), Purchases.shared.offerings() returns empty for these specific packages, and the logs show that Apple is returning an invalid product identifier error. Logs: [store_kit] DEBUG: 😻 Store products request received response[offering] WARN: 🍎‼️ Could not find products with identifiers: ["rc_purplai_30cr", "rc_p
I want to confirm: in RevenueCat webhook events, is app_user_id guaranteed to be included in the aliases array? Same question for original_app_user_id.For this scenario:Fresh install, new $RCAnonymousID:123 created, app_user_id = $RCAnonymousID:123 User taps restore (no logIn() call in this session) RevenueCat merges a previously known ID with this new anonymous ID. The previous ID could be either $RCAnonymousID:567 or john123 (set via logIn() in a prior session on another device).At the time the webhook event fires:Is app_user_id the previous ID ($RCAnonymousID:567 or john123)? Does aliases contain both the previous ID and the new $RCAnonymousID:123?I'm pretty sure, but want 100% confirmation.
I am designing my Paywall using the new Paywall Editor.I am using a Carousel where each Page hasa Title an Image which is a screenshot of the appThis is how such a page looks in an ideal scenario: However, the problem is that on smaller screens,the Carousel height does not adjust thus, the Page height does not adjust thus, the Image is not scaled to fit into the viewport.This is how it looks on a smaller device: I would in that case like the Image to scale to be smaller, fit into the Viewport, and not make the Carousel scrollable. I think what is needed to achieve that is the option to allow the Carousel to only fill the available height like using a weight of 1 only on the Carousel.How can I achieve this?Thanks in advance for any thoughts or hints!
I am getting Package Resolution Failed on Xcode 26.6.1. with package manager. Using CocoaPods or Carthage is not option for us. Is anyone else having this issue?https://github.com/RevenueCat/purchases-ios-spm.git
Tried different simulator, tried real device. The product status is “ready to submit”, now I am guessing it’s an Apple’s issue
Hello, I am trying to fetch the daily revenue for a project through API Call in python. I have the API key and the project ID. However, I am unable to locate the endpoint to get the daily revenue for a specified date range. All I can get is a snapshot of their dashboard (containing the last 28 day revenue) with the following code: url = f"https://api.revenuecat.com/v2/projects/{project_id}/metrics/overview"headers = { "Authorization": f"Bearer {API_KEY}", "Accept": "application/json"} response = requests.get(url, headers=headers)response.raise_for_status()metrics = response.json().get('metrics', [])df = pd.DataFrame(metrics).rename(columns={'id': 'metric', 'value': 'value'})print(df) Can someone please help me with the code, that will take date range as input in parameters and give me a breakdown of daily revenue for the date range?
I’m not doing anything fancy. Yesterday I was able to create 3 products just fine and they all show up, but this fourth one I created cannot be found. Even though I’m importing the Products directly from App Store Connect yet I still get these two errors WARN: 🍎‼️ Could not find products with identifiers: ["extension_atlassian_monthly"].There is a problem with your configuration in App Store Connect. More info here: https://errors.rev.cat/configuring-productsWARN: ⚠️ There's a problem with your configuration. No packages could be found for offering with identifier extension_atlassian_monthly. This could be due to Products not being configured correctly in the RevenueCat dashboard, App Store Connect (or the StoreKit Configuration file if one is being used). To configure products, follow the instructions in https://rev.cat/how-to-configure-offerings. More information: https://rev.cat/why-are-offerings-emptyI have triple checked that the Product IDs match exactly `extension_atlassian_mo
Hi, I'm integrating the RevenueCat Web Paywall into my Flutter app.Everything works perfectly on iOS, but on Android the Paywall screen becomes completely black, and the app stops responding.Flutter gives me these errors:
Hey, We are trying to use revenuecat react-native-purchases library in our project, we were able to successfully set it up, some transactions works perfectly, but unfortunately some don’tWe are using react-native-purchases: 9.6.8, with react-native: 0.73.11, we didn’t configure it for iOS yet, we started with Android, problem below is related to Android platform only.Problem:When calling await Purchases.purchasePackage(selectedPackage) method, we get warning that says:🤖‼️Billing is disconnected and purchase methods won't work. Stacktrace: java.lang.Throwable at com.revenuecat.purchases.google.BillingWrapper.getStackTrace(BillingWrapper.kt:814) at com.revenuecat.purchases.google.BillingWrapper.access$getStackTrace(BillingWrapper.kt:82) at com.revenuecat.purchases.google.BillingWrapper$withConnectedClient$$inlined$log$1.invoke(logWrapper.kt:37) at com.revenuecat.purchases.google.BillingWrapper$withConnectedClient$$inlined$log$1.invoke(logWrapper.kt:36) at com.revenuecat.purchases.google
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.