Get help with your SDK implementation.
Recently active
Is there a simple way to mock RevenueCat to return hardcoded responses for unit testing purposes? One option is to use the StoreKit Testing framework, but then RC still makes an outbound server call for every request which goes deeper than I'd like to for unit testing purposes.
After an apple subscription has expired, the iOS user can go to subscriptions and resubscribe there in the OS without going into the application directly. This usually takes a few seconds to complete, since immediately after resubscribe when going into the application the customerInfo() still does not show any active entitlement until after about ~30s.During those 30s the application will show a subscribe screen. What happens if the user tries to make another purchase in the app during those 30s (either same product or a different one)? Will they get double charged and how would the developer know?I am not sure if this is the same situation on Android yet.
Hello, I am getting the following crash regarding purchases I have upgraded to Google BillingClient 6.0.1 and 'com.revenuecat.purchases:purchases:7.0.0' Any advice
I use expo 49.0.18 and 7.3.0 react-native-purchases.I building my project with eas.I got an error when uploading my aab to the PlayStore, about the Play Billing version 4.0.0 that is not supported anymore. I don’t really understand how can I upgrade this dependency
Should I use the main app’s bundle identifier, or should I create a new app in revenue cat in the same project with the watchkitapp identifier?
Hello,I had to update the SDK to v4.0.0 after Google Play updated their library and now I get the following error from Cordova:> Task :app:checkDebugAarMetadata FAILED Any suggestions how to solve this?
apple, I can receive notification of renewal, but there is no notification of unsubscription
Sorry if this has been answered elsewhere but we couldn’t find any information - hopefully someone can point us in the right direction.We have 2 subscriptions set up in our Google Play Console, each with their own set of offers, and different pricing. Let’s call them SubscriptionA and SubscriptionB - the latter being a “higher tier” subscription (which gives access to more app features etc...).Our users can purchase either of these subscriptions directly, however if they purchase SubscriptionA, first, we allow them to upgrade to SubscriptionB at any point. We have so far done it using the purchasePackage method, like so:Purchases.purchasePackage(package, undefined, { oldProductIdentifier, prorationMode: PRORATION_MODE.IMMEDIATE_AND_CHARGE_PRORATED_PRICE,});This would result in the user being charged the relevant pro-rated price, and the existing SubscriptionA switching to SubscriptionB. This works correctly, as expected.However we are now facing an issue as we have an upcoming promo
Hey all, We’ve got a unique use case for a subscription mobile product (Android & iOS) that is made for households. We want one member to be able to purchase a membership that is then made available to everyone in their household. We cannot fully rely on iCloud Family Sharing because it doesn’t apply to Android devices.We could keep the member’s subscription status in our database and then check if anyone in the household has an active subscription, but I wondered if RevenueCat has a feature that would work for us built in?Anyone tried to solve this before?
Hey RC folks! 👋🏻I’m trying to determine after a purchase is made whether or not the purchase was a trial or not. I’m using `try await Purchases.shared.purchase(product: storeProduct)` to make the purchase. My initial solution was to iterate through the active entitlements i.e `results.customerInfo.entitlements.active` and try to see if there was a trial, but I was wondering if there’s a more elegant way to do so?Thanks in advance!
On my app, users can log in anonymously ( a skip button) or with a full account. Some users due to perhaps not using the app for a long time, have to resign in, but have a tendancy to “skip” when they come back. This triggers a transfer of their purchase to the new anonymous account.It would be great to have a button in the revenue cat panel to undo a transfer or an endpoint I could ping to do so or a way to prevent transfers to certain users.
Hello, My Paywall created a successful subscription with Sandbox account earlier in the day, but now on “Subscribe”, I am getting prompted for AppleID and password and after successful log in and bell sound that indicates purchase was successful, I am back on the login screen, without new subscription purchase on the Sandbox dashboard.
Hello, In the latest SDK 7.1.0, how can I obtain the days of a free trial? Currently I’m hardcoding it like this to “3 Days Free Trial”: private fun fillTrialOrNormal(it: Package) { if (isAdded) { val hasFreeTrial = it.product.subscriptionOptions?.freeTrial != null Utilities().checkTrialUsedUp(it.product.id, hasFreeTrial) { trialUsedUp -> val title: String val header: String if (trialUsedUp) { title = "${it.product.price.formatted} / Year" header = getString(R.string.upgrade_to_premium) binding.premiumTextId.text = header } else { title = "Start Your 3 Days Free Trial,\nThen ${it.product.price.formatted} / Year" } binding.trialPurchaseButtonId.text = title binding.trialPurchaseButtonId.isEnabled = true } }}Many Thanks
Hello, I have a offering where I put a custom description - Annual package with 7 day free trialAnd then I added DisplayName for product as well Monthly package itemNone of these fields were reflected in my api call, here is what I got instead: { "packageType": "MONTHLY", "product": { "title": "Pro Monthly", "identifier": "pro_monthly", "currencyCode": "GBP", "discounts": [], "productType": "NON_CONSUMABLE", "description": "Monthly subscription to access pro features", "priceString": "£14.99", "subscriptionPeriod": "P1M", "productCategory": "SUBSCRIPTION", "price": 14.99, "introPrice": null }, "identifier": "$rc_monthly", "offeringIdentifier": "default" },Why is all of my custom data missing from this product?To make it more confusing this product has a description:Monthly subscription to access pro featuresYet in the dashboard description isn’t even included as a option that you
I’m writing in Swift. Revenue Cat is up to date. When I chose one of my products I get Error Code 15. ERROR: 💰 Product purchase for 'XXXX.XXXXXX.XXXXXX' failed with error: Error Domain=RevenueCat.ErrorCode Code=15 "The operation is already in progress for this product."But of course I only pressed the button once. It displays a Notification to the users showing the error code. Moments later Apple’s Purchase view slides up and it all works correctly. I am still in sandbox and I’m wondering if this is just a sandbox issue. But I don’t want to send this error to production to confuse my users OR even worse, get my update rejected by Apple.Any help would be appreciated. My other products work fine. And I have tried deleting and remaking EVERYTHING surrounding this product/subscription. The error remaines. Also when RC is initiated, in the console, I get this error: “ERROR: Unabled to parse response to create subscription request”Again, I don’t know why this is happening. Everything see
This is the error I’m getting. Is there way to fix it somehow? [Purchases] - ERROR: 💰 Product purchase for 'mw_999_1y_2w0' failed with error: Error Domain=RevenueCat.ErrorCode Code=16 "There was an unknown backend error. Error creating subscriber alias. Alias limit reached. (7255)" UserInfo={NSLocalizedDescription=There was an unknown backend error. Error creating subscriber alias. Alias limit reached. (7255), NSUnderlyingError=0x283f72e20 {Error Domain=RevenueCat.BackendErrorCode Code=-1 "Error creating subscriber alias. Alias limit reached. (7255)" UserInfo={NSLocalizedDescription=Error creating subscriber alias. Alias limit reached. (7255), rc_backend_error_code=7255}}, rc_backend_error_code=7255, readable_error_code=UNKNOWN_BACKEND_ERROR, rc_response_status_code=400, source_function=convertUnsuccessfulResponseToError(), source_file=RevenueCat/HTTPClient.swift:410} thanks
The StoreProduct class in the RevenueCat package (purchases_flutter) contains information about purchasable items, such as subscription details, pricing, and currency. For a typical paywall implementation, one needs to derive various display strings from this class, such as:Monthly price conversion Combined period and monthly price (e.g., "$69.99/yr ($5.83/mo)") Subscription period in full text ("Annual" / "Monthly") Subscription period in short form ("yr" / "mo")...among others. Considering that such functionality is universally needed, I'm pondering the best way to implement these derived calculations.Option 1: Utility FunctionsWrite individual functions within a Utils class.Pro: Centralized location for all related functions.Con: Potential clutter with a Utils class filled with numerous functions.Option 2: Class ExtensionsCreate an extension on StoreProduct to include getters for each needed calculation.Pro: Elegant and intuitive usage (e.g., myProduct.monthlyPrice).Con: Overloads t
The documentation clearly states that to use only custom App User ID, we just need to configure the SDK with a custom app user id. Never calling logout. But my question is tied to multiple users using the same application on same device: do we need to call login() to be safe or anything special when the app authenticates a different user in? This seems to talk about this but not sure when it says login just means actually login()?Also is it ok to configure the SDK much further down in a user flow where only purchases are needed? Say when they navigate to settings->purchases. This way when starting the app (even if user is logged in) we will not configure. This way it will ensure that anonymous IDs will never be created. I am just not sure if this is ok to call configure each time a screen open and if there is any performance impact..
Apologies in advance, this topic is slightly confusing to me. I’ll explain my scenario and what I would expect. This is all in the Sand Box at the moment. Not sure if that makes a difference. When a User A signs up and subscribes, they get 20 credits a month on my app (reloaded at renewal) for X dollars/mo.If a User A signs out, and then User B signs up and subscribes, I want User A to keep their subscription active on the device, and User B as well. When I try “Keep with original App User ID”, I get an error with User B subscribing. I would expect that this new userID is separate from User A’s. But I get the error: “There is already another active subscriber using the same receipt.”I don’t want to transfer the subscription because I want User A and User B to have to purchase.
Hello,In our Firebase Crashlytics reports, we have noticed a recurring exception being faced by our users related to in-app billing.This issue has 37,775 crash events affecting 1,549 usersHere are the error details:Fatal Exception: java.lang.IllegalStateException: Too many bind requests(999+) for service Intent { act=com.android.vending.billing.InAppBillingService.BIND pkg=com.android.vending cmp=com.android.vending/com.google.android.finsky.billing.iab.InAppBillingService (has extras) } at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:2115) at android.app.ContextImpl.bindService(ContextImpl.java:2024) at android.content.ContextWrapper.bindService(ContextWrapper.java:870) at com.android.billingclient.api.BillingClientImpl.launchBillingFlow(com.android.billingclient:billing@@5.1.0:52) at com.revenuecat.purchases.google.BillingWrapper.startConnection(BillingWrapper.kt:122) at com.revenuecat.purchases.google.BillingWrapper.startConnectionOn
I’ve been looking all over the internet and reading through RevenueCat documentation and have continued to come up short with this. I would appreciate guidance from anyone who has done this before, as it’s driving me crazy.I’m building an iOS app using Ionic/Capacitor and leveraging the brand new @revenuecat/purchases-capacitor SDK to manage receipt validation and the entire in-app-purchase life-cycle for Auto-Renewable subscriptions. I’ve got everything working except for a way for the user to be taken to their App Subscriptions page (should they decide to cancel the subscription).When retrieving customer info (which I do, right after configuration ‘Purchases.configure’) I store the returned managementUrl (which ends up being “https://apps.apple.com/account/subscriptions” for me).My issue is:I know this link is correct; If I enter it into Safari on my phone, it guides me straight to the phone’s App Subscription management page When I navigate to this Url in my app using this.router.
I am trying RevenueCat for the first time. When I compile my project in VS Code since including the purchases_flutter package (latest version: purchases_flutter: ^6.0.0), I receive this warning:Note: C:\Users\User\AppData\Local\Pub\Cache\hosted\pub.dev\purchases_flutter-6.0.0\android\src\main\java\com\revenuecat\purchases_flutter\PurchasesFlutterPlugin.java uses or overrides a deprecated API.minSdkVersion is set to 30 (flutter.minSdkVersion=30)Flutter Doctor info:[√] Flutter (Channel stable, 3.13.7, on Microsoft Windows [Version 10.0.19045.3570], locale en-US)[√] Windows Version (Installed version of Windows is version 10 or higher)[√] Android toolchain - develop for Android devices (Android SDK version 34.0.0)[√] Chrome - develop for the web[!] Visual Studio - develop Windows apps (Visual Studio Community 2017 15.8.1) X Visual Studio 2019 or later is required.[√] Android Studio (version 2022.3)[√] VS Code (version 1.83.1) How do I fix this problem?Thank you.
Purchases.shared.presentCodeRedemptionSheet()We encountered an issue when trying to use this code for the promotion redemption.On the iPad, the screen appears normally and I can enter the redemption code. However, after I input the password and receive a transaction completion notification, my app doesn't actually subscribe successfully. Attempting to restore the subscription also doesn't retrieve any successful transactions. This issue persists across all versions we've tried.
I’m using paywall with Android 7.1.0-beta.2The template I create didn’t show, it uses the defatult view.The log error is:Template name is not recognized: 4Displaying default template due to validation errors.I use the template of “Template 4 - Persian Content”
I want to validate the data sent from RevenueCat to my server via webhooks. The data is JSON, so are there JSON schemas available to do that?
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.