Get help with your SDK implementation.
Recently active
I have a non-consumable in app purchase that I no longer offer in the app, so it would be great if I could remove it from the store listing, but I don’t want to remove anything for the users that have already purchased this iAP.Can I safe uncheck “Cleared for Sale” in AppStore Connect? Is it still included in the AppReceipts? If I have the legacy purchase in my entitlements, will the features still be unlocked for these users? Can they still restore purchases?
I’m using the iOS SDK 4.25.2, for some reason when I ran the code today the localizedPriceString returned from the package object has the dollar currency symbol after the price instead of before like it has always been, so my UI is showing “4.99 $” instead of “$4.99” Anybody else having this issue or know what might be causing it, maybe a phone setting? ThanksMark.
On Android, I’m getting the following error when trying to load the subscription products:“There's a problem with your configuration. None of the products registered in the RevenueCat dashboard could be fetched from the Play Store.”I have followed the instructions here.RevenueCat React Native version: 6.6.0 Android Studio targeting SDK 33 All the products are in an “active” status in the Google Play Console. Testing on a real Android device, with a local build. (release builds also seem to have the same issue) The product were imported from Android using the Revenue Cat importer (I did not change the product IDs) The Android package ID is correct.I’m migrating off of react-native-iap, and can confirm that it is able to load the product details without any issue.What else can I do to troubleshoot this error?
I am using RevenueCat for inline purchase and I would like to be able to show the data in the attached image. In particular, I need to show following subscription data:subscription name: Was able to get entitlementInfo.identifier but I need entitlementInfo.description. I could not get that.purchase value: Can't get that from entitlementInfo.subscription period: Can't get that from entitlement info.expirationDate: was able to get it from entitlementInfo.expirationDateIn the entitlementInfo there is a property called productIdentifier which can help me get some of the data I want. But I will need to map productIdentifier to the correct package. Does anyone knows how to do that?
Hey, I'm using RevenueCat’s SDK on my Flutter app. I want to enable purchases in my app for a physical service. The user can order service, but I want to charge only after an employee of my company accepts the order. If my employee rejects the order, then I don't want to charge the user. Otherwise, I can charge the user upon ordering, but then if my employee rejects it, I'll cancel the purchase and give the user his money back.Are any of the options available? I cannot find it in the docs. I want to charge the user using the App Store and Google Play.
RevenueCat is pitched as being a good solution for kid-focused apps on the App Store.In my experience, when submitting an app to the App Store Kids category, App Review seems to immediately reject the app ask the following questions about third party analytics and advertising.• Does your app include third-party analytics? If so, please provide details about what data is collected for this purpose.• Does your app include third-party advertising? If so, please provide a link to the ad network's publicly-documented practices and policies for kids apps.• Will the data be shared with any third parties? If so, for what purposes and where will this information be stored?• Is your app collecting any user or device data for purposes beyond third-party analytics or third-party advertising? If so, please provide a complete and clear explanation of all planned uses of this data. Assuming RevenueCat is the only third party framework in the app, what is the best way to describe how RevenueCat works?
I'm operating an app that provides annual subscription products developed using Flutter. I'm currently working on addressing the Google Play Billing Library 4 version deprecation in this app. As a result, I have upgraded the version of the `purchases_flutter` library from 4.10.2 to 5.6.0. I haven't made any changes to the subscription product settings on Google Play.The issue I'm encountering is that the information for the free trial period of the product (introductoryPrice) is being received as null.The `storeProduct` information received for each version is as follows:Version 4.10.2:```storeProduct => StoreProduct(identifier: us.beentogether.ad.premium, description: , title: Subscription for premium features. (Been Together (Ad)), price: 19000.0, priceString: ₩19,000, currencyCode: KRW, introductoryPrice: IntroductoryPrice(price: 0.0, priceString: ₩0, period: P1W, cycles: 1, periodUnit: PeriodUnit.day, periodNumberOfUnits: 7), discounts: null, subscriptionPeriod: P1Y)```Version 5
Why the localizedPriceString shows “$9.99” in development, but shows “US$9.99” in production? Is there any way to remove the currency symbols?
Hi,I'm looking to integrate IAPs some user generated content.Similar question was already answered in context of subscriptions, but how about expireable content? Can I have generic Google & Apple in app products, like product_19, product_39, and have it link to a few different $39 products in app that users can buy, and the access to it lasts for 30 days. Would RevenueCat be able to handle that and distinguish between products? Thank you,Marin
How to get receipt \ signature for transaction on Android using Unity3d SDK?
I use com.android.billingclient:billing:4.0.0 on my application and purchases_flutter 3.10.0 for the revenuecat subscriptions.From May 2022, users can't see the free trial or intro price options. Then, I messaged the GooglePlay and they replied as below:Hello Google Play Developer, Due to a bug in our system, since May 3, 2022, you may be experiencing incorrect or missing subscription information in the results from the Google Play Billing library’s deprecated querySkuDetailsAsync() function. During this time the Google Play Billing library may not have returned information to your apps about free trial and intro price offers for one or more of your subscriptions, even if the user was eligible for these offers. In these cases, users only saw the subscription base plan in the purchase cart, without any free trials or intro prices.Action RequiredWe recommend that you review all of your subscriptions with free trial and intro price offers in the Play Console, and ensure that the correct o
The documentation is clear about what not to use for the Custom App User ID. What is recommended to create a Custom App User ID? My app is written in Flutter/Dart.Thanks,
Hi I get this error after enable 3day trial subscription in iOS appPlatformException(2, There was a problem with the App Store., {message: There was a problem with the App Store., code: 2, readableErrorCode: STORE_PROBLEM, readable_error_code: STORE_PROBLEM, userCancelled: false, underlyingErrorMessage: An unknown error occurred} It’s the first time that i enable trials on iOS, I’m not sure if I’m doing something wrong. I’ve just set up 3 day trial in Introductory Offers. Have I to do something else?
Can I be confident that the transaction ID sent to the webhook will always be the same for the lifetime of a subscription, or do I need to use the original_transaction_id value?Since I’ll be creating a record in my DB for each new subscription, I want to make sure that I’m not creating duplicate records if a new transaction ID is created for existing subscriptions For example when it renews, or if the same Android user logs in as another user in my app. In the second case, I’d like to be able to reassociate that subscription to the current user.I’m migrating to RevenueCat from an existing system that integrated directly with Apple/Google stores. Both Apple and Google require you to keep a reference to the original (or previous) transaction/token since these will change over the lifetime of the subscription. I’m hoping that RevenueCat takes care of that headache so I can just use a single ID for the lifetime of a subscription.
I am currently using Flutter with real android device. I recently switched to using “Google Subscription Model v2”. I followed RevenueCat instructions over here When I upload my Flutter app to Google play store internal testing, then download the app from play store to my real Android device, I am able to make subscriptions without any problem. On the hand, if I run my Flutter app through the command line using “flutter run”, then when I try to make subscription, I get this error: “The item you requested is not available for purchase.”. Here is a screen shot. I am able to see the subscriptions with no problem on my screen. I only can’t make purchase.I don’t want to deploy my app to internal testing in play store to test my code as this is so slow. Is there a better solution. Thanks
CollectionReference<Map<String, dynamic>> usersRef =FirebaseFirestore.instance.collection("data");Future<void> purchaseGoldPackage(Package package) async { try { await Purchases.purchasePackage(package).then((customerInfo) async { await Purchases.syncPurchases(); usersRef .doc( userID, ) .update({ 'status': 'gold', }); }); } catch (e) {}} The code above is how i set a listener for a new customer subscription, then calling firestore to update a fieldValue “status” from ‘free’ to ‘gold’, which is how multiple devices get notified a purchase was made and the subscription is active.This works 5 out of 10 times, which means i maybe half way there, The issue is firestore update method dont get called half the time, leaving user with multiple devices hanging. which means the listener i set up for firestore which updates the UI of user devices wont get triggered, forcing users to restart app to see subscription c
Hi: I’m trying to use the example exposed on the documentation:const sdk = require('api')('@revenuecat/v4.0#1yz2c0m2sl5v5md8q');sdk.auth('Bearer REVENUECAT_API_KEY');sdk.grantAPromotionalEntitlement({duration: 'weekly'}, { app_user_id: 'app_user_id', entitlement_identifier: 'entitlement_identifier'}).then(res => console.log(res)) .catch(err => console.error(err));UnhandledPromiseRejectionWarning: Error: Sorry, `grantAPromotionalEntitlement` does not appear to be a valid operation on this API.at Proxy.<anonymous> (/path/to/index.js)at processTicksAndRejections (internal/process/task_queues.js:95:5) But I can’t do it. Please, someone that could give me a way to keep going.
In Unity SDK there is GetProducts method with this semantics:public void GetProducts(string[] products, GetProductsFunc callback, string type = "subs") How we should know this magic strings for “type”? I want to display Price in game user interface. This price can be obtained through StoreProduct. But I can’t get ANY StoreProduct, because GetProducts alwats return empty array. I wanted to change type from “subs” to anything else, but there is no another constants mentioned in docs \ code. Please help me to fetch all my products and check prices for them. Platform: Unity3d, Android & iOS
We published MAUI bindings for Android and iOS:https://github.com/thisisthekap/Tonestro.Maui.RevenueCat.iOS https://github.com/thisisthekap/Tonestro.Maui.RevenueCat.AndroidI am aware, that the version bound is already a bit outdated. We are going to upgrade to the most recent SDKs in the near future. These MAUI bindings are created based on the Xamarin bindings we did before:https://github.com/thisisthekap/Xamarin.RevenueCat.iOS https://github.com/thisisthekap/Xamarin.RevenueCat.Android
How should purchasing process looks like in Unity3d? In official docs Unity (revenuecat.com) we see only single function for this purpose:public void BeginPurchase(Purchases.Package package) I think it’s definetly lack of documentation. How should we obtain Purchases.Package object? Create it from new on our own? Get it somehow and store it?
"I am working on a large, legacy Android project. I need to integrate RevenueCat into the application, but due to my Kotlin version being 1.4.21, I cannot integrate the latest versions. I tried to upgrade the Kotlin version, but then other libraries started to throw errors. The Hilt library, in particular, caused many issues. I couldn't find a way out. I'm considering downgrading the RevenueCat version, but I couldn't find which version is compatible with my Kotlin version. Could you please help me?"
Recently we’ve started integrate the Offering Metadata feature. As this is a beta feature, I believe there is a minor bug in the SDK. Reproduction Steps:Add an integer property into metadata of the offering using RevenueCat dashboard (“myProperty” : 123) Try to read the the integer value using in Swift code: offering?.getMetadataValue(for: "myProperty", default: -1) The value defaults to -1 rather than 123 When I checked the SDK code, I see that the metadata dictionary returned as [“myProperty: “123”]. Then getMetadataValue<T>(for key: String, default: T) -> T function is failing to cast the value to Int even though generic value T is set to Int in above call. It is not a major issue as I can achieve casting in my code but wanted to report it here. I am using:Swift 5Xcode 14.3.1RevenueCat 4.25.0
Hello, I want to be able to process subscriptions that come from App store promos.I found out that this method ‘addShouldPurchasePromoProductListener’ is should be able to process it, but I can’t find an example or doc of how to properly implement it. In my app users have to sign up first before using an app, so what if they click on that promo in the appstore before signing up, what should be the app behavior and method implementation in such case?
Here's an overview of my system:My app requests a new user ID from my backend. It uses the obtained ID by passing it to the Purchases.logIn() method.When I get the original user ID from the customer info given from the login callback, it sets the original userid (UID) into its app data. Turns out when I wipe out the app data and repeat the process, the getOriginalid() method returns the same newly regenerated ID used during relogin instead of returning a different id; not considering that the same google account is logged in.I also tried changing the transfer behavior in the Dashboard, but to no avail. I want my app to obtain the original id, even when app data is reset Is there any real way that I can ensure the same user is logging in, even when App data is compromised?
Hi, I have a problem with case: One user with unique App User IDs logged to app on device A (Google Play Account A@gmail.com) and bought subscription. Then user is logging to app on device (B) (Google Play Account B@gmail.com) and see subscription in app → It’s working as expect. But app has option to upgrade or downgrade subscription and if user is logged on device (B) it is possible upgrade/downgrade plan and then two Google Play account have subscription. This is code to get current subscription ID and available subscription list for upgrade/downgrade Purchases.sharedInstance.getCustomerInfoWith({ error -> onError.invoke(error) }, { customerInfo -> val entitlement = customerInfo.entitlements[REVENUECAT_SUBSCRIPTION_ENTITLEMENTS] Purchases.sharedInstance.getOfferingsWith({ error -> onError.invoke(error) }, { offerings -> onSuccess.invoke(offerings.current?.availablePackages?.filter { it.pr
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.