Discussion and help from anything related to RevenueCat.
Recently active
Greetings, I am facing this scenario in sandbox:-User A subscribes to Subscription Group A, it is a success. User A logs out. User B logs in (Purchases.login(NEW_APP_ID)) (same App Store account) User B subscribes to Subscription Group B, it is an error.ERROR: Product purchase for '<Subscription Group B>' failed with error: PurchasesError(error: There is already another active subscriber using the same receipt., userInfo: ["NSUnderlyingError": Error Domain=RevenueCat.BackendErrorCode Code=7102 "There is already another active subscriber using the same receipt. User A is now subscribed to Subscription Group A and Subscription Group B simultaneously (webhook is alternating between the two)How can I stop Group B’s subscription being given to User A? If “Keep with Original App User ID” is set, then User B’s subscriptions will be given to User A. If “Transfer with New App User ID” is set, User A’s subscriptions will be set for User B. But I need both to keep their current state and b
Did a user reach out to you saying their card was charged after opting out of an auto-renewal? This is possible, and there are a few reasons why it happens:The user cancelled less than 24 hours before the subscription was set to renew. The Apple subscription terms require users to cancel subscriptions at least 24 hours before the next renewal. The user didn't actually opt-out of renewal. Some users will delete the app and expect the subscription to be cancelled. The user somehow has two subscriptions and cancelled only one of them. This is uncommon, but can happen if for example the user has multiple devices using different accounts. The user might have opted back in renewal after opting out.Inspecting the Customer History timeline in RevenueCat can help determine which of these scenarios may have applied. It's important that you can communicate to your customer what may have happened, and help them get a refund if you see fit.
I just want to check I’m not missing anything here: If I want to use Superwall for my paywalls and run pricing experiments, then I need to:administer the experiment/choort allocation in superwall track the results in RevenueCat using a chart which is segmented by offeringDid I miss anything? Is there a better way?
I have an iOS app, using SwiftUI, and effectively latest version of everything. I am using RevenueCat 5.23.0, minimum deployment iOS 18.1, XCode 16.3. I am facing an error which appears to only happen in production - not the sandbox. It’s extremely frustrating because it results in an RC error, even though the credit card transaction or trial start was successful. The user will tap my payment button, double click on the iOS native payment sheet to confirm w/ Face ID. The credit card payment or the trial start will succeed, and then iOS shows another prompt with the title “Turn off renewal receipt emails?” with the body “Get fewer emails by turning off renewals receipts for subscriptions. Your receipts will still be available in App Store settings > Purchase Hisotry” with two options to either turn on or off renewal emails. No matter which option is being selected, RevenueCat is populating the error object in the completion callback! This is happening even though my user is being bi
fetchoffering() is able to fetch the in app products but not able to fetch subscription in android side only. Error logs :- Empty offeringserror log :- DEBUG(32279): ℹ️ API request started: GET /subscribers/6273eb4bda327c735a4b20de D/[Purchases] - DEBUG(32279): ℹ️ API request completed with status: GET /subscribers/6273eb4bda327c735a4b20de 304 D/[Purchases] - DEBUG(32279): ℹ️ PurchaserInfo updated, sending to listener. W/System (32279): ClassLoader referenced unknown path: system/framework/mediatek-cta.jar I/System.out(32279): e:java.lang.ClassNotFoundException: com.mediatek.cta.CtaHttp I/System.out(32279): [OkHttp] sendRequest>> I/System.out(32279): [OkHttp] sendRequest<< D/[Purchases] - DEBUG(32279): ℹ️ API request started: GET /subscribers/6273eb4bda327c735a4b20de/offerings D/[Purchases] - DEBUG(32279): ℹ️ API request completed with status: GET /subscribers/6273eb4bda327c735a4b20de/offerings 304 2 D/[Purchases] - DEBUG(32279): ℹ️ Requesting products from the store with
How often is data updated in the RevenueCat dashboard? Latency of data in the RevenueCat dashboard depends on what you're viewing and how you've set up your app. We can break down the data into three categories:Transactions Charts and metrics Customer ListsTransactions in RevenueCat are new purchases and renewals (including free trials). Transactions will be shown in real-time - this includes the Customer History timelines. For data points other than transactions, things like billing issues detected, auto-renew status changes, etc., will be automatically detected by RevenueCat every few hours, but can be sped up to near real-time by enabling platform server-notifications.Charts and metrics are continuously computed in batches from a snapshot of the transactions and activity at that point in time. As soon as the calculation finishes, is starts again. The computation takes a couple hours to run - so you should expect that level of latency in the charts.Pro tip: Hover over the chart toolt
Hi there,I have a mobile app that allows Apple and Google Sign in using Firebase. A user on their iOS device has signed in with their Apple account but now they wish to use their Google account instead. Below are the list of events.User logs in with Apple account Purchases subscription for 1 year Subscription expires Logs out of app Logs in with Google account Purchase subscription for 1 year againWith these events, the subscription still ended up getting tied to the previous Apple account instead according to RevenueCat dashboard. Note that I do call the proper “logout” and “configure” functions when the user logs in and out of my app.I had asked the user to try and click the “Restore previous purchases” button I have, but a dialog comes up and states they are already subscribed and then it’s just an error message. Unfortunately, I just display a generic error message and I don’t know exactly what the error is.Is there anything I can do here to transfer the subscription to associate w
When trying to crete a paywall using the new paywall beta builder, i can’t get the price to be shown, it always display the variable.Tried it 2 times, with entitlements and offerings from scratch, same issue. Is this a known thing, or I’m doing something wrong?Bonus: gradients’s don’t look like they look live as whiting the builder
When integrations aren't working as expected, debugging can be challenging. This guide is designed to walk you through the steps you should take to identify what could be going wrong, and steps you can take to resolve any issues. Identifying the issueWhen debugging integrations, we usually hear about three categories of issues:No events are being sent from RevenueCat into third-party Only some events are being sent from RevenueCat into third-party All events appear to be sent, but the data in third-party does not match RevenueCatWe'll dig into each of these categories further in the sections below. Check that events are being sentThe first thing to check is if any events are being sent from RevenueCat into the third-party. This is easy to check in the RevenueCat dashboard under the integration settings for your app.Below every integration configuration, you'll see a table of Recent Events (example below). (Tip: click on any event in the table to see the payload that was delivered)If y
I’m using the Web Billing in Product catalog but when I use the production web purchase link (https://pay.rev.cat/[ID]/[USERID]), the form is missing to input the payment info. When I use the sandbox purchase link (https://pay.rev.cat/sandbox/[ID]/[USERID]), it works as expected showing the payment info form.I’m using Stripe as the payment processer I have Products, Offerings, and Entitlements setup Things I’ve tried with same result:Firefox and Chrome browsers Trying valid User ID Try in InCognito
I've configured an attribution integration but no events are sent?The attribution integrations in RevenueCat (e.g. Appsflyer, Adjust, Branch, Facebook, etc.) require two steps to setup.The network specific attribution data needs to be sent to RevenueCat from within your app. This is done through Subscriber Attributes in the SDK. Refer to the attribution integration guides for the specific network to see which Subscriber Attributes need to be set and how to test this: https://docs.revenuecat.com/docs/attribution The integration needs to be configured in the RevenueCat dashboard for your app.If no events are being sent, you should check that step 1 above is set up properly for your app and the specific attribution network. Integration events will only be sent for users that have these attributes collected.If events are being sent but the data doesn't seem right, check out our post on Data Discrepancies.
I found this annoyingly difficult so I made a free gist… so you don’t have to be annoyed. Use at your own risk etc etc...https://gist.github.com/JavascriptMick/233358b6a00d6d733ed9a630db587c2d Using https://github.com/openapi-ts/openapi-typescript to talk to the RevenueCat Rest API in a typesafe wayHow I created the schema file download the OpenAPI Schema from https://www.revenuecat.com/docs/redocusaurus/plugin-redoc-0.yaml run the followingnpx openapi-typescript plugin-redoc-0.yaml -o ./revenuecat-api-v2.d.tsdependencies "openapi-fetch": "^0.13.4", "vitest": "^1.3.1"
Hi, When filtering in the customer view, can we please add a filter for price in purchased currency. We’re trying to identify customers who have redeemed a promotional offer, and are currently using a range on total spent. This leads to lots of false positives in our reporting. Additionally if this field could also be sent as part of the Amplitude integration that would be super helpful for our reporting. Thanks
Hi everyone,I am encountering an issue (which I should have tackled a long time ago) with a limited number of users. In my apps, I usually set the RevenueCat App User ID to the Firebase notification token that is received from Firebase. I noticed a few users having their subscription expired on a User ID, only for it to be transferred over to a different User ID, only to then be transferred back to the old User ID (so it would expire on the new user ID), and the cycle keeps on going. These are users with more than one device, who are buying on one device, and restoring on a second device.According to https://www.revenuecat.com/docs/getting-started/restoring-purchases,“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.”This explains the behaviour I am seeing, but I found it to be unexpected, since I would expect the subscription to be l
I put out a build using xcode16.2.. and started getting ipad users on older ios versions telling me the app crashes on startup.. I was finally able to reproduce and I get a crash when initializing rev cat crashes on this lineprivate let purchaseCompleteCallbacksByProductID: Atomic<[String: PurchaseCompletedBlock]> = .init([:]) Xcode reports:Thread 1: signal SIGABRTAn abort signal terminated the process. Such crashes often happen because of an uncaught exception or unrecoverable error or calling the abort() function. I’ve not gotten reports for iphone users.. but I’m not certain it’s just ipad related. Has anyone seen this? I haven’t touched the store code in a while.. the particular file that invokes rev cat hasn’t been touched in a year. I support older ios version.. 12.4 is the lowest so it’s using an older version of the sdk as well : ver 4.43.3 Any thoughts ? feels like it may be somehting cropped up with the new xcode and sequoia .. I’m not sure what else it may be
Hi! In my flutter app, the Google Play team found an error in the subscription screen. I use a code like below to show the price: Text( widget.package.storeProduct.introductoryPrice ?.priceString ?? widget.package.storeProduct.priceString, style: TextStyle( fontSize: 18, fontWeight: FontWeight.bold, color: Colors.black, ), overflow: TextOverflow .ellipsis, // Handle overflow with ellipsis),The PLN is okay, but the Google Team from India has INR, and it shows 0. I don’t know why or how to fix or even test it. As you can see the price for the month is ok. I use here code: TextSpan( text: widget.package.storeProduct .currencyCode ?? '', ), TextSpan( text: " " + (widget.package.storeProduct.price / 12) .toStringAsFixed(2), ), TextSpan( text: "/" + context.tr("month"), ),],
When I call Get List of Customers endpoint I get only 6 fields of information for every customer. The documentation shows that should be more fields.URL: https://api.revenuecat.com/v2/projects/proj_id/customersYour API v2 response (just for Item object):{ "experiment": null, "first_seen_at": 1744314095343, "id": "123456789", "last_seen_at": 1744314095367, "object": "customer", "project_id": "proj_id"}The documentation show that i should get this:{ "object": "list", "items": [ { "object": "customer", "id": "19b8de26-77c1-49f1-aa18-019a391603e2", "project_id": "proj1ab2c3d4", "first_seen_at": 1658399423658, "last_seen_at": 1658399423658, "active_entitlements": { "object": "list", "items": [ { "object": "customer.active_entitlement", "entitlement_id": "entla1b2c3d4e5", "expires_at": 1658399423658 } ], "next_page": "/v2/projects/proj1ab2c3d4/customers/19b8de26-77c1-49f1-a
We are hoping to do a first release on app store with our subscription paywall, however, we want to allow our testflight users to continue to test for free. I want to check if app is downloaded via testflight environment and conditionally bypass the paywall. StoreKit has a Method called a thing called AppTransaction that has a environment field to it. There are StackOverflow post that resolved it using swift, but i am using expo. Is there something equivalent in revenueCat? What is the best way to approach this?
Apple has appealed, but for the moment out-of-app purchases seem to be allowed in the US. From the updated App Store terms:3.1.3 Other Purchase Methods: The following apps may use purchase methods other than in-app purchase. Apps in this section cannot, within the app, encourage users to use a purchasing method other than in-app purchase, except for apps on the United States storefront … Fantastic news, at least on the surface. I’m holding off until we see how using external payments affect search placement. My app is new and I need user numbers more than $$, so I’m going to stick with App Store payments for the moment.WDYT? Are you considering switching your iOS app over to web payments? Let us know how it goes!And if the RevCat team has any guidance here, I’d love to see another blog post like this one about the earlier ruling. (Thanks!)
I'm using RevenueCat in a Flutter app to manage in-app subscriptions. On iOS, the subscription products load and display correctly when running in debug mode on a real device. However, when I upload the app to TestFlight, the products fail to load — I get an empty list or no products shown at all.
Hi. I’m BE developer and I see that prev dev used logic “first by platform” for user to determine subscription should be updated. It causes problems when user has 2 subscriptions.Can I use “original_transaction_id” to determine subscription in webhook event handler? Can it cause some problems? Is it ok if in some cases mobile users have 2 subscriptions? Like when they switch from plan to plan.
I am trying to integrate with SDK to automate free trial ending reminders and more. And I read this post - But I also notice that RevenueCat allows various SDKs including customer.io and Firebase, which I am using currently. OneSignal seems great, but I am just wondering if customer.io might be better in the long-term. How are you guys doing it? I would like to learn from those who has implemented similar features.
EDIT: solved, user error
Most of my offerings have same set of products.Considering I need to run multiple A/B tests involving metadata’s small change to test paywall copies and other small UI/UX changes.Which is the best way to handle multiple offerings in RevenueCat admin page?Should I delete unused offerings from admin panel when A/B test finished?Or maybe reuse offerings from previous A/B tests and update their metadata, but wondering if it will mess up original A/B test where it was used for?Are you planning to add some sort of offerings archiving to avoid them being selected, but still visible in charts without deleting them?Is it okay to have 20+ offerings at some time or even more? Already have 10 of them.
We previously had a hard paywall, meaning when users started their trial, they also accepted that they would automatically convert to a paid sub unless they cancelled beforehand. This triggered the rc_trial_started event, and later rc_trial_converted event.We decided to experiment and move this hard paywall as we saw drop-off from people not wanting to commit. Now users can start a trial, and at the end of the month they’ll be prompted to upgrade to a paid sub (if they want). The issue is now rc_non_subscription_purchase event is triggered when they start their trial, which is throwing off all of my reporting, particularly trend analysis for trial conversions. Is there a way to continue using the rc_trial_started event so I have continuity in my reporting?
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.