Get help with your SDK implementation.
Recently active
I am trying to add Revenue Cat to my application and I am getting an unexpected behaviour. await Purchases.getOfferings(); never finishes. It hangs. try { console.log('This logs') const offerings = await Purchases.getOfferings(); console.log('This does not log');if (offerings.current !== null) { ….}} catch (error) { new Error(`Error getting offerings from Revenue Cat ${error}`);} I am unsure why this happens. This are the logs 2023-09-12 15:06:48.379841+0200 someApp[4687:37716] [configure] INFO: ℹ️ Purchases instance already set. Did you mean to configure two Purchases objects?2023-09-12 15:06:48.380048+0200 someApp[4687:37716] [configure] DEBUG: ℹ️ Configuring SDK using RevenueCat's UserDefaults suite.2023-09-12 15:06:48.380078+0200 someApp[4687:53865] Opened database at /Users/john/Library/Developer/CoreSimulator/Devices/3B433335-5FEA-4324-BCD4-4CBB677C5A4E/data/Containers/Data/Application/F8725A65-E28B-4E6B-BAE0-E0058C257495/Documents/foo.db2023-09-12 15:06:48.
A few hours ago, the data when getting the returned package list was missing title and description{"identifier":"$rc_weekly", "offeringIdentifier":"Default", "packageType":"WEEKLY", "product":{ "currencyCode":"USD", "description":"", "discounts":{ }, "identifier":"dsports.weekly", "introPrice":null, "price":6.99, "priceString":"$6.99", "productCategory":"SUBSCRIPTION", "productType":"NON_CONSUMABLE", "subscriptionPeriod":"P1W", "title":"" }}
Hi,When I set the availability of my Subscription to 1 country, can I assume that this:try await Purchases.shared.offerings().current?.availablePackageswill return an empty array/error with other storefronts?Cannot really test it via TestFlight, as it seems to discard the region completely.
I am working on a macOS desktop application using SwiftUI and am looking for a way to implement a trial version that expires after a specific period (e.g., 7 days). Additionally, I want to include the functionality to activate and deactivate a software license.Requirements:When the user first installs the app, they should be able to use it for a 7-day trial period. After the trial period, the user should be prompted to enter a software license key to continue using the app. The user should have the option to deactivate the license on their machine, so it can be used on a different machine. I understand that this will likely involve both client-side and server-side logic. However, I am particularly interested in how to achieve this in SwiftUI for the client-side aspect.I look for a basic example that implements this preferrable integration. The payment can be on a website doesent have to be in app purchase but would be positive of this is possible optional lateron.Im looking for advice
Hello, I’m trying to import the enum PERIOD_UNIT from the package in a Ionic App but it’s always undefined. import Purchases, { PACKAGE_TYPE, PERIOD_UNIT, Period, PurchasesOfferings } from 'cordova-plugin-purchases/www/plugin';Yet, no problem with PACKAGE_TYPE or some other. An idea why ?
HelloI need help debugging furtherI’m trying to get more error details for the fallowing error“[Error: There was a problem with the store.]”I found the fallowing article It explains how to find the issue by looking at the error typehowever I’m not getting any additional error details other than What I showed above.When I fallow the suggested error handling linkhttps://www.revenuecat.com/docs/errors#android-errorsand I try to handle the `onError` promise, It simply tells me that `onError` is not define in the promise4 issue types are suggested to look intoGoogle server is down I doubt this is the issue if I’m periodically trying this since yesterday Google Play Developer API Quota exceeded Don’t think its this since I just made this google play account Invalid Android package name in the RevenueCat dashboard I don’t know how to verify this othern than looking at the build.gradle Google Billing Client SERVICE_TIMEOUT error I can’t verify this since I’m not able to look at any erro
I want to highlight the current plan(product) on the pricing table by mapping these two:customerInfo.getActiveSubscriptions() offerings.getCurrent().getAvailablePackages() but what I found is that there is no any unikey from them. here is what i got:customerInfo.getActiveSubscriptions() → ["pro_plus:monthly"] offerings.getCurrent().getAvailablePackages() → { "productId":"pro", "basePlanId":"monthly"}is that mean i need to combind the key "productId”+”:”+"basePlanId" by myself?or any better way to do that? this is the sdk question using java in android.
i am using Revenuecat to let users subscribe to plans in both iOS and android. Few questionsShould we perform sales tax calculations? or is it already part of playstore, app store subscriptions?
I keep getting this error on first purchase. The purchase goes through but revenue cat gives error. When I click on purchase subsequently, revenue cat then returns fine. How do I resolve this? The following exception was thrown Unable to purchase offers: PlatformException(0, Unknown error., {message: Unknown error., userCancelled: false, readableErrorCode: UNKNOWN, code: 0, underlyingErrorMessage: Couldn’t communicate with a helper application., readable_error_code: UNKNOWN}, null):flutter: PlatformException(0, Unknown error., {message: Unknown error., userCancelled: false, readableErrorCode: UNKNOWN, code: 0, underlyingErrorMessage: Couldn’t communicate with a helper application., readable_error_code: UNKNOWN}, null)
I the app developer and i purchased the premium version of my app in production. ideally i should be getting something in entitlement active object: [Kotlin code] customerInfo.entitlements.active.isNotEmpty() The above code should return true, but only in case of my account its returning as false. and when trying to call the restore method:Purchases.sharedInstance.restorePurchases(object : ReceiveCustomerInfoCallback{ override fun onError(error: PurchasesError) { showToast(this@AccountManagerActivity,error.message) } override fun onReceived(customerInfo: CustomerInfo) { val value = customerInfo.activeSubscriptions.toString() showToast(this@AccountManagerActivity,value) } })} Its throwing some server error. Please help as currently its reported in my account and could happen with a premium user as well. Thanks in advance.
First: thanks for making this great product. I’m new to RevenueCat but so far loving it!Intro: RevenueCat offers the possibility to register a webhook endpoint, that is called when an event takes place. There is the possibility to manually set an optional authorization header, that will be used by RevenueCat to authenticate when calling the webhook endpoint. Question: is it possible to set this authorization header by calling an API endpoint (instead of doing it manually in the configuration section ‘Integrations’ > ‘Webhooks’)?
I am upgrading from purchases_flutter 3.x to 5.x. The class PurchasesInfo was changed to CustomerInfo. We upload PurchasersInfo Json to our server which parses the data. Have the contents or format of the data changed along with the change of the class? When inspecting the class CustomerInfo I find it has several JSON and String arrays so it’s difficult to tell what might have changed inside those arrays. Thank you,KeithB
Hi, I want to purchase a specific subscription offer from google play.This should work as described here: https://www.revenuecat.com/docs/subscription-offers#more-control-over-offer-selection and here: https://github.com/RevenueCat/cordova-plugin-purchases/releases/tag/4.0.0 I did my setup for Ionic(Vue) + Capacitor as described here (https://www.revenuecat.com/docs/ionic)I have the following dependencies installed:@awesome-cordova-plugins/core@^6.3.0 @awesome-cordova-plugins/purchases@^6.3.0 cordova-plugin-purchases@^4.2.3 cordova-annotated-plugin-android@^1.0.4 In my App I am usingimport { Purchases } from '@awesome-cordova-plugins/purchases';and geht the typings from here:node_modules/@awesome-cordova-plugins/purchases/index.d(those seem to be incomplete! subscriptionOptions are not defined in the types I get) BUT: In the results of “Purchases.getOfferings()” I get packages with products and those products have an array called “subscriptionOptions” with all my options listed. So the
Apologies for a basic question. This is my first RevenueCat project…I’m running an Expo managed project for React Native. react-native-purchases is installed and imported. I can call setDebugLogsEnabled successfully. But I cannot see a “setup” method on the Purchases object? If I type the code to run setup() I get the following error:What am I missing?Thx!
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
i have a flutter app that about daily horoscope and tarot cards and i’m trying to implement it but i’m kinda lost in the documents and tutorials i have purchase function page like this in code import 'package:flutter/services.dart';import 'package:purchases_flutter/models/offering_wrapper.dart';import 'package:purchases_flutter/purchases_flutter.dart';class PurchaseFlutterAPI {// initialize function to be called to initialize our purchase_Flutter plugin static Future init() async { await Purchases.setLogLevel(LogLevel.debug); }// gets a list of offerings from RevenueCat and stores it in a list for use in our app static Future<List<Offering>> fetchOffers() async { try { final offerings = await Purchases.getOfferings(); final activeOffering = offerings.current; return (activeOffering == null) ? [] : [activeOffering]; } on PlatformException catch (e) { return []; } }}and a subscripiton page in thisimport 'package:flutter/material.dart';impor
Could not validate subscriptions API permissions error. I think I need to publish my application in closed beta in the play store to solve this problem. Can I publish it in internal beta or does it have to be closed beta?
I see this error for our production app for iOS,we are using 4.25.6 version of RevenueCat.Error message is: “The device or user is not allowed to make purchase”Does this occur because of parental controls?Our app is +17
I’m trying to follow this documentation https://www.revenuecat.com/docs/apple-app-storeBut it’s not clear to me what I can do in the simulator. To my surprise when I run my code in the simulator, it is able to retrieve all the products from appstore connect. So is the simulator considered the sandbox? I have not install StoreKit Configuration File why does it work? What exactly does StoreKit Configuration File do for the simulator? Do I need a sandbox tester account for the simulator?
Hello fellow developers,If you're like me, you've embraced RevenueCat as a silver bullet for your in-app purchase needs. The proposition is compelling: let RevenueCat handle the complex, ever-changing landscape of app monetization so you can focus on what you do best — building an amazing app. In theory, this should make our lives easier. However, a pattern has emerged that challenges this notion: the API keeps changing, and it's forcing us to constantly revisit and update our integrations.Now, I'm all for improvements and new features. Progress is essential. But let's not lose sight of why we signed up for RevenueCat in the first place. The whole appeal of a wrapper like this is to abstract away complexity, not to introduce a new layer of maintenance.What's the Point of a Wrapper If It Unwraps Itself?The idea behind using a wrapper around Google Play Billing Library (or Apple's equivalent) is that we should be shielded from direct changes to these libraries. If Google or Apple changes
Hello, I use Flutter.I get that there is a CustomerInfo to get the purchase dates of the user.My question is that, How can i retrieved list of all automatic subscription renewal dates of the user ? Thank you.
Hello World! I’m a developer on a React Native mobile app that uses Revenue Cat (v. 5.14.0) to paywall our upgraded features behind a subscription. We have received a report of a user being unable to purchase our subscription from Apple. This user has submitted a video recording of the issue and the purchase process begins as expected and then ends un-expectedly. The app does not crash but premium was not purchased.Our onPurchase implementation looks like this: (sorry for formatting)```const onPurchase = useCallback(async (subscription: PurchasesPackage | null) => {try {setLoading(true);if (subscription) {const { customerInfo } = await Purchases.purchasePackage(subscription);if (typeof customerInfo.entitlements.active[REV_CAT_ENTITELEMENTS.PREMIUM_PRO] !== "undefined") {Sentry.Native.captureMessage("Premium Pro Purchased");setLoading(false);checkPremiumProStatus();if (isLoggedIn) {setPreProModalVisible(false);} else {setSignUpModalVisible(true);}}}} catch (e: any) {setLoading(false
Is there a method to refund the saved money on each subscription as a percentage? (without having to use metadata, which would entail recalculating everything, for instance, when changing the subscription price from the Play Console).As in the following image from the doc
We have an app in production using RevenueCat for iOS and Android using the Cordova SDK"cordova-plugin-purchases": "^3.12.0" One of our users is reporting that they’re not able to subscribe. Looking in Sentry, they’re the only one receiving this error. The error is below: Uncaught (in promise): Object: {"code":3,"message":"The device or user is not allowed to make the purchase.","readableErrorCode":"PurchaseNotAllowedError","readable_error_code":"PurchaseNotAllowedError","underlyingErrorMessage":"Billing is not available in this device. DebugMessage: Google Play In-app Billing API version is less than 3. ErrorCode: BILLING_UNAVAILABLE."} The problem is, they’re saying that they’re able to subscribe to other apps with that same device, and have tried another subscription since they’ve received this error from our app. Device: SM-G998U (S21 Ultra 5G)Android Version: 13Installed from: Play StoreSideloaded: No Shouldn’t the fact that they’re on Android 13 and installed from the Pla
Our team is currently integrating the option to cross-grade between monthly ↔ yearly subsctiptions.Most of our Android users are on old Google legacy subcription plans. A few months ago, we updated to RevenueCat Purchases v6 and also created a new “unified” subscription with 2 base plans, one for monthly and one for yearly.So the subcriptions we have look like this:Legacy Subscriptions:app_regular_subscription (for monthly) app_regular_subscription_yearlyNew Subscription (used since we upgraded to RevenueCat v6 a month ago)app_subscription_unified (with 2 base plans: app-subscription-monthly and app-subscription-yearly) While testing different scenarios in Sandbox mode, I found out that there are some unexpected behaviors when crossgrading from app_regular_subscription (legacy - monthly) to app_subscription_unified:subscription-yearlyThe PRODUCT_CHANGE webhook event doesn’t come when the user effectively changes the current plan, instead, the webhook event comes roughly one second afte
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.