Share and explore knowledge and tips relating to RevenueCat and subscriptions.
Recently active
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?
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!
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
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
I have an app working where we sell renewing subscriptions. I am trying to implement a new use case, we would be selling for some users a one time purchase that gives them access for 20 months. I was thinking about implementing it as a non consumable IAP, with an entitlement attached, so that when the user buys this product, they get access to the app. But I'd still have to remove the entitlement when the time is up. I could do that in the backend, but I don't see a method in the API to remove an entitlement. How would you implement this? Is there a best practice to link an entitlement to a non consumable IAP with an arbitrary expiration date?
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)
Hi everyone, I was wondering what the best way is to set up different pricing in different countries. Example:High Price Tier: e.g. USA: 9.99 USD per monthMedium Price Tier: e.g. Germany: 7.99 USD (converted from EUR) per monthLow Price Tier: e.g. Brazil: 3.99 USD (converted from EUR) per month What is the best way to do this? Also, it would be nice to run separate experiments for each tier.Is the best way to set up different revenuecat offerings and have the app handle the selection of which offering is chosen based on the country? How would it be possible to run revenuecat pricing experiments then?Are there any best practices? Thank you already in advance. Cheers,Ben
Hi! Just want to share our experience with App Store and app review team not able to fetch products.So we got rejected several times because product prices were not showing up for app review team, while local testing on device and also TestFlight consistently worked ok. So we decided to hardcode our subscription prices and it helped, app got released to App Store. But unfortunately payment wasn’t working, as products were coming still empty. We planned several strategies how to debug it, but I really wanted to give it a time, because a lot of users were posting that it took up to 24 hours for payments to propagate. In our case it took ~72 hours! But it works now! So guys don’t loose hope and just give it a time. P.S. while waiting for payments to propagate, on Approved subscriptions page we fixed typo in our subscription Localization and it turned into waiting for review status. Payments started working as our localization got approved. So not sure at all but maybe it helped payments t
I’m currently facing an issue with my app during the App Store review process, and I need some guidance.Problem Overview:The App Store Review team has rejected my submission because they encountered an error when attempting to purchase subscriptions. Specifically, the error occurs when the app tries to fetch subscription products from the App Store.Details:The subscriptions are still in a "Pending Approval" state in App Store Connect. When the app calls getProducts() or fetches entitlements, it returns no products, likely because the subscriptions haven’t been approved yet. This leads to an error when the App Review team tries to initiate a purchase.What I’ve Done So Far: Receipt Validation: My server is configured to validate both production and sandbox receipts as per Apple’s guidelines. Testing in the sandbox environment works fine, and the app handles receipts correctly in that context. StoreKit Testing: I’ve included a StoreKit configuration file in my Xcode project to simulate
If you plan to have an app that is offline, then there is some information on RevenueCat’s end that you should be aware of.A network connection is required to make a purchase and communicate with RevenueCat, but the subscription status is cached on the device as long as needed via CustomerInfo. This way you can still check for a user’s entitlements so they can continue to access your app’s content. When offline, the current state of the subscription will be preserved until it can be re-synced with RevenueCat (e.g. if they're subscribed, they'll remain subscribed).The app user id and CustomerInfo are cached, and CustomerInfo will be returned while offline forever if the user never goes online, unless something happens that invalidates the cache. The offerings do not persist between app launches, so you will need to cache this data and display them yourself when the app is offline. See our caching docs here for more information.If you do not want users to have access to their subscriptio
Hey everyone, I’m curious what folks’ approach is regarding the Epic-vs-Apple decision? Is anyone making plans already to explore linking out of the app to a web paywall? Or are you going to wait and see how things turn out?At RevenueCat, we’re currently playing around with a few options to support potential use cases (of course, pending what exactly will and won’t be allowed), and I’d love to get a feeling for the level of interest in the topic.JensHead of Product @ RevenueCat
Hi RevenueCat community, my favorite view is the “Recent transaction” view on the dashboard. But it only shows the last 10 transactions. I would like to view much more. But I have no idea how to get that “last subscription” sorting e.g. in the customer list. Any idea?Thank you!
I am developing a Google Play application which has multiple subscription tiers and multiple subscription periods:[Tier A - Annual] [Tier A - Monthly][Tier B - Annual] [Tier B - Monthly][Tier C - Annual] [Tier C - Monthly]I would like to apply different proration methods depending on if the user upgrades/downgrades their subscription.What is the most sensible method to determine if a subscription change is an upgrade or downgrade in this scenario?In this guide an upgrade is described as a change where the ‘price per unit of time increases’. I’m confused about how to compare two subscriptions which use different time units (e.g. moving from [Tier A - Annual] to [Tier B - Monthly]) Many thanks
Hi all,I’ve got some subscriptions defined in Google PlayStore console, but they where to test subscriptions a while back. Now we don’t use them within RevenueCat. But I can’t delete them in the PlayStore console (asked Google Support, but they told me that we can’t remove active products) These old products are never sold because we are stil in develop phase. My question now is, are these products every visible by customers? I don’t use them in RevenueCat and are not showing them in our app on the PayWall. But maybe they are somehow visible somewhere else? And even switch to or able to buy by customers? So is it safe to leave them in de Console (otherwise I have to delete the app in de PlayStore and make a new packageID with all the extra work)What do you guys think? Any advise? PlayStore Console:
Got an email from Google Play asking me to disclose more information regarding RevenueCat:Your app is uploading users' Primary Account information to https://api.revenuecat.com without disclosing it in the privacy policy in Play Console. My app currently offers In-app purchases. I’m looking for Privacy Policies examples. Thanks!
" Error Error 23: There is an issue with your configuration. Check the underlying error for more details" I don't get this error on sandbox but I got this error after my app was published to apple store, where is my error, is it in my code or in apple connect?
RevenueCat’s promotional entitlement feature allows you to grant an entitlement to any of your customers directly from RevenueCat. These are the predefined durations allowed:Duration Description daily 24 hour access three_day 72 hour access weekly 7 day access monthly 1 month (31-day) access two_month 2 month (61-day) access three_month 3 month (92-day) access six_month 6 month (183-day) access yearly 1 year (365-day) access lifetime 200 year access To grant a promotional entitlement with a custom duration (for example, 5 days,) set the start time in the past so that the end time lands when you need. So for example if you want to grant a promotional entitlement for just one hour, grant a daily promotional (which is 24 hours) but set the start time to 23 hours in the past. The end time will then be 1 hour in the future.
If your app is using the native iOS SDK with Swift, you can access the transactionIdentifier field through the transaction object when purchasing the product. You can see more details about this in our 'Making Purchases' docs and RCTransaction object in the iOS SDK. This field is not accessible through RevenueCat's other SDKs, however, can be accessed through webhooks and ETL exports. Typically the information included with PurchaserInfo and EntitlementInfo objects is enough data for most implementations of our SDK.If you're looking for the transactionIdentifier to track consumption of consumable products, consider using RevenueCat's GET /subscribers endpoint instead. You can utilize RevenueCat's unique identifier, id, in the non-subscription object to track consumption of all your consumable products.If there are any additional use cases for utilizing the transactionIdentifier, we'd be happy to share the feedback with our team and/or find another way to help you solve what you're tryi
Hello everyone! I received the Service Account Credentials JSON from the Google Developer API and confirmed that permissions to call the subscriptions API, inappproducts API, and monetization API have all been validated. However, below it says in the Monetization Setup on the play store,"Please verify if the topic name has been entered in the correct format, if Google Cloud has been properly configured, and if you have the necessary permissions."Since I am using Korean, I'm not sure if this is the accurate translation. Why does it show like this even though it clearly states that it's validated in Pub/Sub?
Include refunds / refund info. Refunds should also appear in transactions Paginate transactions page so we can view more
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.