Get help with your SDK implementation.
Recently active
Hi,I have setup revenue cat for my flutter app. I have double checked product IDs aligned to play store and my revenue cat paywall works for debug mode on my Android emulator. It also works for my iOS device without any issues.However, when I try testing the subscription through (Android) play store closed beta testing link and download the app, I get the error indicating a configuration issue. This is strange because if I run the app in debug mode in my android emulator it still works, and I can make test transactions. Error 23: There is an issue with your underlying configuration. Check the underlying error for more details.Any issue why this could be happening?
I’m building an app using KMP (Kotlin Multiplatform) with a shared UI (Compose Multiplatform). When I test my iOS app via a TestFlight build, the paywall looks completely different from what I designed on the dashboard—it appears very primitive. However, when I test the Android version, it matches the dashboard design perfectly.How can I ensure the iOS version aligns with my intended paywall design?library version:purchases-kmp = "1.7.2+13.26.0"purchases-core = { module = "com.revenuecat.purchases:purchases-kmp-core", version.ref = "purchases-kmp" }purchases-ui = { module = "com.revenuecat.purchases:purchases-kmp-ui", version.ref = "purchases-kmp" }on my ios Podfile:pod 'PurchasesHybridCommon', '13.26.0'pod 'PurchasesHybridCommonUI', '13.26.0'iOS version: 18.3.1the ios paywallmy design on dashboard
I realize this is similar to the post here, but was hoping to dig into it a bit more on why we are seeing this failure.We are seeing “The device or user is not allowed to make the purchase.” when attempting to call Purchases.getProducts() or Purchases.getOfferings() from our React Native app. A few notes:We’re on React Native 0.63. (I realize that the docs recommend 0.64 or newer, but it was my understanding that it should still work on this version). We’ve ensured that the emulator we are running has the Google Play Services SDK installed. According to the AVD Manager, we’re using a fairly new Android version: Android 11.0 (Google Play Services) We are logged into an account on the emulator that is registered as a license tester on the Google Play Console. The emulator has been rebooted several times.This error happens in both our main app and a simple test app that we put together for the sake of testing. Is there something else that we are missing in our testing process that cou
We tried implementing a custom font for the paywall screen using Expo React Native, but couldn’t get it to work on iOS despite multiple attempts (trying on simulator just to see if the fonts show). I followed both the Expo documentation and the standard React Native approach for custom fonts, but nothing seemed to work. Is there a reliable way to do this using Expo? Followed the instructions here as well (https://www.revenuecat.com/docs/tools/paywalls/displaying-paywalls#how-to-use-custom-fonts-2), along with the naming conventions. Still seeing the error that my custom font couldn’t be loaded - falling back to system font.For reference, I’m loading in fonts into my app using the `useFont` hook in Expo - https://docs.expo.dev/develop/user-interface/fonts/. Would really appreciate some help here!
I'm experiencing unexpected behavior when using a custom App User ID with react-native-purchases.At app start, I call Purchases.configure exactly once (on every login) and immediately provide the Cognito sub as appUserID: const cognitoSub = await Storage.getUser(); Purchases.configure({ apiKey: ..., appUserID: cognitoSub, }); However, when calling await Purchases.logIn(cognitoSub) shortly after, the customerInfo.originalAppUserIdstill returns an anonymous ID ($RCAnonymousID...).Even when purchases are restored, the originalAppUserId is still the anonymous ID, not the custom one passed to configure(). This leads to purchases being restorable across multiple user accounts on the same device, which should not be possible.What’s strange is that in TestFlight restoring purchases with a different account on the same device failed, as intended.But in production, any user on the same device can restore the purchase, even with a different Cognito ID.I’m using the latest libraries:"react-native-
Hello, I am working with no anonymous Id’s on Flutter App. Once the user logs in for the first time I call Purchases.configure(PurchasesConfiguration(‘Key’)..appUserId = ‘id’);If a user logs out and another logs back in I call Purchases.login(‘newId’);I have a flag to know when I have called Purchases configuration for the first time in my business logic. However, I do not know if the persistance is going to be the same as with the Revenue Cat package when app is closed, reset, etc. Will it be safe to call Purchases.configure anytime a user logs in regardless if it has been already called? If not, is there a method to validate if Revenue Cat package has been loaded? Thanks
Hi All,I’ve made a very quick and dirty GDScript port of the Purchases Unity SDK to Godot Game Engine here: https://github.com/werdnahull/purchases-godot. Only Android works so far, but iOS is in the works. As I said, it was done quick, so quite a few things are not done the “Godot” way, such as function names and variables. Callback functions were converted to signals, however.
Considering the latest events around Unity, and the community’s backlash, many are exploring OSS alternatives like Godot. Unfortunately non of the alternatives provide stable IAP solutions.Would RevenueCat explore the opportunity to port the SDK to Godot, or provide some guidance how this can be accomplished?I’m particularly interested in a C# port, however GDScript seems better supported. Godot 4 doesn’t build C# to iOS/Android, yet.
Hey everyone,I’ve been working on an Android app using Next.js 13 (with SSR), wrapped in a Capacitor container. I integrated RevenueCat (@revenuecat/purchases-capacitor) to handle subscriptions. The native logs show that the plugin registers successfully and I can fetch product offerings just fine—RevenueCat pulls the subscription details from Google Play (e.g., monthly, annual). However, whenever I tap my “purchase” button, the actual Google Play purchase dialog never shows up.Here’s what I do see in the logs: Capacitor is recognized as running on Android. RevenueCat logs: “Retrieved productDetailsList…” for my monthly/annual SKUs. CustomerInfo gets fetched repeatedly from the cache (no active subscription found). No sign of purchasePackage(...) or the “Launching billing flow” logs from BillingClient. I also tried: Uploading a signed release AAB to the Play Console in an Internal Test track and installing the app from the Play Store with my tester account. Opt-in link is opene
Hi, I’m working on an Expo/React Native project which is nearly completed. On iOS, everything has been working perfectly - I’m using a V2 paywall. On Android, opening the paywall crashes the app, with the following error:java.lang.IllegalArgumentException: Software rendering doesn't support hardware bitmaps android.graphics.BaseCanvas.throwIfHwBitmapInSwMode(BaseCanvas.java:726) android.graphics.BaseCanvas.throwIfCannotDraw(BaseCanvas.java:81) android.graphics.BaseCanvas.drawBitmap(BaseCanvas.java:139) android.graphics.Canvas.drawBitmap(Canvas.java:1604) androidx.compose.ui.graphics.AndroidCanvas.drawImageRect-HPBpro0(AndroidCanvas.android.kt:275) androidx.compose.ui.graphics.drawscope.CanvasDrawScope.drawImage-AZ2fEMs(CanvasDrawScope.kt:260) androidx.compose.ui.node.LayoutNodeDrawScope.drawImage-AZ2fEMs(Unknown Source:24) androidx.compose.ui.graphics.drawscope.DrawScope.drawImage-AZ2fEMs$default(DrawScope.kt:587) androidx.compose.ui.graphics.painter.BitmapPainter.onDraw(Bitma
Got a default paywall that is working well with a state for showing a sheet and a sheet modifier.sheet(isPresented: self.$displayPaywall) { PaywallView(displayCloseButton: true) } But I would like to have another paywall in select places. I’m unable to find documentation on this. The params available include “offering” for PaywallView and I’ve tried setting it with a string matching my other paywall offering id and also tried declaring it prior to the view.Does not work at all and makes the project not build.Is there any documentation available on this for paywall v2? This page has nothing on how to use the offering parameter - https://www.revenuecat.com/docs/tools/paywalls-v2/displaying-paywalls
Environment- react-native-purchases: "^8.9.1"- react-native-purchases-ui: "^8.9.1"- react-native: "0.76.7"IssueI tried integrating the customer as RevenueCat documented, and nothing appeared when I clicked the “Manage Subscription” button. It seems that the RevenueCatUI.presentCustomerCenter() is not working. What I've Doneawait RevenueCatUI.presentCustomerCenter({ callbacks: { onRestoreCompleted: ({ customerInfo }) => { setCustomerInfo(customerInfo); checkSubscriptionStatus(customerInfo); }, onFeedbackSurveyCompleted: ({ feedbackSurveyOptionId }) => { console.log('Feedback survey completed:', feedbackSurveyOptionId); }, }, });Expected BehaviorThe customer should have displayed it as it was configured perfectly, as instructed in the documentation. Actual BehaviorIt does not work at all when the button is clicked, and nothing shows up. Very importantly, there has been no response er
Hi team,I noticed that PaywallView is currently gated with #if !os(macOS) && !os(tvOS), which excludes macOS support. I was wondering if there are any plans to expand PaywallView to macOS in the future?As macOS apps continue to grow—especially with Catalyst and cross-platform development—it would be incredibly helpful to have native paywall support on macOS as well. I’d love to see this added to the roadmap if it’s not already on there!Thanks for all the great work you’re doing!
Contextual closure type '@MainActor @Sendable (CustomerInfo) -> Void' expects 1 argument, but 2 were used in closure body .onPurchaseCompleted { customerInfo, storeTransaction in print("Purchase Completed: \(customerInfo.entitlements)") I’m trying to get the original transaction ID from an ios subscription purchase using consumerInfo in revenue Cat but consumer info is found in the package. Need the original transaction ID to match to my backend. Any ideas on how to this?Thanks!
The documentation does not provide a way to check if a customer is subscribed. It shows how to for Kotlin, but not with KMP. I tried see if the Kotlin way would work but there is no getCustomerInfoWith(), but there is a getCustomerInfo() but it returns nothing.
onRestoreCompleted on iOS will not fire if a restore is attempted but the user doesn’t have any active subscriptionsThe thread on PaywallView callbacks not working includes this comment.I am trying to wrap up my app with both subs and a Lifetime purchase IAP.If someone buys the once-off Lifetime they should be able to restore that.Was the doesn’t have any active subscriptions just a mis-naming in passing or is this a missing feature?Apple expect us to be able to restore such.
I even try to purchase in debug sometime its successful sometime it fails and appstore reviewer raises same objection here is the error i get on macOS.Received error that does not have a corresponding StoreKit Error: Error Domain=AMSErrorDomain Code=305 "Purchase Failed Server canceled the purchase" UserInfo={AMSFailureReason=Server canceled the purchase, AMSURL=https://sandbox.itunes.apple.com/WebObjects/MZBuy.woa/wa/inAppBuy?guid=5CE91E9CB360, AMSDescription=Purchase Failed, AMSStatusCode=200, AMSServerPayload={ "cancel-purchase-batch" = 1; customerMessage = "Unauthorized_message"; failureType = ""; "m-allowed" = 0; pings = ( );}, NSDebugDescription=Purchase Failed Server canceled the purchase}Received error that does not have a corresponding StoreKit Error: Error Domain=ASDErrorDomain Code=500 "(null)" UserInfo={client-environment-type=Sandbox, NSUnderlyingError=0x6000026468b0 {Error Domain=AMSErrorDomain Code=305 "Purchase Failed Server canceled the purchase"
I just tried out the amazing Paywall v2 editor on my RC-Account. In the editor my Paywall looks fine but neither my native iOS nor Android-App are showing it correctly. On iOS I see a big red warning (see below).I have the latest SDK version iOS: 5.20.3 and Android: 8.15.1. I added a german localization to my Paywall.For iOS I’m using Xcode 16.3 and run the App on physical device or simulator with iOS version 18.3.2.Has anyone seen similar issues and has a solution.
I followed the instructions (as best I can tell) to integrate RC into my react-native app. I added the subscription group and product in Appstoreconnect console. I added the sample code in my react-native app, and am trying to just “get the current offerings”. I get the generic error:[Error: 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-empty] After following that link ^, RC gives me a Troubleshooting Guide with a list of items to check. (Great feature btw)The 3rd item in the list states:Ensure the products are in the 'Ready to Submit' or 'Approved' state in App Store Connect. If you're submitting your first in-app purchase or adding a new in-app purchase type to your app, you'll need to submit
I checked some other related issues (this, this) but seems different. I just made an SDK update and am running into issues:SDK and Versions:"react-native": "0.76.7", "react-native-purchases": "^8.5.3", "react-native-purchases-ui": "^8.5.3", "expo": "~52.0.32", Android Studio Ladybug Feature Drop | 2024.2.2 Build #AI-242.23726.103.2422.12816248, built on December 17, 2024 Runtime version: 21.0.4+-12422083-b607.1 aarch64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Toolkit: sun.lwawt.macosx.LWCToolkit macOS 15.3 GC: G1 Young Generation, G1 Concurrent GC, G1 Old Generation Memory: 2048M Cores: 12 Metal Rendering is ON Registry: ide.experimental.ui=true i18n.locale= Android Device: Samsung Galaxy S22, running Android 14 I have had the Paywall running for some time on Expo SDK51 as described in your docs with the custom font family:<RevenueCatUI.Paywall onDismiss={onPressDown} onPurchaseCompleted={handleContinue} onPurchaseError={handleError} onRe
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’m trying to implement web billing on my site but the documentation is extremely sparse. As far as I can see it only outlines the javascript sdk calls but I can’t find anything on how to integrate it into my site. If someone is going to sign-up using a credit card how do I pass that information. The documentation completely skips over this. Do you have a clear example of how this whole thing works? How do I integrate stripe and apple pay and google pay to actually use Web Billing. It seems to only option at this point is to use the hosted page.
I’m creating a Flutter app with subscriptions. I’m using product priceString to get formatted price of the subscription. For some reason I get two different strings when I debug on device and on simulator (“4.99 USD” and “$3.99” respectively). 4.99 is the correct price for this subscription and I want it to be displayed with dollar sign ($) Instead of “USD”. How can resolve this issue?
Your OpenApi yaml files:www.revenuecat.com/docs/redocusaurus/plugin-redoc-0.yamlwww.revenuecat.com/docs/redocusaurus/plugin-redoc-1.yamlwww.revenuecat.com/docs/redocusaurus/plugin-redoc-2.yamlwww.revenuecat.com/docs/redocusaurus/plugin-redoc-3.yamllack format specifier for integers explained in OpenAPI standard:https://spec.openapis.org/oas/v3.1.0.html#data-typesThis causes problem for Auto-generation of API layer for languages like C# (ASP.NET). E.g. in file plugin-redoc-0is a field `purchased_at` specified as:purchased_at: description: The date when the purchase was made in ms since epoch nullable: false type: integer example: 1658399423658This field is too long for integer (int32). Please specify the missing `format` attribute: `int64` into fields like this. You already closed similar issue without any explanation and reasoning. Can you please keep this opened or ideally fix it ? Thank you. PS: I am maintainer of .NET MAUI RevenueCat library https://github.com/Kebechet/Maui.Reve
In our iOS app we have a RevenueCat paywall to allow purchasing a subscription.If a user has an active subscription with account A, logs out, logs into account B, and tries to purchase a new subscription → then the following “You are currently subscribed to this” alert pops up.We want to allow the user to transfer their account if they wish. Is there any way to change the copy of this alert to mention that they’re about to transfer their account? Right now it’s very unclear that pressing “OK” will transfer their subscription.Thank you!
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.