Get help with your SDK implementation.
Recently active
HelloI am developing an application with React Native Expo, but I am getting the error below. My configurations are complete, I was able to pull the products before and made the purchase. LOG Error fetching products: [Error: There is no singleton instance. Make sure you configure Purchases before trying to get the default instance. More info here: https://errors.rev.cat/configuring-sdk] React.useEffect(() => { Purchases.isConfigured().then((configured) => { if (!configured) { const resp = Purchases.configure({ apiKey: Platform.OS == "android" ? "goo******" : "ap/***********n" }); console.log("resp",resp) //undefined } else { fetchProducts() } }) }, []); const fetchProducts = async () => { try { const offerings = await Purchases.getOfferings(); const availableProducts = offerings.current?.availablePackages; setProducts(availableProducts |
Curious if react-native-purchases-ui is react-native-web supported, or not.
I’m using latest RC sdk in Android 7.2.7. , and I’m forcing my users to have portrait mode for the activity that contains my paywall, my surprise was that some users installed my app in a tablet and the view was in “landscape”, so the header (image is too big) and they can’t see the offers/scroll. tried to wrap the content under a Column and add `verticalScroll(rememberScrollState())` in compose, seems that “kinda” work, but you can see only one offer (seems that the RC Paywal it does not consider nested scrolling)also I tried for now using the footer only for lansdscape/Compat window size, but kinda the same, the button is not visible and the “restore” button is not visible, if I wrap under `verticalScroll` the app crash,Box( modifier = Modifier .fillMaxSize() .padding(paddingValues)) { val options = PaywallOptions.Builder( dismissRequest = { onNavigationClicked() }, )).build() if (windowSize.heightSizeClass == WindowHeightSizeClass.
Hello guys when I try to use eas build i always got this error. :/ does anyone could help me
Hi guys, I am new here:)I am working in expo managed workflow, building an ios app.I installed the react-native-purchases through yarn (version 8.5.1). I try to do my eas build in development (works in the past).after a few seconds, I get this error that prevents the build? what am I doing wrong? “Package "react-native-purchases" does not contain a valid config plugin.”Thank you!!M (P.s. I tried multiple versions but nothing works)
Been using RevenueCat for many years in a mixed Objective C/Swift project and suddenly having problems: Purchases.shared.getCustomerInfo { (customerInfo, error) in DispatchQueue.main.async { if let error = error { let alert = UIAlertController(title: nil, message: error.localizedDescription, preferredStyle: UIAlertController.Style.alert) alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) self.present(alert, animated: true, completion: nil) } else if let customerInfo = customerInfo { myObjectiveCClass.purchaserInfo = customerInfoLast line gives the compilation error: Cannot assign value of type 'RevenueCat.CustomerInfo' to type '__ObjC.CustomerInfo'They are the same type. Here’s the declaration in myObjectiveCClass:@property (retain, nonatomic) RCCustomerInfo *purchaserInfo;and show definition on that RCCustomerInfo goes to the definition in
During testing, purchases are working fine. So we uploaded a version to the play store. But now our users can’t make purchases, the error that pops up is “The device or user is not allowed to make the purchase” and other times it’s “There was a problem with the play store”.This is from a Unity project
Currently, we are using pure StoreKit2 to detect user’s entitlement. var purchasedShops = Set<Shop>() //Iterate through all of the user's purchased products. for await result in Transaction.currentEntitlements { //Don't operate on this transaction if it's not verified. if case .verified(let transaction) = result { //Check the `productType` of the transaction and get the corresponding product from the store. switch transaction.productType { case .autoRenewable: fallthrough case .nonConsumable: let productID = transaction.productID guard let shop = Store.identifierToShop[productID] else { continue } // Not sure such checking is required. I guess no harm to do so. if transaction.revocationDate == nil { purchasedShops.insert(shop) } default: preconditi
In Google Play, my free trial is not showing up for my monthly subscription and I can’t figure out why. Do I need to recreate the app or somehow re-sync the settings from Play Store?
When a user first enters our app, they are setup as an anonymous user and get RevCat’s anonymous ID. This happens via using `Purchases.configure(revcat key)`. Later should they login with a named account from our system, we use `Purchases.shared.logIn(customID)` to update the RevCat user with our customer identifier. The issue is that after doing this and checking `Purchases.shared.customerInfo()` for the ID, the initial anonymous ID is returned rather than the custom ID supplied at login. Should the login method not change the user’s ID when checking their `customerInfo`?
I'm using Flutter to develop my application, but I ran into a problem when I tried to incorporate a revenue cat subscription feature into my Android app. This problem is specific to Android, not iOS, so the error message I'm seeing in the debug log is “Error loading offerings info: PlatformException(3, The device or user is not allowed to make the purchase., {code: 3, message: The device or user is not allowed to make the purchase., readableErrorCode: PurchaseNotAllowedError, readable_error_code: PurchaseNotAllowedError, underlyingErrorMessage: Error when fetching products. DebugMessage: Billing Unavailable. ErrorCode: BILLING_UNAVAILABLE.}, null)”I have followed all the instructions they have given me, and I have made sure to do so, but I'm still having trouble. If someone could assist me, I would be very grateful.
I’m trying to understand the new refund request functionality that RevenueCat provides, as announced here: https://revenuecat.releasenotes.io/release/yTKyk-we-now-handle-apple-refund-requests-automatically. My question is around the reporting of consumption. The article states:The degree to which a customer consumed an in-app purchase (for example, someone six months into an annual subscription would have consumed that for 50%) Is this the only mechanism RevenueCat implements for reporting consumption to Apple — calculating the fraction of a subscription that has elapsed? It seems that Apple would already trivially be able to calculate that from their records given the time of the refund request? My app delivers user credit for both consumable IAPs, and over time for auto-renewing subscriptions. Usage of these credits costs me real money, so I’m certainly concerned about how much has been consumed at the time of a refund. Does RevenueCat have any solution for reporting metered usage s
Does RevenueCat support React native for web ?I do not see a guide on how to implement it. I testedPurchases.configure({ apiKey: process.env.STRIPE_API_KEY, })and I get a Cannot read properties of undefined (reading 'setupPurchases')
Hi, We are trying to use SKAdNetwork to track trial starts and trial conversions via Branch. While working with Branch customer support, they suggested we track these natively via BranchEvents so that the events would be captured by SKAN. This is easy for trial starts since we get a callback on device when the trial starts. However, for trial conversions, we need to do this client side as well to have them registered via SKAN. Is there an easy way to do this? One way I thought about doing this would be to set up `addPurchaserInfoUpdateListener` in the app and an async storage valuue to set this listener until if fires and then check if the user info changes to subscribed or cancelled. This seems a little convoluted though so I wanted to see if there was an easier way. As an aside, the Branch docs should probably be updated with a note around SKAdNetwork as we spent a lot of time trying to debug why we were getting no attribution data and it was because the events were coming server sid
Hello,I have tested subscriptions using RC and verified that the transactions appear in the Sandbox. Now I want to test purchasing In App Products from Google Play. I have set up the products in play console and configured the products and offerings in RC as well. I was able to use the RC API to make the purchase using Test Card from my app but the transactions don’t show up in the Sandbox. Is there a different place where non-subscription transactions are stored?
So I’m currently trying to implement revenuecat into a swiftui app. This is my first foray into swiftui and I haven’t really done any swift in years either so the lifecycle events are confusing me.I’ve successfully implemented the revenuecat SDK and in my “app” class I have a “Stream” setup to listen to events like so. My model is quite simple just those 2 properties and a computed property of isUnlocked that looks for an active entitlement. AppView().environmentObject(self.revenueCatCustomerData) .task { // Listens to AsyncSequence for customer info updates for await customerInfo in Purchases.shared.customerInfoStream { self.revenueCatCustomerData.customerInfo = customerInfo self.revenueCatCustomerData.appUserID = Purchases.shared.appUserID } }I also make use of the paywall feature. However whenever I open my app, the paywall
Here in Europe, some banks are requesting a 2nd step verification to confirm a purchase (especially if it’s the first time the user order something with its Google Play account)This verification is made thanks to the customer’s bank app.The process is the following : when going through the process to purchase something (a subscription in my case), before the purchase is validated and before the Google Play bottom dialog is closed, the user’s phone receive a notification from its bank account to confirm the transaction,BUT sliding the top bar to see the notifications and tap on the one coming from the bank app IS CLOSING the Google Play bottom dialog.Then validating the transaction didn’t transform the purchase from a “pending” state to a “purchased” state.How do I have to handle this case??Thanks!
I would like to ask if its possible to use the StoreKit transaction observer while having the RevenueCat installed. I know that RevenueCat exposes this observer in the shape of of a delegate or a `AsyncStream` but due to the abstraction layer doesn’t return some of the data (transaction id) we require. Currently, we are planning on just using the StoreKit transaction observer to read the transaction id and send it to the backend and have the RevenueCat process the transaction and finish it. Will the transaction observer still work with StoreKit? What are the best practices? Any issues I should be aware of. Thanks
Hi team,Does purchasing a consumable (or any non-subscription) Product effectively trigger all purchases to be restored/synced?Example scenario:1. I subscribe to a paid tier in an app2. I sign out and log in as a separate user3. I purchase a consumable e.g. gems4. `CustomerInfo` contains the entitlements from step/user 1Just checking if this is expected behaviour i.e. purchasing a product causing all previous purchases being synced even if we have not called `syncPurchases` or `restorePurchases` explicitly.Thanks in advance!
ionic capacitor Hello, I am having a peculiar issue. First of, I do configure revenue cat right of the bat with user guid as appUserIdPurchases.configure({ apiKey: revenueCatApiKey, appUserID: userStore.tokenData.user_guid, observerMode: false, })then, before even finishing the purchase I do all the sync verification stuff to make sure the user guis is being used async purchasePackage() { const success = await this.syncRevenueCatUserId() if (!success) { this.status = revenueCatStates.FAILURE return } const response = await this.orderStore.purchaseOffering() this.status = response.state if (this.stateHalfSuccessful) await this.checkIfBackendSynced(response.paymentId) }, async syncRevenueCatUserId() { // Attach email as a subscriber attribute if (this.user.email) { await Purchases.setEmail({ email: this.user.email })
Hello,I would like to create a store system in Unity using RevenueCat. However, I couldn’t find exactly what I’m looking for in the documentation. My goal is to integrate RevenueCat into a game where I sell only consumable or non-consumable items, without including subscriptions or offers.Could you provide guidance or point me in the right direction to achieve this?Thank you!
I’m wanting to offer a non-renewing consumable unlock system for premium features in my app similar to Due and Working Copy. All features currently release and features for the next twelve months from the purchase date are unlocked. I read this thread which is similar to what I’m wanting to do: Because I’m wanting to do this as a consumable I know I will need to track the original purchase date of the consumable to ensure its not repurchased later. My main concern is related to restored purchases if the app is removed and downloaded again. I noticed in the support documentation this requires me to use a custom app user ID. My app does not have a login system but I noticed neither does Working Copy. I’m wondering if there’s a way to create this kind of custom app user ID, send it to RevenueCat and track it somehow without creating a login system?
We used to have an old format for handling user ids that we currently use to initialize RevenueCat with. What are the downstream implications if we need to change the user id format for all users? More specifically:Would there be a chance that the client gets out of sync from Google Play/App Store? What are the downstream implications in RevenueCat’s dashes/data reporting? Are there any other implications from changing the user id format? We are using Flutter so the code diff would be:# current codeawait Purchases.setup(_api, appUserId: oldUserIdString);# new codeawait Purchases.setup(_api, appUserId: newUserIdString);
Hi there,I am using Revenue Cat Paywalls to let my users purchase products. However if a consumable has been purchased before I am getting the error message:Ignoring purchase request for already subscribed packageThis is happening even though the purchase request is for a NON_RENEWING_PURCHASE which is not a subscription.My app is written in Flutter and I am currently testing on Android before moving on to iOS. I have rechecked my product set up on the Google Play Store and they are not set up as subscriptions. These products are not set up with entitlements in RC, they only have offerings attached.Can anyone help resolve this because at the moment my app doesn’t allow the repurchase of consumables which is obviously an issue.
Hello all. I was looking through using the Web beta SDK and trying to get it working. When I thought I was using the right API key I keep getting Invalid API key. Use your RevenueCat Billing API key. I have tried all of them that I see and am looking to find where that one is located.
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.