Get help with your SDK implementation.
Recently active
Hey my app keeps crashing on some clients. Flutter:purchases_flutter: 8.2.1purchases_ui_flutter: 8.2.1User android version: Android 14 (SDK 34)Crash log: Exception java.lang.RuntimeException: at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:4164) at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:4322) at android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:103) at android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:139) at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:96) at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2685) at android.os.Handler.dispatchMessage (Handler.java:106) at android.os.Looper.loopOnce (Looper.java:230) at android.os.Looper.loop (Looper.java:319) at android.app.ActivityThread.main (ActivityThread.java:8919) at java.lang.reflect.Method.invoke at com.android.internal.os.RuntimeInit
I have setup revenue cat in my KMP app with the paywall UI and running into an issue on the android app where only the default template for the paywall is being displayed due to the following error: “Displaying default template because paywall is missing for offering {my_offering_id}“ I tried even just making a basic template from scratch on the website wondering if maybe one of the templates I picked wasn’t supported on KMP. I have looked at the offering and it looks like there is a paywall configured for the offering so not quite sure what I'm doing wrong or if the sdk on compose multiplatform doesn't really support this? Any help would be appreciated. purchases-kmp = "1.4.0+13.16.2"purchases-common = "13.16.2"purchases-core = { module = "com.revenuecat.purchases:purchases-kmp-core", version.ref = "purchases-kmp" }purchases-datetime = { module = "com.revenuecat.purchases:purchases-kmp-datetime", version.ref = "purchases-kmp" }purchases-result = { module = "com.revenuecat.purchases:
I just finished my implementation of RevenueCat in my Flutter app. People can buy premium version to turn off ads. They pay once and then they will never see the ads.I just tried it with the test card. And the purchase shows up under Customers in the Play Console - but not in RevenueCat. I tried refunding in Play Console and clicked the revoke entitlement box. But seems like no mate what I do, I still have the entitlement in the app. I purchase like this: final customerInfo = await Purchases.purchaseStoreProduct(widget.storeProduct); final adsFreeEntitlement = customerInfo.entitlements.all['remove_ads']; if (adsFreeEntitlement != null && adsFreeEntitlement.isActive) { await _checkPremiumStatus(); }And I have a provider that checks the premium status like this:Future<void> checkPremiumStatus() async { try { final customerInfo = await Purchases.getCustomerInfo(); final entitlements = customerInfo.entitlements.active.values; _hasPremium
Want to launch the paywall as a fragment or a view, so i can customize the width and the hight of the paywall and view it properly on tablet Any help, Thanks!
Hi,Apple have rejected my use of an auto renewing subscription under:“Guideline 3.1.2 - Business - Payments - Subscriptions – Your app uses auto-renewing subscriptions, but it is not an appropriate use of the service. Specifically, the in-app purchase products only unlock features.”I am appealing this on the grounds that dozens of other similar apps in the same category also use auto renewing subscriptions. However, I don’t expect the appeal to succeed, and I will have to use a non renewing subscription.Non renewing subscriptions seem to have far less support in app store connect. They don’t even allow configuration of a time period – the developer has to handle this.The revenu-cat SDK also seem to have very little support for non renewing subscriptions. They aren’t supported in an entitlement, so again – the developer needs to handle this.Does revenue cat have example code to show how I can do this? I assume I need to somehow get non renewing subscriptions that the user has bought and
Hello,I am testing purchases in a sandbox environment and I don’t understand one thing (is this expected behavior ?) this is IOS app written in swift, using firebase for authenticationstep1: A new user opens the app and chooses to sign in via Apple account (provided by firebase auth)step2: They are presented with a paywall, they make the purchase and continue using the service.step3: They press “logout” which triggers firebase auth sign out andPurchases.shared.logOut { custInfo, err in if let err = err { print("Error while logging out revenuecat: \(err.localizedDescription)") } else { print("Log out successful from revcat and firebase") completion(nil) } }step4: The user logs in again via the same apple accountstep5: The user is presented with a paywall again, even though the purchase was already made for this account.I am setting the user’s ID after logging in to the fireba
Hi guys. I make test purchases in the simulator in my application. for this, although I change the storefront value in xcode and select different countries, the prices are not localised. for example, my membership, which is 20 dollars for the US, is 20 yen for Japan. that is, while the currencies are localised, the price always remains 20 units without changing at all. i wonder if this problem is caused by testing in the simulator or I missed a place in the revenucat configuration.
I have had our revenuecat integration working for months, haven’t really had any issues. Capacitor SDK. On one app, I have a few thousand subscribers and I’m not aware of any issues. On this app, it’s much smaller, but I have 70 or so subscribers.I have one user who renewed on 1/22/25. He sent me a screenshot on his iphone, it shows the active subscription. The app won’t let him in though. Takes him to the subscribe page. Restore says ‘no active subscriptions’.Had him uninstall/reinstall/restore and same thing.How can I get his access working? I see 2 transactions on 1/22 in the RC app. I just use RC anonymous IDs, no way to identify the user via subscription on my end.Thoughts?
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!
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.