Get help with your SDK implementation.
Recently active
If you’re here, it’s probably because you’ve encountered an active issue related to Apple’s receipt verification.RevenueCat relies upon Apple’s `verifyReceipt` endpoint which is currently facing an outage: https://developer.apple.com/system-status/This seems to be affecting sandbox and TestFlight purchases only at this time, although Apple’s status page doesn’t mention it explicitly.Encountering this issue? Post below ⬇️ RevenueCat isn’t able to resolve this at this time from our end, but it may help bring awareness and ease to other developers facing the same issue.Update 2/8/23 19:20 UTC:Customers (and me 😃) reporting things are working as expected again - post below if you’re still having trouble, seems like a slow rollout of a fix from Apple.Update 2/8/23 17:40 UTC:Apple’s reporting the issue is fixed, but we’re still encountering errors. Will provide another update as soon as possible.
Expo Go doesn’t build native modules, so you may run into this error while trying to run your app with react-native-purchases in Expo Go. In order to use RevenueCat with Expo, you will have to create Development Builds, which can be done either by using EAS, or by making builds that are compatible with Xcode and Android Studio. There are detailed instructions for doing either one in this page:https://docs.expo.dev/development/build/ Easiest way to be able to debug is to just run either of the following:npx expo run:android -dnpx expo run:ios -d We also have a blog post that goes step-by-step into how to make an app with Expo and RevenueCat using EAS: https://www.revenuecat.com/blog/in-app-puchase-expo-managed-workflow/ Let us know if you run into any issues!
Hi! 👋🏻 We’re in the final stages of our testing of some StoreKit 2 features before fully calling it ready for production, and we’d love your help! Context: Starting with v4.0.0, our SDK already uses StoreKit 2 by default on compatible devices for some features where the StoreKit 1 functionality was problematic, buggy or unreliable, and StoreKit 2 is essentially guaranteed to be an improvement (like checkTrialOrIntroDiscountEligibility). For devices that aren’t compatible with StoreKit 2, it defaults to a StoreKit 1 implementation. However, we haven’t enabled StoreKit 2 by default for making actual purchases. We’ve tested it extensively in Sandbox and StoreKit Test (see our blog post on how we test our SDKs) but we need to see how well StoreKit2 behaves in production before calling it ready. How to help: Our SDK includes an optional flag in the configure method, called useStoreKit2IfAvailable. In order to help, all you need to do is to set that flag to true! With this flag set,
Hi @taquitos With the latest 4.0.0-Beta.3, the return from purchaseProduct:withCompletion can have zero entitlement even though it is not true.I can’t reproduce while in debug mode (randomly happens outside the debugger).Attached is a txt file with a log of successful return (I see some errors but not sure how to cancel them).Thanks,
Hello,I’m using purchases-flutter 4.1.2 (latest at the moment). I’ve set up the entitlements, offerings, products as well as packages as guided in https://docs.revenuecat.com/docs/ios-productsI can get the offerrings and display the packages correctly.But when I make a call to `Purchases.purchasePackage()` to purchase a package, the call just hangs and doesn’t return at all.Here’s my dependency list:```environment: sdk: ">=2.17.5 <3.0.0"dependencies: another_flushbar: ^1.10.23 awesome_notifications: ^0.6.21 bloc: ^8.0.2 cached_network_image: ^3.1.0 cloud_firestore: ^3.4.4 easy_localization: ^3.0.0 easy_localization_loader: ^1.0.0 equatable: ^2.0.3 firebase_analytics: ^9.3.1 firebase_auth: ^3.6.3 firebase_core: ^1.20.1 firebase_messaging: ^12.0.2 flow_builder: ^0.0.2 flutter: sdk: flutter flutter_bloc: ^8.0.1 flutter_onboard: ^2.0.0 flutter_platform_widgets: ^2.0.0 flutter_svg: ^1.0.0 flutter_typeahead: ^4.0.0 formz: ^0.4.0 google_fonts: ^3.0.1 grouped_li
I’m using Ionic with Capacitor.The RevenueCat documentation recommends using a cordova plugin, but Ionic has been in the process of migrating away from Capacitor for the past few years, and this is now the only Cordova plugin in my app.There’s already a capacitor plugin on github but I was wondering if there are any plans to release an official Capacitor plugin as well.
We seem to be getting a `Domain=RCPurchasesErrorDomain Code=23` error when trying to retrieve offerings on iOS 14. The full log is as follows:2021-12-03 10:22:16.648693+0200 Today[34769:534081] [Purchases] - ERROR: SKRequest failed: UNKNOWN_ERROR2021-12-03 10:22:16.649045+0200 Today[34769:491827] [Purchases] - ERROR: Error fetching offerings - Error Domain=RCPurchasesErrorDomain Code=23 "None of the products registered in the RevenueCat dashboard could be fetched from App Store Connect (or the StoreKit Configuration file if one is being used).This could be due to a timeout, or a problem in your configuration.More information: https://rev.cat/why-are-offerings-empty" UserInfo={NSLocalizedDescription=None of the products registered in the RevenueCat dashboard could be fetched from App Store Connect (or the StoreKit Configuration file if one is being used).This could be due to a timeout, or a problem in your configuration.More information: https://rev.cat/why-are-offerings-empty, readable
Hello RevenueCat Team,Almost each release we got reject when Apple review team try to make a purchase. I don't understand the reason, but looks like something wrong with receipt.I'm attached the rejection screen and the error desc, please, have a look.What do you think? They say:“We found that your in-app purchase products exhibited one or more bugs when reviewed on iPad running iOS 15.1 on Wi-Fi.Specifically, an error occurred after we purchased the subscription.Next StepsWhen validating receipts on your server, your server needs to be able to handle a production-signed app getting its receipts from Apple’s test environment. The recommended approach is for your production server to always validate receipts against the production App Store first. If validation fails with the error code "Sandbox receipt used in production," you should validate against the test environment instead.” Thank you,Yauheni @ MoonX Team
Hi guys,I complete setup for product and introductory offers for it on AppStore connect. Now I check eligibility for new user (by checkTrialOrIntroductoryPriceEligibility), and completion block return dictionary with eligibility statuses and associated products. My problem is that status for all products is “Not eligible for trial or introductory price.” Why SDK return wrong status?
Hello, I followed step on docs however, I can not get offering and error says: 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 (or the StoreKit Configuration file if one is being used). More information: https://rev.cat/why-are-offerings-emptyI saw there are many other developers have same issue but no solution. This was the my first time to use revenue cat but I think I will implement my own way because of this issue. Thanks,
The new paywall feature looks amazing! Is it possible to use with capacitor (I think not but wanted to verify) and when might it be available? Any suggestions of workarounds for the interim? Thanks!
Hey! I’m getting rejections from Apple due to the fact that products are not loaded on the paywall during their review. In the logs I see that revenuecat sdk returns “SKProductsRequest took too long to complete” after a very long timeout. And I’m not successful in reproducing this behaviour locally or with any other test devices. I’m using React Native and what I do in the code is simply call `await Purchases.getOfferings();` and using `7.6.0` version of the library. I don’t have any additional logs or information since SDK only throws this error. Any advice on how to debug or resolve this?
iPadOS 15 running app from Xcode fails to return any products. Restore Purchases also fails to return.Rebooting iPad allows it to work first time only.This issue is specifically relating to auto-renewing subscriptions.Built using Xcode Version 13.0 (13A233)No issue with same code on iOS 14.Success and failure logs follow.Success:2021-09-24 16:17:50.773181+0800 ZeroTime[345:4478] [Purchases] - DEBUG: ℹ️ Debug logging enabled2021-09-24 16:17:50.773293+0800 ZeroTime[345:4478] [Purchases] - DEBUG: ℹ️ SDK Version - 3.12.42021-09-24 16:17:50.773336+0800 ZeroTime[345:4478] [Purchases] - DEBUG: 👤 Initial App User ID - (null)2021-09-24 16:17:50.777445+0800 ZeroTime[345:4478] [Purchases] - DEBUG: ℹ️ Sending latest PurchaserInfo to delegate.2021-09-24 16:17:50.778858+0800 ZeroTime[345:4478] didReceiveUpdatedPurchaserInfo: <PurchaserInfo originalApplicationVersion: (null), latestExpirationDate: (null) activeEntitlements: {}, activeSubscriptions: {}, nonConsumablePurchases: {()}, requestDate: 2
Hey All,We’re noticed a bug appear on devices running iOS 15.4 having issues when trying to present the store code redemption sheet using the RevenueCat iOS SDK (3.14.1).Purchases.shared.presentCodeRedemptionSheet()The presentation sheet appears, however the expected redeem code page is missing. Instead we’re presented with a “Cannot Connect” with the retry button not performing any action.This is repeatable on all devices running 15.4 and only appears after the update from 15.3.1.Does migrating to the the most recent 4.1.0 release fix this issue for devices on iOS 15.4?Thanks
Hello, `ERROR - The receipt is not valid. The purchased product was missing in the receipt. This is typically due to a bug in StoreKit`.I was recently rejected from app store review due to this weird RevenueCat bug ("react-native-purchases": "5.13.0") that I sometimes experience.I believe that I have set up all of my code correctly, but when clicking on a subscription purchase (using the purchaseProduct method - `const purchase = await Purchases.purchaseProduct(identifier, null, Purchases.PURCHASE_TYPE.SUBS);`) the request can fail and throw the following error. “The receipt is not valid. The purchased product was missing in the receipt. This is typically due to a bug in StoreKit.” It seems that this error will happen in patches 5-10 times in a row, then once I see one success, they are all successful from there forward (the purchase modal shows up with the product, and the user can subscribe to my subscription). Now when I go back into the app, I cannot reproduce the bug as it will be
As per the title:I always get the ‘Receipt is missing error’ when testing via TestFlight.In Xcode, when configured with a StoreKit file, it works fine. Without StoreKit and TestFlight it does not work, the app review is also always getting rejected.I cannot see why it does not work. The products and offerings are configured correctly (and they are shown in the app), it’s just the receipt that is always missing when purchasing.
I use com.android.billingclient:billing:4.0.0 on my application and purchases_flutter 3.10.0 for the revenuecat subscriptions.From May 2022, users can't see the free trial or intro price options. Then, I messaged the GooglePlay and they replied as below:Hello Google Play Developer, Due to a bug in our system, since May 3, 2022, you may be experiencing incorrect or missing subscription information in the results from the Google Play Billing library’s deprecated querySkuDetailsAsync() function. During this time the Google Play Billing library may not have returned information to your apps about free trial and intro price offers for one or more of your subscriptions, even if the user was eligible for these offers. In these cases, users only saw the subscription base plan in the purchase cart, without any free trials or intro prices.Action RequiredWe recommend that you review all of your subscriptions with free trial and intro price offers in the Play Console, and ensure that the correct o
We have an app that requires the users to login before making a purchase.We’re observing (in our sandbox testing) that occasionally a users subscription gets transferred from one of our users id’s to an anonymous id. What's quite frustrating is this is happening very infrequently and we haven’t been able to recreate it predictably.Here is an example event (id: 0a5fc80d-ca5a-451a-8a31-cb16b95a3a92){ "event_timestamp_ms": 1643816650712, "store": "APP_STORE", "transferred_from": [ "ce3873cc-10a7-46d0-9463-43364f6b2cb8", "$RCAnonymousID:6a5e992f89a44858b2a8effa6996f257" ], "transferred_to": [ "$RCAnonymousID:a0490b63949a4b6e99a3bf372b3da781" ]} Our touch points with the React Native SDK are rather light:We have an useEffect() that calls Purchases.setup(key) with our keys in our main App.tsx as per the examples. When a user logs into our app we call Purchases.logIn(user.id) using the response to set our initial local subscription state. To keep things up to date we call Purch
Hello team!I’m configuring a Paywall with the new v2 version. For iOS I’ve managed to make it work perfectly.Now, on Android it seems to be all correct, but the paywall shown is not the one I have configured, it seems a basic default one.I’ve checked and I have the correct Products and Offerings, as I always check it with the getOfferings function in the app.What I can do, do you know what could be the problem?Thanks!
Hi everyone, We are building web application in Flutter and wanted to ask if you can support it anyhow? I have checked official SDK and it seems to not be supported: https://pub.dev/packages/purchases_flutter/score. As of now, we have a great experience integrating your product on iOS and Android.Thanks in advance.Kind regards, Marcin
I am testing purchasing my subscriptions in sandbox. My device has purchased a subscription before, and it has expired.When I go in to purchase again, `Purchases.shared.purchasePackage` returns immediately with the `purchaserInfo` and the default entitlement shows my previous purchase, with an isActive status of false. I was never presented with the purchase modal. When I `restoreTransactions`, the `purcahserInfo` shows the same, an expired entitlement. Why can’t I re-purchase an expired subscription?
I’ve encountered an issue using Xcode 14 beta 4. Updated to RevenueCat 4.9.0 and still seeing the issue. If I use a StoreKit config file with an iOS 16 simulator, when I attempt to make a purchase, the iOS pay dialog never appears and I get RevenueCat.ErrorCode Code=1 "Purchase was cancelled." If I switch to an iOS 15 simulator, it works fine. If I switch to a different scheme that doesn’t use StoreKit, I get the iOS dialog to sign in. If I try this on my own iOS 16 device, it works fine. It seems to only be an issue while using the simulator with iOS 16. Here is what I get when I print out the error.Error Domain=RevenueCat.ErrorCode Code=1 "Purchase was cancelled." UserInfo={source_file=RevenueCat/SKError+Extensions.swift:33, source_function=asPurchasesError, readable_error_code=PURCHASE_CANCELLED, NSLocalizedDescription=Purchase was cancelled., NSUnderlyingError=0x7f85d1a9e2e0 {Error Domain=SKErrorDomain Code=2 "(null)" UserInfo={NSUnderlyingError=0x7f85d1a9e260 {Error Domain=ASDErro
I’ve set up a synced StoreKit Configuration file for my app. On simulators it fetches all the offerings without a hitch, but when running on device it doesn’t. Is this a known limitation or is there something I’ve missed?
Hi! We noticed a somewhat rare crash that we’ve only recently been able to reproduce. This affects all iOS SDK version up to 4.17.5 (the latest at the time of writing). Basically we get a hard crash on[[RCPurchases sharedPurchases] purchasePackage...];The call stack simply points to libobjc.A.dylib at objc_msgSend within our method that calls purchasePackage.We haven’t noticed this crash with the restorePurchasesWithCompletion call. The crash doesn’t happen with getOfferingsWithCompletion either. We were finally able to reproduce this crash in the past few days with our TestFlight builds (and ONLY with TestFlight builds). We are calling all 3 methods from a thread that is not the main thread. Since only purchasePackage crashes (and on Android there are no crashes at all on any of the methods when not called from the UI thread), we never considered this to be an issue. However, then we queued the call the the main thread in iOS like this:dispatch_async(dispatch_get_main_queue(), ^(void)
We have the combined issues of 1) purchase requests hanging and 2) PurchaseErrorCode.operationAlreadyInProgress for our flutter app. Haven’t been able to reproduce on our side but have several users recently report this.Example of a recent Android report: https://finch.hellonext.co/b/Bugs/p/can-t-sign-up-for-trial-with-monthly-billing. We always display the error code that is returned (like in the bug report screenshot) but it sounds like some users can have requestToPurchaseProduct effectively hang without an error code returned. Is requestToPurchaseProduct always supposed to throw an error to timeout, or are we expected to handle timing out purchase requests ourselves?After the hanging, users who close the app and retry again end up getting stuck with PurchaseErrorCode.operationAlreadyInProgress. The error documentation said to wait but the user has been stuck with PurchaseErrorCode.operationAlreadyInProgress for a while, so is there any recommended ways to debug/handle this state?
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.