Get help with anything related to RevenueCat.
Recently active
We are looking to phase out our app (sad days). The idea is to keep it running for another year so the annual subscriptions can run their course We currently have monthly and annual subscriptions, with annual having some additional perks in-appWe removed it from sales from the App store (and equivalent for Play store) to prevent new purchases and auto-renewing, however it seems the subscriptions are still auto-renewing Are there any other steps we need to do?
I am trying to read my logs on development, in iOS, using the Console (not console log), to find messages as per docs. However, I can’t find any messages within the Console filter. On Android `abd logcat` I see them fine. What’s the trick for iOS log viewing?
Hi!We currently have three different subscriptions active in production each with single base plan. Now creating new single subscription with three base plans seems best fit for our usecase. How do I make sure that the users with current active auto-renewable subscription doesn’t get affected if I have to create new one subscription with three base plans?
Hello, I have a project using React Native. In my project, I have subscription products that allow users to access in-app features. If I purchase a subscription on iOS or Android, will I be able to use the subscription on the other platform? Does RevenueCat have a feature for this? My product IDs for iOS and Android are different. How can I use a subscription purchased on iOS on Android as well? Do I need to update something in the backend? Could you please help me with this?
I’m able to build and run the app following the steps in https://github.com/RevenueCat/purchases-ios/blob/main/Examples/MagicWeatherSwiftUI/README.md.Sorry, a very basic question—my RC configurations (entitlements, products, offerings) are defined for my own app XYZ, with corresponding subscription product IDs for XYZ. What does the MagicWeather app expect to be done on the App Store Connect side? Should I add a “MagicWeather” app in my App Store Connect and define subscriptions specific to that app? Or do the subscriptions I’ve defined for my XYZ app in App Store Connect work with this MagicWeather app? Confused—sorry for the basic question. I hope a revision to the project README file can clarify this.
What are the best practices to implement offline use-case?One of the main features of our subscription is to use our outdoor app with poor internet reception or no reception with maps and other information downloaded before. can we check the subscription status while the device is offline? what happens when the reception is very bad but not offline, is it still good to call “Purchases.shared.purchaserInfo” or will it make the UI feel non-responsive?
I made a sandbox purchase but after the subscription expired ReveneCat is now seeing my non-sandbox subscription which is still active so it never expires in the app. Am I doing something wrong here?The customerInfo dictionary is showing non-sandbox:2024-08-17 17:48:36.722499-0600 BackcountrySkiReporter[3714:868874] [network] DEBUG: ℹ️ GetOfferingsOperation: StartedPrinting description of purchaserInfo:<CustomerInfo:originalApplicationVersion=1.0,latestExpirationDate=Optional(2024-08-26 21:26:33 +0000),activeEntitlements=["pro": "<EntitlementInfo: \"\nidentifier=pro,\nisActive=true,\nwillRenew=true,\nperiodType=PeriodType(rawValue: 0),\nlatestPurchaseDate=Optional(2023-08-26 21:26:33 +0000),\noriginalPurchaseDate=Optional(2018-08-19 21:26:34 +0000),\nexpirationDate=Optional(2024-08-26 21:26:33 +0000),\nstore=Store(rawValue: 0),\nproductIdentifier=com.bcski.pro.annual,\nproductPlanIdentifier=null,\nisSandbox=false,\nunsubscribeDetectedAt=nil,\nbillingIssueDetectedAt=nil,\nownershi
Hello, We export RevenueCat data to Metabase via a Webhook. We'd like to reproduce the main tables we have on RevenueCat to cross-reference them with our other collected user data, but we can't find the same data between our Metabase and RevenueCat tables. We've tried to follow the instructions on this article, but the names of the columns we have are different from those indicated on this article. Do you have more precise documentation that would enable us to reproduce your tables using the three tables provided below this email? Maybe it would be easier to do a visio to see it together?Thanks a lot for your help,Louis Table 1 : RevenueCat Subscription Event : - ID- Event ID- Type- App User ID- Original App User ID- Date - Store - Cancel Reason- Expiration Reason- Usd Price - Eur Price- Price- Currency- Tax Percentage- Comission Percentage- Transaction ID- Original Transaction ID- Country Code- Offer Code- Device ID Attr- Product IDTable 2 : Revenuecat Subscription- ID- Subscriber ID
This might be related to this threadI used the Stripe test mode to purchase a subscription. It's shown in Sandbox mode on the RC website for that customer. The customer has the attached entitlement granted. But when I call the REST API like this:https://api.revenuecat.com/v2/projects/${revenue_cat_project_id}/customers/${user_id}/subscriptions?environment=sandboxIt returns an empty list.I don't see the documentation mentioning anything about the subscriptions endpoint still being in beta, so I assume it should work for Stripe subscriptions as well. The goal I'm trying to achieve is for my Flutter app to determine which store a user's current subscription was purchased with on the web. I need this information to provide them with the correct management URL.I'm using the SDK for mobile platforms, and a Firebase Function to call the REST API on web, because I believe the Flutter SDK does not work on Flutter web. Correct me if I'm wrong. I'm open for any suggestions on improving this flow
When I submitted my app for review on the Play Store, it was rejected due to a "Broken functionality policy violation." The email included a screenshot that shows "The item that you were attempting to purchase could not be found." After investigating this error, I found that it occurs when the app is used with the non-License Tester. Therefore, I attached the License Tester account information to the app submission details and explained to the reviewer how to log in with the License Tester account. However, the app was rejected for the same reason again. In this case, how can I pass the review?It seems that the reviewer is not logging in with an account registered with the License Tester, so I looked for other methods. In one article, it was reported that it was possible to pass the review by ensuring that the error dialog would not appear, even if the purchase could not actually be completed.So, I ran the app locally using an Android device logged in with a non-License Tester account
Hello,We have a huge rate of “Payment Pending”, “Payment Decline”, and “Canceled” on our subscriptions in Google Play Store, after the end of one-week trial.We tried contacting Google several times, but they say everything is normal and don’t give us any helpful answer. :-/Since some of the payments go through, we believe it shouldn’t be a general technical issue. So, we are wondering if anyone has any idea, thoughts, or experience that can help us. Here is one page of our “Order management.” We have 8 pages like this in August. Further Notes:We are in the US, and running Google Ads in the US. (Most these users are US-Based.) We have a registered LLC in California, operate in California, have got a D-U-N-S number and Tax Registration numbers and we have put all of them in the Developer profile and Google has validated them. We tried switching from $59.99/yr to $7.99/mo (with one week trial) to reduce the transaction amount, but we still see a lot of these Payment Pending/Declined/Can
For my product, users frequently download the app after subscribing by first redeeming a promo code.Sometimes, on a fresh install, RevenueCat automatically syncs a user’s subscription. Other time, it does not and the user has to tap our “restore” button, calling restorePurchases, making for a confusing UX. After much testing, I cannot explain this discrepancy.What is the best way to ensure that the user’s subscription restores/syncs preemptively, so I can present the correct onboarding process? Calling syncPurchases does not seem to help at all. I’ve tried it before sign-up (anonymous user ) as well as after sign-up (after calling logIn and setting the user ID with RevCat).The docs indicate that syncPurchases should successfully sync the subscription like restore does:This method, much like restorePurchases, reactivates any content that had previously been purchased from the same store account (Apple, Google, or Amazon).This answer from the RevCat team specifies about anonymous ids: sy
Hello! I am trying to verify a user’s subscription on my backend, and it seems like there’s a lot of event types from the revenuecat webhook to consider.https://www.revenuecat.com/docs/integrations/webhooks/event-types-and-fieldsI want to know if i want to ensure my user’s subscription status on my backend matches with the revenuecat source of truth, do i need to necessarily implement a handler for each of these event types? It feels like alot of effort, and I am wondering if there is usually a need to implement handling for all event cases, or do most apps just need to implement for a few event types?
I want to present the Paywall, if needed, on every 4th launch of the app. I can track the launch count, but can’t seem to figure out how to couple this with .presentPaywallIfNeeded in the ContentView. // Show paywall every 4th launch if launchCount % 4 == 0 { // Present RevenueCat Paywall presentPaywall() }import Foundationimport RevenueCatclass SubscriptionManager: ObservableObject { @Published var hasPro: Bool = false init() { checkSubscriptionStatus() } func checkSubscriptionStatus() { Purchases.shared.getCustomerInfo { (customerInfo, error) in if let error = error { print("Error fetching customer info: \(error.localizedDescription)") return } print("checkSubscriptionStatus") DispatchQueue.main.async { self.hasPro = customerInfo?.entitlements["pro"]?.isActive == true print("hasPro: \(self.hasPro))") } }
Similar to this post I have a iOS RevenueCat pricing experiment. Separate from that, I have offer codes that users can use to purchase the subscription (standard Apple offer codes). Will the experiment accurately exclude purchases made through offer codes?
Summary: App Store in-app purchases not pulling correctly with promotional offer (free trial)Description:I am trying to offer users a free trial using RevenueCat and in-app purchases. The line of code throwing the error is:const selectedPackage = offering.availablePackages[0]; // This is the package objectconst product = selectedPackage.product; // Extract the product from the packagelet discount: any = null;if (product.discounts) {await Purchases.restorePurchases().then((res) => {console.log('Restore purchases:', res);});discount = await Purchases.getPromotionalOffer(product, product.discounts[0]).catch((error) => {Alert.alert('Error','An error occurred while fetching the subscription details. Please try again.');console.log('Error getting discount:', error);setLoading(false);return null;});}Specifically, the Purchases.getPromotionalOffer() is throwing the error:Possible Unhandled Promise Rejection (id: 0): Error: The receipt is not valid.The debug logs are showing the following
'">hacker
When adding an iOS In-App Purchase key to prepare for StoreKit 2 support, I see that in the docs it says You can use the same in-app purchase key for all of your offers. Can someone confirm that you can also use the same IAP Key for all of our RevenueCat Projects? We have multiple apps in the App Store, and each is configured with a different RevenueCat project. Can we use the same IAP key for all of these projects, or do we need to create one for each Project? The key is created in App Store Connect at the account level, not tied to any specific app, so it seems plausible that we are intended to use the same key for multiple projects / apps within RevenueCat.
We want to be able to offer a free trial to our new users when they onboard. If they don’t convert in a timeframe, we want to offer a discount to convert them. I thought targeting would help us to achieve this, but apparently not! What would you recommend?
Hi,we have internal test servers where we would also like to develop our webhook endpoints on so we can test receiving events from the RevenueCat API. Those servers are obviously only accessible from our internal network by default.To make the webhook URLs accessible for RevenueCat, I’d like to know what IP range the requests would be coming from, so I can configure our firewall accordingly.Thanks a lot,Markus
Hey,I am very new to everything involving in-app purchases, so sorry if this is a somewhat confused question. I am building an app (iOS/macOS only) that involves making calls to some AI tools through a custom backend that I am building as well. I would love to not force users to create accounts at all, since purchases are done and identified through the user’s Apple ID anyways, so there’s no immediate need to. I could just let them use the app as anonymous users. However, I need some way for the backend to know if an incoming request is made by a user with an active subscription. I searched online for quite a bit, but haven’t found this exact problem yet. From what I read in the documentation, there might be a way to do this, by sending the users App ID (generated by the RC SDK) to the backend on each request and have the backend call the RC API with that App ID to check the subscription status. I have not tested this because I am not at the stage of development yet. I just wanted t
Hi allLooking at potentially doing a campaign where group of users get X days free access to app. Many of these are previous subscribers or trials that no longer have an active subscription. I know on the customer level we can manually apply a single entitlement. Is there a way in the RevCat console to do this in bulk? e.g. all customers in a list (from RevCat customer list) get an entitlement applied? Thanks
Offerings are working when I submit to the App Store on test flight and real device. , but once they are approved by apple and ready for distribution, the offering do not show. Are they changing some code? This makes no sense to me why this is happening. This is the 1st time submitting an in-app purchases for me. I feel like I'm doing something wrong but how would Apple approve this if it was not working for them. It's like once it goes into production something changes. The lay out is the user has 3 Searches (credits) once the 3 searches (credits) are used on the 4th search the paywall with offerings pop up. This works perfect in testing but once apple approves it, it just shows Loading which is my default when the offering do not load. Paywall comes up but no offerings Any help is appreciated. Thank you.
Hello,The new Placements feature looks great although I’m missing having metadata defined per Placement that I could read in the app. Currently metadata are only available on offerings.Imagine that you have 3 Placements, with different offerings eachPlacement1 → Offering1Placement2 → Offering2Placement3 → Offering3For each placement I’d like to dynamically define some behaviour using metadata, e.g. whether to show a success screen or subsequent better offer paywall. I could add such logic to the app by checking Placement, but it requires a new app release each time I want to change such behaviour. I could also add metadata to offering, but keep in mind the offering may be assigned to various Placements while the behaviour should be defined per place.What do you think?
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.