Learn more about RevenueCat and talk about it with the community.
Recently active
First of all, thank you to everyone who reached out to let us know RevenueCat was added to a popular ad block list! Because of your messages, we were able to quickly make sense of some customer support questions and start taking action. So, what’s the situation?The RevenueCat domain was added to a community-shared list of domains that are imported by popular ad blocking tools like AdAway and Pi-hole. This means anyone using these tools is unable to access RevenueCat functionality. More specifically, developers and teams using RevenueCat won’t be able to access the RevenueCat dashboard. And with regards to app end users, app purchases can’t sync with RevenueCat and thus won’t allow for entitlements to unlock or for purchases to be properly reflected in dashboard metrics.In other words, RevenueCat won’t work at all for these users. Why was RevenueCat added to this list?The short answer is “we don’t know.” It seems to be a misunderstanding of what RevenueCat does, although we’ve explained
Hi! I’m Jacob, recovering iOS engineer and CEO of RevenueCat. It’s still a bit mind boggling how many folks are using our little SDK these days, and I’m excited that we have an open community to chat about it. I’d love to hear your product and company feedback. I don’t get to spend nearly enough time with developers using our product day-to-day and would love to hear what direction you think we should take the SDK, the dashboard, and ultimately the company. We are here to help you make more money with your apps, so tell us what you need! P.S. I’m thinking about making an app. Can you still make apps in Objective-C?
Also known in RevenueCat as the STORE_PROBLEM error, this error can occur when purchasing a product and indicates there was an issue verifying the purchase with the App Store or Google Play Store. The error can either come directly from Apple or Google’s libraries, or from RevenueCat’s backend when attempting to verify the receipt. Why does this error occur?The STORE_PROBLEM error occurs more commonly in sandbox than production, and can result from different causes depending on the store. Usually, it means there was a problem connecting to the store at the time of purchase—such as the store’s servers were down, or the user’s network connection failed, so the purchase could not be verified and completed. RevenueCat will forward the underlying error, or the exact cause for the error, along with the STORE_PROBLEM error. Here is a list of possible causes from each store:Apple SKErrorUnknown. An unknown or unexpected error occurred. A “catch-all” error that may point to a problem with the
Here at RevenueCat, we've seen scenarios where individuals need to transfer their apps to another account or another owner. Although this isn't a feature that we support, we do have some workarounds to achieve this. Here are a couple of scenarios when you might need to transfer an app: You Need to Change Ownership of an App in RevenueCat When you need to change the app owner, there are two options available:To transfer the entire RevenueCat account, including all of its apps, log into the account that owns the app and change the email to the email that is supposed to own the account on the account settings page. If needed, you can create a new email address to make handing off the account easier. To transfer specific projects from one account to another, contact RevenueCat support for assistance. You Are Selling an App in Production When you have an app you are selling, it might not be the best scenario to change the account owner's email. Instead, we recommend creating a new app iden
Hi folks, I was recently contacted and told that I can submit a claim in this class action law suit. Of course, I assume most communications like this to be a scam. But I’ve heard respectable news sources talk about this. I think I’ve even heard @david talk about it on SubClub. They’re not asking for sensitive info and it looks legit. Have y’all submitted a claim? Have you heard of this specific case? Is it a scam? Here’s the link: https://smallappdeveloperassistance.com/ Thanks, Toby
I am really really struggling here getting my Apple App Store app approved. I have set everything up, and imported my app store subscriptions from Apple into revenuecat very smoothly. Ever time they deny me over and over again. When I first got denied they wrote:We are unable to complete the review of your app because one or more of your in-app purchase products have not been submitted for review. This was 100% my fault. I didn't realize you actually had to add the subscriptions manually to the app before submitting for review. So I did this and resubmitted. I then got denied again with:We discovered one or more bugs in your app. Specifically, your app displayed an error message when we tapped on the “Unlock Premium” feature in the settings section. Please review the details below and complete the next steps. They also attached this screenshot:I then let them know, “As for the purchases not showing up. They will not show up until you approve the purchases.”But they denied again and aga
What features are you the most excited about?What would you like to learn more about?Many updates and changes have been introduced during Google I/O 22 and our team is busy deep diving into these topics and prioritizing them according to your needs. We would love to hear your thoughts and needs on these features. New Subscription Model - is it all clear what that means or would you rather we just take care of it? Play Console – how does your setup look after the changes? does this create an opportunity for your app? Flexible Offers - would you see yourself making a use of this? Prepaid plans - does this solve an issue for you? would you like to learn more about the payment landscape of recurring payments? Play Index - do you see yourself using the index moving forwards? If so, what kinds of communications would you expect from RevenueCat?Excited to hear from you!
Restoring purchases is a mechanism by which your user can restore their in-app purchases, re-activating any content that had previously been purchased from the same store account (Apple’s App Store or Google Play).By not including a method to restore purchases, users could lose access to existing purchases to which they are entitled. This isn’t ideal, so it is strongly recommended that you include some way for users to trigger the restoreTransactions method, even if you require all customers to create accounts.What happens when a user restores purchases?When a user restores purchases, the Purchases SDK syncs the user’s device receipt with the RevenueCat backend. The device receipt contains unique information about the user’s transactions so that RevenueCat is able to pair the transactions to an app user ID and then subsequently unlock the appropriate entitlements.RevenueCat offers a configurable option in an app’s settings to change the restore behavior in the event that a receipt has
What are Transfer Events?Transfer events are when a transfer of transactions and entitlements was initiated between one App User ID(s) to another. This event is from RevenueCat to inform you of purchases being transferred between users of your app. Why do Transfers Happen?Transfer events occur if a user claims the purchases of another user, which will happen if both users are logged into the same underlying store account, and if the user attempts to restore purchases. This is because RevenueCat will detect that the purchases belong to that app store account and will then transfer the purchases to the new user so they can access their purchases. RevenueCat is able to detect this because transactions are associated to the underlying store account. FAQsCan I have multiple RevenueCat users for the same Apple/Android account?You cannot have multiple users with the same underlying store account as they will always share purchases. How do I prevent transfers?To prevent all transfers, you’ll w
It’s a common issue that comes up on every single analytics platform - in one system you have 3105 active trials, on another, 5046. What’s the deal?These discrepancies are common, and can happen for a variety of reasons. This article covers why you can expect certain discrepancies between RevenueCat's analytics and other platforms, and what you can do if things don't seem right. Common Discrepancies Having a better understanding of how RevenueCat collects data and generates analytics can help a lot when comparing against other platforms. The following are the most common things to consider the vast majority of discrepancies can be attributed to. What is the source?The first thing to ask yourself when comparing analytics systems is to ask yourself, "What is the source of this data?". If the sources are different, then you should expect differences in the data as well. RevenueCat only collects data that is sent through our in-app SDKs or REST API - there's no connection to any other sour
Does RevenueCat Support Purchases in (X) Country?RevenueCat supports subscriptions and in-app purchases for any country that is supported by the app stores (Apple, Google, Amazon) and Stripe. What if my country is only partially supported?If you want to support in-app purchases in Bermuda, for example, RevenueCat will work for all users in Bermuda, and they can make purchases in the Apple App Store and Amazon Appstore, but not in the Google Play Store.If a Bermudian user purchases a subscription on an Apple device, they can still access their subscription on an Android device if you properly support cross-platform usage of RevenueCat. Stripe purchasesStripe works differently from the app stores. If you as a developer have a bank account in a supported country, then you can collect payments globally. So, in the table below, if a country does not have a √ for Stripe, that does not mean you cannot collect Stripe payments from users in that country. It simply means your bank account/busine
When making purchases, you might run into unexpected errors. A common one we see our developers face is the `PURCHASE_NOT_ALLOWED` error. We have this error documented in our error handling docs. This error comes from Apple or Google and is not an indication that something is wrong on RevenueCat's side. This Error on Android When working with Android, your error might look similar to this:`ERROR: The device or user is not allowed to make the purchase. | Billing is not available in this device. DebugMessage: Google Play In-app Billing API version is less than 3. ErrorCode: BILLING_UNAVAILABLE` This error is generic; there could be several reasons this pops up. The most common is that your Android OS is out of date. We recommend updating through the Play Store and seeing if that helps. Other things to check when you get this error: Are you logged in to the correct Google Account on the device/emulator? Try logging out and logging back in. If you're testing on an emulator, can you
Hi! We put together a video on the RevenueCat Youtube channel that walks through how to setup auto-renewing subscription products through App Store Connect.This may be helpful if you’re getting started with iOS subscriptions, or having trouble fetching products from Apple due to some configuration issue.Let me know if this is useful and if there’s other content you’d like to see!
App rejections are an unfortunate and dreaded aspect of launching a new app. It’s bound to happen at some point, and in the case of subscriptions and in-app purchases, it’s usually not something that you or RevenueCat can resolve.RevenueCat can’t contact Apple on your behalf and we can’t expedite the review process, but we can help you troubleshoot the rejection and work toward a resolution.If you’ve read through our docs on rejections and are still having issues, read on. Background / Review EnvironmentUnfortunately, Apple’s sandbox environment is notoriously flaky - there are regular outages and sometimes purchases can get hung up in their system. Most of the time this error is due to sandbox downtime, but you can read about all the causes for this error in our guide on error handling.Even worse is that Apple’s reviewers use this unstable environment for App Review, which can cause issues when the reviewer tests in-app purchases like subscriptions.The App Review team typically doesn’
App Tracking Transparency (ATT) is Apple's framework for requesting access to a user's IDFA. If you use any of our attribution integrations, this article will explain what you need to do to make your app compliant. What is App Tracking Transparency (ATT)?Starting in iOS 14.5, collecting the IDFA will require permission from the user. This is done by integrating Apple's AppTrackingTransparency framework in your app. How Does ATT Affect RevenueCat?RevenueCat will continue working as expected because RevenueCat doesn't depend on IDFA or collectDeviceIdentifiers to work. However, depending on the integrations or workflows you have, you may need to update your app to ask the user permission to collect the IDFA via collectDeviceIdentifiers. This section will help you figure out whether you need to integrate ATT.If any of the following apply to you, you don't need to integrate ATT:You only use integrations that don't require or rely on IDFA to work, such as Amplitude or Mixpanel. You don't mi
If you get a 403 error status, “Secret API keys should not be used in your app.” error message, or “7243” error code when making HTTP requests to the RevenueCat API, you are probably using the wrong API key, or using a private API key when you should be using a public API key.Double-check for any typos and make sure the API key matches the one in your dashboard.The following RevenueCat REST API endpoints require using a public API key:GET /subscribers POST /attributes POST /attribution GET /offerings POST /receiptsYou can find your public API key by following this guide: https://docs.revenuecat.com/docs/authentication#obtaining-api-keys Make sure to use the correct public API key - for example, if you're sending an iOS receipt to RevenueCat using POST /receipts, use the public API key for your iOS app (which will look like appl_xxxxxx).
RevenueCat can send webhook notifications to your backend any time an event happens in your app. Events include initial purchases, cancellations, renewals and more. Sandbox purchases also generate webhooks. This post is a deep dive into how to handle webhook events for sandbox purchases.What are sandbox webhook events?Sandbox webhook events are generated from sandbox transactions. Sandbox events have environment=sandbox and they contain data about sandbox transactions, like expiration date, trial period, etc. We send them when you make sandbox purchases so that you can test your backend code to make sure it handles webhook events properly.To learn more about what’s included in a webhook event, see our webhooks guide.Note that some events, like transfers, aren't production or sandbox, and so don't have an environment property.The following user webhook events don't have an environment property: TRANSFER SUBSCRIBER_ALIAS This is because these events are user events, not transaction eve
Hello. I have read all the existing posts on this issue, but am still stuck.My Flutter app has been successfully processing purchases via RevCat for over a year, but following publishing the latest version of the app, iOS users are getting Error #23 when trying to purchase: “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”I have changed nothing in the app in the latest version relevant to this issue except increased the iOS deployment target version to 18.0.I have checked all the suggestions mentioned in this form posts (signed agreements, financial setup, correct API keys, etc.), all looks fine and has not changed.purchases_flutter version is 8.7.1The code that produces this error is: offerings = await Purchases.getOfferings();Please help me diagnose and solve this -- my users can no longer make purchases
💫 OverviewIt’s common for developers to offer subscriptions that unlock entitlements for more than one user at a time. This is usually seen in B2B business models where one person (an administrator) can purchase multiple licenses for a product and then distribute those licenses to workers within their company.While the app stores don’t support this behavior out of the box, this article explores how developers can implement such a subscription model with RevenueCat. 📖 Definitions One-to-Many Subscription: A subscription purchased by one user that unlocks entitlements for one or more distinct users. Managing User: The user who purchases and manages a one-to-many subscription. Receiving User: A user who receives an entitlement from a one-to-many subscription. 🔐 PrerequisitesYou have non-anonymous user IDs for all users involved in a one-to-many subscription (i.e., the managing and receiving users). You are using RevenueCat as the source of truth for entitlements in your apps. Y
Hi everyone,I’m looking to figure out a way to reset or extend a users free trial. At present, we have successfully set up an In-App Subscription on both iOS and Android with a one week free trial. We then hope to send the user a notification or email when their trial is almost over prompting them to refer a friend to the app, which they will be rewarded for by extending the trial for another week.The refer all mechanisms is fairly easy to do with deep links, the question is once we have detected that a user has successfully referred a friend, what is the best way to extend their trial? Additionally, I’m still trying to work out how this plays with Apple’s terms of service - it seems to be within the rules but any thoughts would be appreciated.Thanks everyone!
So I had this error message on my Android testing of my Flutter app (iOS worked like a champ) and worked through the troubleshooting steps provided by RevenueCat support, (https://community.revenuecat.com/sdks-51/why-are-offerings-or-products-empty-124), (BTW some of these screens need updating please, particularly because this is a popular post), I even got Google Play Store support involved (the portal is soooo convoluted) and after about two weeks of getting one email response per day, at my wits end, I engaged the chat service. A chat support person in Google told me in five minutes that I could only make my app release ‘ACTIVE’ in the Closed Testing if … my Managed Publishing state was ON!I didn’t know what that was, then they explained:them: Kindly go to your app's Publishing Overview section on you Play Consoleme: kthem: Then, click the "Turn off Managed Publishing" button.them: Once you've turned it off, kindly wait for the changes to be reflected on your Play Console.and then,
The use case is simple. Let’s take my React Native iOS app as an example:A user who has already purchased a “Premium” subscription in my app goes to their iPhone Settings and unsubscribes Now they open my app and goes to the “Subscription” page to check the status My subscription page says that their sub is active AND will renew at date X, even if I run the getPurchaseInfo() again My user gets confused/angry and contacts my supportHow can I avoid the above? I’m new to RC and have just been playing around in the Sandbox environment. RC docs says certain attributes, like the “willRenew” could take multiple hours to sync. I have activated Platform Server Notifications but at least in Sandbox it seems like the info I get back from getPurchaseInfo()How can I avoid these delays and caches and whatnot, and always be sure that everything is updating instantly and the data is accurate and “fresh”?I asked the RC support about this, and they just copy/pasted the first two paragraphs of the “Webho
Hello,I am trying to convert a paid app into subscription, but I am facing a situation which I need help. I know I can detect the active subscriptions via active entitlements:!customerInfo!.entitlements.active.isEmptyand detect if any entitlements are not active then lock the premium version for example. But I am converting a paid app into subscription, so I detect if the user is purchased the app before and unlock it using customerInfo.originalApplicationVersion. That creates a conflict situation, I am unlocking the pro features for previous users and then there is no active subscription for that user in customerInfo, so the in this code:@Published var customerInfo: CustomerInfo? {didSet {if !customerInfo!.entitlements.active.isEmpty {print("UNLOCK PRO VERSION")} else {print("LOCK PRO VERSION")}}}I lock pro version for a user that hasn’t any subscription, it conflicts for previous user who bought the app. So I am looking for an API to lock the pro features only if the subscription is
Each store has its own list of available countries. You can use RevenueCat to offer in-app purchases to all countries in the following lists:App Store country availability Google Play Store country availability Amazon App Store available countries Stripe available countries
I'm posting our experience to help clarify the (Apple) IAP release process for any other new developers.Our app (v1) was live on the App Store with one IAP, a yearly subscription. Yesterday we were approved to release v2, plus were approved for a new monthly subscription IAP. We released the app almost immediately after approval. After about 20 minutes, the new version was visible in the App Store.However, after downloading the app, we noticed that only the original annual subscription was showing up in the app. The new monthly IAP was not listed. After checking everything out (see below), we decided to wait it out before any real debugging. This morning, the app was listing both annual and monthly IAPs. So, apparently it takes some time, measured in hours, for Apple to 'activate' the SKProducts. NOTE: While the new IAP was unavailable in the app, the App Store listing was actually displaying both the annual and monthly options under: Information In-App Purchases (Yes)
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.