Get help with anything related to RevenueCat.
Recently active
My app has a lifetime subscription in-app purchase (for removing ads). I’ve used RevenueCat from the start, 4 months ago, and it worked flawlessly until now, both with regular paid purchases and promo codes. Users redeemed the code in the Play Store and the next time the opened the app the purchase was in their entitlements.A few days ago I found out that nothing happens anymore when a user redeems a promo code. Those kind of purchases are still regularly processed by the Play Store but now they don’t appear in the “overview” section of RevenueCat, and when the app retrieves the customer info (even after trying to restore the purchases, of course) there’s no sign of their existence. Regular purchases still work, apparently.I’ve tested with several users, even from different countries: same outcome.I’m pretty sure that the entitlements obtained with promo codes in the past still work; the problem occurs only with new attempts that have been made last month. The codes that I’m testing ar
In my flutter app i followed this video steps : https://youtu.be/TrkiSZ2mnlo?si=ko6_FyFvwBjl0mAP :I have this elevated button to make the purchase : ElevatedButton( onPressed: () async { try{ await Purchases.purchaseProduct('Zenth_2000_coins'); debugPrint('Payment success'); } catch (e){ debugPrint('Failed : $e'); } }, child: Text( 'Buy', ), ), now when i test and i hit purchase and type my sandbox account password , the apple pay window close and opens again and if i try again and click purchase and type the password it just keeps on this loop and the transaction never appears on my revenuecat dashboard and never prints payment success ( i ticked the sandbox on revenue cat , and checked all the steps
Does RevenueCat use https when communicating with the backend?In the Export Compliance Information in Apple app store connect, I must provide information about encryption, and https is listed as internal encryption, hence I need to know if RevenueCat SDK is using https.ThanksFredrik
The response time during in-app purchase is very slow. Everytime I try to make a test purchase and click on a package, it take a 4-6 seconds for the bottom sheet to show up, where I can make the purchase. similarly, after the purchase, there is a several seconds ( 5-6 seconds) wait period to get the acknowledgement that the purchase is successful. This is a poor experience for the user. Do others experience the same response time? Is there anything I can to improve the response time? Thanks in advance for your help.
The customer history for my user makes no sense. How can events of billing error and expiry come 1 day after the subscription has expired and it wasn’t renewed.
How to synchronize the subscription status of RevenueCat on my own server
Hello, I configured MagicWeather example (by only changing `appleApiKey` and `ios` bundle name); I also created in-app subscription product in Apple App Store, and configured RevenueCat. Subscription is shown correctly, but it seems transaction never finishes, I am in a loop: Click on "Change the Weather" opens "paywall" widget with correct price shown, and "terms and conditions" footer. Click on the product item in the list (and I have single product only) will popup iOS username/password screen, "Sign in with Apple ID" After authentication, I can "purchase" chosen product, using iOS "Sandbox" native widget (in my case, clicking "Subscribe" button triggers "Enter password to authorize this transaction") After "purchase" it returns to "paywall" screen, and after few seconds delay it returns back to iOS "purchase product" widget, although I don't click anything. In a loopI also added debug message right after `await Purchases.purchasePackage(myProductList[index]);` and it seems this ca
When the user chooses a subscription in my application i want to present also an offer for him to start a free trial if he chooses to. What i want is to start a subscription with free trial or without free trial depending on what the user chooses to. Is there any way to do this or are free trials introductory offers automatically applied if user is eligible and chooses to subscribe?Would this be possible using introductory offers or promotional offers?
Hi guys So I have a user that opted in for the free trial and has being using the app, however on revenuecat it says that the user will be charged today as the free trial period ended, however the user has not being charged (IOS) does anyone know the reason?
I am testing the purchases of subscriptions for both ios and android and receiving webhook notifications to my backend in order to update the subscription status of a user. Android works really well, every time i purchase a subscription, a renewal process happens or cancel/expiration, the events are received by revenuecat in real time and webhook requests are sent instantly. For IOS however for some reason it has a big lag. For example i renew a subscription directly from the app store, and revenuecat has not received the event not even 5 minutes later. Every time a renewal event occurs it’s delivery time is usually 3-5 minutes later then the purchase date in the request. Also the time window between renewal seem to not correspond with the time set in the appstore settings. For example if i set 5 minutes between renewals, sometimes is 5 minutes sometimes is 10 minutes between two renewals.Has anyone encountered this problem in ios sanbox environemnt? Is it the same for production also?
I'm encountering an issue in my React Native app when attempting to downgrade or modify iOS in-app subscription plans. The upgrade process works seamlessly, reflecting changes accurately in the RevenueCat dashboard and customer history. However, when downgrading a plan, although the RevenueCat dashboard captures the change in customer history, the latest downgraded plan doesn't appear in customer information or the RevenueCat sandbox history.
Hello? First, I would like to thank you for your hard work. Thanks to Revenue Cat, we are able to make our payment flow more efficient. Thank you.I am working on synchronizing user subscription statuses using Revenue Cat's SDK and Web Hook. While working, I have some questions regarding the following:During the App's Life Cycle, when CustomerInfo changes, what is the relationship between the timing of this change and the timing when the WebHook event sends a request to the backend server? Is there no guarantee that the request for the WebHook event is sent before the CustomerInfo is updated? If there is no relationship between them, how can we manage the user's subscription status with the database? Users can purchase products both <1> during the app's life cycle and <2> outside of the app's life cycle, with the latter case being when they can directly change their subscription products. How does Revenue Cat detect subscription-related actions initiated by users in scenari
I have my app configured all fine in revenuecat and AppStore Connect. Create a paywall in revenuecat. Create a StoreKit file and its certificate then upload “cer” file to revenueCat… All works perfect both simulator and real device associated with Xcode, I can simulate subscription and it is logged in sandbox transaction history in revenuecat dashboard.The problem is when I upload a beta version to testFlight and beta testers download the app to test it. All of them have sandbox account added in their devices… same problem for all… a popup alert like I attached… I tried deleting StoreKit file and certificate from project and revenuecat web, but it doesn't work any way… the issue is still the same… any help? Anything I’m doing in a wrong way? :(
I have installed the firebase extension and setup both the customers and events collections. Using the sandbox testing guide, I have made a purchase that seems to renew every 5 minutes until it stops after 6 renewals or so. The first event is INITIAL_PURCHASE then a few RENEWALs, but at the end I get 2 events at the same time one for EXPIRATION and one for CANCELLATION both with reason BILLING_ERROR.What is the difference between these 2 and why would they come same time?I was just expecting one. Is this tied to how the test user is setup?Mainly, which event tells me to remove the extra paid features for the user?According to the docs, sounds like EXPIRATION is the only one to remove user functionality and not CANCELLATION? Would CANCELLATION ever come alone with nothing after?
The conversion from a weekly price to a price/month is wrong. If the weekly price is $0.99 then the monthly price is $4.29 and not $3.96.A month is 4.333 weeks and not 4.
I’ve already followed every steps in the documentation and I’m able to retrieve the offering lists in iOS device but not in Android device. The offering is always empty in Android Emulator for some reason.Here is a few information that I already checked my self.1. My App is already published and currently it’s available for Closed Testing in Play Console.2. I already got all checkmarks in the Valid credentials(screenshot below) 3. Here is how I implement it in my code class PurchaseApi {static Future init() async {late String _apiKey; if (Platform.isAndroid) {_apiKey = "Google API from ReveneuCat";} else if (Platform.isIOS) {_apiKey = "IOS API from ReveneuCat";} else if (Platform.isMacOS) {_apiKey = "IOS API from ReveneuCat";} else {_apiKey = "Google API from ReveneuCat";} await Purchases.configure(PurchasesConfiguration(_apiKey));} static Future<List<Offering>> fetchOffers() async {try {final offerings = await Purchases.getOfferings();final current = offerings.current; ret
Hi all, We have an app in both iOS and Android stores and we use RC for consolidating our subscriptions.There are currently few thousand paying subscribers (both Android, iOS and Stripe). The decision has been made to sunset the application and migrate the users to another service.We are looking at;Removing ability to purchase annual subscription. Users can still purchase and use monthly. Stop existing annual subscribers from renewing (is that possible - what is the best way?) In the next 12-14 months - slowly nudge users to another service/app.I guess my question is;What is the best way of doing this? Is it possible to refund users earlier - or at least set their subscriptions to non-renewable (iOS/Android/Stripe). Stripe we seem to have a full control. Are there any other gotchas? To remove the app - do we simply unpublish it from the stores? Will it automatically cancel subscriptions of existing users and refund them? Thanks heaps! Luke
Hi,Firstly, thank you for providing this framework and documentation, it makes integration of subscriptions a breeze. We are using Revenue Cat - React Native SDK.I have a scenario that I am not sure how to handle, was thinking if you can provide any suggestions.We have a web product that uses Stripe for subscription management. The user can signup for a product and gets an introductory free trial of 1 month. Then after that 1 month they are prompted to renew, the can choose to renew by paying, or also can extend their trial by adding another offer code (promotional offer).Lets say, the user now installs iOS app during the first the trial month (that was issued by the web platform). On the app after the month, we were planning to show them a screen to renew the subscription and show the option to enter the promo code. But having implemented this and going through the promo offer purchase flow I get the error that “The User is ineligible for that action.”. I think this has to do with the
We just released our app. 1 user reported this issue where they subscribed, but then see this error message: I don’t know why this happens. Here is my flow inside Expo/React Native app: Wrap app in providers <PurchaseProvider setPurchasesChecked={setPurchasesChecked}> <AuthProvider> <Stack/> </AuthProvider></PurchaseProvider> Inside the PurchaseProvider getCustomerInfo: useEffect( function initPurchaseConfig() { const initialize = async () => { try { Purchases.setLogLevel(Purchases.LOG_LEVEL.VERBOSE); await Purchases.configure({ apiKey: APIKEY }); const info = await Purchases.getCustomerInfo(); const { isActive } = info?.entitlements.active[entitlementName] || {}; setIsActive(!!isActive); } catch (e) { setMessage(['error', (e as Error).message]); } finally { setIsReady(true); setPurchasesChecked(true); } }; initialize(
Debug Output when running app…. is this normal? It does slow down start up. Seems to validate and work fine. MacOS v 14.1.1 (23B81)RevenueCat debug output on my app TalkTextChat ******* app init to call purchases.configure(withAPIKey...[Purchases] - DEBUG: ℹ️ Configuring SDK using RevenueCat's UserDefaults suite.[Purchases] - DEBUG: 👤 Identifying App User ID[Purchases] - DEBUG: ℹ️ Debug logging enabled[Purchases] - DEBUG: ℹ️ SDK Version - 4.17.7[Purchases] - DEBUG: ℹ️ Bundle ID - au.com.egads.talkingtextchat[Purchases] - DEBUG: 👤 No initial App User IDdidSet for phrases[Purchases] - DEBUG: ℹ️ Vending CustomerInfo from cache.phrases: ["Hi, my name is John, I cannot hear or speak, and need to use this app to talk with you.", "Here here is a new test phrase!", "Another new phrase."]didSet for numPhraseEntriesname JohnnumPhraseEntries:3phrases:["Hi, my name is John, I cannot hear or speak, and need to use this app to talk with you.", "Here here is a new test phrase!"
We are a subscription app, made in unity project, that generates iOS and Android apps.We also allow the user to create a subscription via web using Stripe.Currently, we store Stripe’s data in our Users DB and when the users logs in, we check against our DB to see if the user has a valid subscription.For Android and iOS we use a custom App User Id, which is the device/install ID.Our intention is to start identyfying users with our internal user_id (associated to the login credentials) and unify subscriptions via rcat to work cross platform, allowing a user that purchase via any platform, to login in any other device/platform and enjoy the subscription access.What would you recommend as the best way to proceed? How can we logIn a new App User ID for both new and old customers for this to work smoothly?Any help, use cases you know, is welcome!
greetings I have an android application with the kotlin language, and I want to implement pending purchases to deliver coins in a transaction with a slow card, I have already tried several similar sdk, and all have the same problem, that pending transactions to deliver coins do not work due, most are only focused on subscriptions, I would like to know if you can implement purchases of coins and if you can deliver the coins after the transaction is completed later.If you have an example of how to handle coin delivery for pending transactions I would appreciate it, since they all have the same problem.
Hi. I have integrated RevenueCat to my iOS version of my app and am using it with satisfaction. Therefore, I am considering using it to the Android version of my app. My app for Android version has a premium version for lifetime access for almost 10 years. Currently, I am no longer selling lifetime access as I have changed to selling only subscription plans. However, because any promise to users is important, I should continue to provide lifetime access to users who have purchased the product. My app does not have an app login system. So, I have been providing access by referring to PlayStore purchase history. After testing, it seems that RevenueCat's Purchases.configure() consumes all one-time products. This means that if the user reinstalls the app or changes devices, they will no longer be able to access their lifetime access. This is because RevenueCat's anonymous ID would be changed in these situations. The workaround I am considering is to use RevenueCat to process subscription p
After having subscriptions working correctly in my apps on ios and android, since yesterday I have started receiving an error when connecting to the android play store and it is not possible to make a subscription on android. Anyone know what might be happening?
I got the following event through webhook: { "event_timestamp_ms" : 1674239936328.0, "store" : "APP_STORE", "transferred_from" : [ "84c2523f-2f06-49af-886c-a151cc630232" ], "transferred_to" : [ "48f3ab7f-86fd-45a3-9bf6-db8edeea0904" ], "type" : "TRANSFER", "id" : "00DC5B1C-3166-47FB-8F19-AB2B406F8484", "app_id" : "app9a300b6a91"} Is it expected? There is no product_id, so I don’t know what should I transfer.
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.