Discussion and help from anything related to RevenueCat.
Recently active
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
Looking at option 3 in this post, it seems to be implying that if I create two RevenueCat projects for the same app, the webhook requests would be directed to the correct endpoint (production vs staging) all based on the project public API key used at the time of purchase (or other action). Is this correct? Since Google doesn’t really have a different server notification pubsub based on environment and apple is purely based on prod vs sandbox transactions, how does RevenueCat route the webhook requests to the correct endpoint?
I want to refund the prorated amount to customer on subscription cancellation but I am using stripe customer portal for cancellation handling and it only gives option to add credit balance to customer for prorated amount. How can I handle refunds when this scenario happens?Thanks a lot!
Firstly, I want to express my gratitude for developing and maintaining this solution. I have been facing some challenges while trying to configure my development environment project, and despite my best efforts, I haven't been able to make it work successfully. I have spent several days attempting various approaches, including multiple attempts at uploading the JSON key, recreating everything from scratch, and meticulously reviewing all the checklists I could find. My current situation is as follows: I am unable to read the entitlements in my app, and on the RevenueCat dashboard, I noticed that the credentials require attention. Each item is marked with a question mark, and the message indicates that the validation for any of the three items was unsuccessful. To give you some context, I have a Flutter/Android app with two environments, namely, "dev" and "prod," and the RevenueCat prod project is functioning flawlessly. I am solely using Google Play for this app, and I have only one Go
I am in process of migrating to RevenueCatif I do not import data from my old system what will happen with all my users as they open the new app for the first time. Will they have to resubscribe to in app purchases or will revenueCat see there is a existing in app subscription and allow them to use the app. in the case of question 1 would they have the option to restore there purchase or will it automatically pull in there purchasesIf I import data what data is required. If I need user Id would this be the id provided by apple or id generated from my server [Support edit: Updated the title and description to improve the search]
Hello!We’re working on an app that allows users to register an account and create a “Business” that can list its menu, offers, branches, and many other details. We have a registration phase where the user signs in using email OTP. We want to follow a business model that includes renewable subscriptions where each subscription is associated with a business such that if the user subscribes using business A, signs out, and registers a new business B, the new business B would be on the basic plan and the user must be able to subscribe again using the business B, but since payments are associated with the Apple ID, apple will see the newer business B as already subscribed and will throw an error saying that you’re already subscribed. We thought about having different subscription groups where each group would correspond to a different business, so in the above example business A would have a subscription from Group 1, and business B would have a subscription from Group 2. We would then stor
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,
Hello Guys,I have third party platform and every hour user data get from that platform using CRON JOB.That data valid and if data valid then grant-a-promotional-entitlement api and give lifetime access after some time or next time same data get then automatically revoke-promotional-entitlements call. all data valid and already verified. package used Axios(https://www.npmjs.com/package/axios) for grant-a-promotional-entitlementI will provide below sample codeimport axios from "axios";import config from "config";const grantPromotionalEntitlements = async (app_user_id: string, cronName: string) => { const PayloadObject = { url: revenueBaseAPI + `subscribers/${app_user_id}/entitlements/${"All_Features"}/promotional`, method: "POST", headers: { "content-type": "application/json", Authorization: `Bearer ${SECRATE_KEY}`, }, data: { duration: "lifetime", }, } as any; const res = await axios(PayloadObject) .then((res) => { return res.d
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.
Dear Community,we are currently using RC for our subscribermanagement (full integration) and Appsflyer as attribution provider. Both Services are integrated in our app but until now we only had instagram paid ads for our native ios-App. We now want to use ads for our native android app. The goal event for our ads is the start of a trial. We have a monthly, quarterly and yearly subscription.I'm facing the issue, that our CMO asks for AF-Events with 3 different names depending what kind of subscription trial was started. As far as I know the RC to AF Integration is insufficient for that, because each trial start irrespectibly of the subscriptiontype sends the "Trial started event" (default name: rc_trial_started_event) to AF.Therefore I need to write code, that sends these 3 Events to AF. In my current implementation I send the Events in the "onCompleted" Callback of the "purchasePackage" Method.Here is the simple Code:Purchases.getSharedInstance().purchasePackage(this, pack, new Purchas
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
I’m planning two create two RevenueCat projects, one for production and one for staging, (as recommended in the quickstart), but how do people differentiate the server notifications between servers? Some of our backend APIs depend on the user’s subscription status so we save this to the respective DB.One option would be to always tie sandbox and staging together. However, this breaks as soon as we want to use a Testflight app in production.Another idea I had was to prefix the user ID with the environment name. Then have the Apple/Android server notifications go to my server, read the user ID, then proxy the request to the correct RevenueCat project, which will finally call the correct environment webhook. However, this seems like a lot of moving parts.How do other people do this?
Hi there! Will RC acknowledge tokens sent via https://api.revenuecat.com/v1/receipts or do RC only acknowledge tokens sent directly from google pub/sub to RC? Regarding our ticket #28392, RC doesn't acknowledge Google purchases.» Thanks for reaching out! The SDK is the entity that would handle acknowledging subscriptions - if you're not implementing the SDK and only utilizing the REST API then yes, you'll need to acknowledge transactions yourself. but this contradicts the given topic: Could you please clarify that moment?
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
Hi, Looking at using RevenueCat but looking for any feedback on using with Xamarin Forms/Maui. I Dont see any real information on integration of this platform and was wondering if anyone has used in this configuration. Any tips on how to to implement or feedback would be appreciated. Alternately thinking about it doing in-app and utilizing the store portals directly but this would probbably become very combersome if there were any great membership requirements.
hi there, we just setup an integration to CleverTap but are getting very limited in using CleverTap to the best of it’s abilities due to what RevenueCat sends. See below WHAT WE WOULD LIKE TO DOIn CleverTap we would like to be able to target all users that have a specific subscription status say, all monthly subscribers or all subscribers who have cancelled WHAT RC SENDS TO CTRC sends each subscription event as “Events” and has the details of the subscription in the event properties of CleverTap REQUEST FOR CHANGEWe would love to be able to send user properties to CT and define the different user properties and send them based on the RC events. This way we can have user properties in CT, which would make it possible for us to target users
I am new to this service and I like it, I want to make a simple purchase where I give users 200 coins for buying a consumable product. John(Hey-Flutter) from YouTube video covered it but the code he used is critically depreciated. also, the code he used to make purchases in Andriod is not the same one he used for iOS. please can someone show me how to do it as this will help many other people who watched his video but are stuck.
Flutter version: 3.10.6RevenueCat version: 5.0.3Platfrom: Android PlatformException(23, There is an issue with your configuration. Check the underlying error for more details., {code: 23, message: There is an issue with your configuration. Check the underlying error for more details., readableErrorCode: ConfigurationError, readable_error_code: ConfigurationError, underlyingErrorMessage: There's a problem with your configuration. None of the products registered in the RevenueCat dashboard could be fetched from the Play Store. More information: https://rev.cat/why-are-offerings-empty}, null) on main file:Future<void> _configureSDK() async {// Enable debug logs before calling `configure`.await Purchases.setLogLevel(LogLevel.debug); PurchasesConfiguration configuration; configuration = PurchasesConfiguration(StoreConfig.instance.apiKey)..appUserID = null..observerMode = false; await Purchases.configure(configuration);}On Futurebuilder in premium page:Future<List<Package>>
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.