Get help with your SDK implementation.
Recently active
Hello!We are integrating subscriptions in FlutterSir we have two subscriptions(PRO and ELITE) in a single group(AppStore). We have user login system. We give app user id. So the issue is that it is working well but we need the following: 1. User want to upgrade from PRO to ELITE within the app. mean changing subscription plans within the app. Please guide me how to do it. Please share any related documentation where i can follow the steps to do upgrade/downgrade subscription from the app, yes not from setting. is there any code to do this?
I am unable to see entitlements/purchases on android when I’m logged in with the same user id that I used for iOS (I purchased through iOS).Here is how I setup the app user id: import React from "react";import { useSelector } from "react-redux";import Purchases from 'react-native-purchases' const SetupRevenuecat = () => {const stateAuthSession = useSelector(state => state.auth.session)React.useEffect(() => {Purchases.setLogLevel(Purchases.LOG_LEVEL.DEBUG)console.log(stateAuthSession?.user.id)if (Platform.OS === 'ios') {console.log('ios user id: ', stateAuthSession?.user.id)Purchases.configure({apiKey: 'appl_xxx', appUserID: stateAuthSession?.user.id })} else if (Platform.OS === 'android') {console.log('android user id: ', stateAuthSession?.user.id)Purchases.configure({apiKey: 'goog_xxx', appUserID: stateAuthSession?.user.id })}Purchases.setAttributes({ "email": stateAuthSession?.user.email })}, [])}export default SetupRevenuecatLoading both android and ios shows: BUNDLE ./in
I've updated my schema on Xcode to set my location to a different country. I tried running it on both a physical device and a simulator. In both cases, all the apps on the device respond to the simulated location, but Revenue Cat continues to show the paywall in my actual local (prices and currency). I'm assuming that the RC SDK is not relying on geolocation, so it needs to pick up the change. Do I need to change my IP address? Is there an easy way to test paywalls in simulated locations?
Hi all,I’m setting up subscriptions with RevenueCat and I noticed that `[RCPurchases.sharedPurchases customerInfoWithCompletionHandler:^(RCCustomerInfo * _Nullable info, NSError * _Nullable error) {` will have the completion handler called a background thread. Is this intended? Are all RevenueCat callbacks on background threads? Do I need to always run `dispatch_async(dispatch_get_main_queue()` after a RevenueCat API?Thanks!
Hi, the app is using RC to make a purchase, I already update the bundle Id and the keys into the RC dashboard, However when I tried to make a purchase I’m seeing in the logs that is in sandbox env.And when the Apple pay dialog is presented, it is displaying information about sandbox user. My question: Should I modify something in the RC dashboard to user a production environment ?2023-07-26 09:02:41.399867-0500 Sharpen[2703:1095151] [receipt] WARN: 🍎‼️ App running on sandbox without a receipt file. Unable to determine into eligibility unless you've purchased before and there is a receipt available.request for these products because they were already cached: ["2023.07.premium.recurring.offer"]2023-07-26 09:02:41.399717-0500 Sharpen[2703:1095151] [network] DEBUG: ℹ️ GetIntroEligibilityOperation: Started2023-07-26 09:02:41.399867-0500 Sharpen[2703:1095151] [receipt] WARN: 🍎‼️ App running on sandbox without a receipt file. Unable to determine into eligibility unless you've purchased befo
Hi,I am facing an issue getting StoreProduct on Android using Flutter. On iOS, everything is fine, I can add any product on AppStoreConnect, then get it in RevenueCat automatically and then display and purchase products in my app.But on Android, I can’t get any product.The app is in production but also in Closed Testing. My product is “Active” in Google Play Console.The only thing I can think for now is Google Play Console giving me a problem with the payment profil. Do you think it can be from there ? I’m not the owner of Google account so I can’t check.I think I’ve tried every solution on internet..
When presenting paywalls using .presentPaywallIfNeeded in Flutter, RevenueCatUI does not include a close button. I've tried it with 5 - Bengal template. Can you please update the Flutter package so that the close button is displayed automatically on the paywall?
I have another example of a customer history where I am not sure if it should currently have or not have entitlements. For reference customer id is zFJvdHtkE2evnc9fnhtGVNLcDt52.The webhook events are in this order: What seems to be missing is another EXPIRATION event. Feb 21 should be when the grace period expires and the subscription should end. But at this time after one renewal and after pausing the subscription, we have yet to receive any information of the latest status. RC console says that Subscription expired on 2024-02-18. Is there any reason no webhook event came in in February?
Hi, We are currently managing app specific entitlements by relying on webhooks.Does the SUBSCRIPTION_PAUSED event require any intervention to add/remove entitlements? Or this event is just informative and is correctly preceded and followed by RENEWAL and EXPIRATION events (which do need actions)?This sections of the documentations seems short and I was not able to get a clear picture.Thank you
I am using revenuecat paywall for react native. I created paywalls for english and arabic. I was able to change the contents of paywall into arabic but i was not able to change the restore, terms and policy buttons to arabic.I am using Sphynx content template, but also tried it Bengal content template. Please guide me if I am missing something.
I tried to use this url https://github.com/RevenueCat/purchases-ios.git and didn't worked for me.
Hello RevenueCat Community,I've encountered a scenario in my app where RevenueCat seems to be assigning an anonymous ID to the user even when I have previously configured the SDK with a specific appUserID. This behavior appears to manifest when there's no internet connection available.From my understanding, once a user is assigned a specific appUserID, RevenueCat should use this ID for any future interactions, including syncing purchase information or entitlements. However, in offline scenarios, it seems to revert to using an anonymous ID, which I find perplexing.Could someone clarify under what conditions RevenueCat opts to use an anonymous ID instead of the appUserID provided during SDK configuration? Additionally, are there best practices or considerations we should be aware of to ensure consistent user identification, especially in offline scenarios or during network interruptions?I can handle network issue, and ask the user to turn on the network, but it’s different for the issue
Hi there, We are looking into creating the Apple Privacy Report for our react native app. I have seen that the ios SDK now includes a Privacy Manifest and that NSPrivacyTracking is false. This seems correct for the default behaviour of the SDK. Am I correct in thinking that it is your intention to leave it to the developer to add to their own Privacy Manifest if they choose to collect device identifiers using the RevenueCat SDK? Many thanks,Lydia
We’ve been using the open source SwiftyStoreKit for a long time for our non-consumable in-app purchases, but the project hasn’t been updated in many years: https://github.com/bizz84/SwiftyStoreKit. They have zero support for StoreKit 2 with pretty much none planned.We recently started using RevenueCat for the subscriptions side of purchases (we just launched our first subscription). Can it also be used for our non-consumables? We’d just completely switch to it within our app if that’s the case to clean up our code. Android as well?
Hello!When looking at the iOS SDK, I see various methods that can be used on a Product that are missing from the Flutter SDK:`localizedPricePerMonth` `pricePerMonth` `priceFormatter`These are extremely useful to show the user how much their annual subscription will be per month and how much they are saving compared to the monthly subscription.Are there plans to bring these on Flutter? Or is there a workaround?
Build input file cannot be found: '/Users/corentinsayman/Downloads/LokumEzmesi/Library/PackageCache/com.revenuecat.purchases-unity@6.7.0/Plugins/iOS/PurchasesDummy.swift'. Did you forget to declare this file as an output of a script phase or custom build rule which produces it? Please help me.
We are now getting reports from some users complaining that they paid, but nonetheless don’t have premium access. This seems to be happening on IOS in particular.The are getting the following error-message: Apple Subscription Key is invalid or not present. In order to provide subscription offers, you must\nfirst generate a subscription key.\nPlease see https://docs.revenuecat.com/docs/ios-subscription-offers for more info. Apple Subscription Key is invalid or not present. I find this to be confusing because:1: We have added a subscription key (so it should be present)2: It doesn’t seem to happen to most users If something is wrong with the Apple Subscription Key, shouldn’t this affect all users trying to make an IOS purchase through that particular app?3: It seems to have popped up on its own accordI’m not aware of this problem having been here for a long time (even though we started using RevenueCat in 2022). It also doesn’t seem like this issue started popped up right after we made a
how to buy a product?I’m following this guide but I cannot buy my productshttps://www.revenuecat.com/docs/getting-started/displaying-productsI created an offering, which has two packages, the voice has the one time purchase products from apple and google.how do I find the voice product to buy? with the package identifier?```try {const productToBuy = //how to find the product?;if (!productToBuy) {console.error("No product identifier found");return;}```or should I buy the package? const { customerInfo } = await Purchases.purchasePackage(offering.all["Voice"].availablePackages);I thought revenuecat was supposed to be simple
So I recently started seeing more and more users starting to get issues fetching products and this is the error they get after calling Purchases.shared.getOfferings:There is an issue with your configuration. Check the underlying error for more details. There's a problem with your configuration. None of the products registered in the RevenueCat dashboard could be fetched from App Store Connect (or the StoreKit Configuration file if one is being used). More information: https://rev.cat/why-are-offerings-empty After investigating it, from what I've seen, it only is happening for users on iOS 17.3.1. For all other users, it seems to be okay and has been working successfully.I’m wondering if anyone knows what could be causing this / also happening to them?
when i try to purchase its throwing error .this is the log,but its printing product details. D/EGL_emulation(11680): app_time_stats: avg=273.33ms min=5.91ms max=6435.79ms count=25D/[Purchases] - DEBUG(11680): ℹ️ Vending Offerings from cacheD/[Purchases] - DEBUG(11680): ℹ️ Checking if cache is stale AppInBackground falseI/flutter (11680): 152.17968I/flutter (11680): Product{identifier: test_01, description: this is test product description, title: test product (lauramonk.app.hotdealsgemet.prod (unreviewed)), price: 152.17968, priceString: ₹152.18, currencyCode: INR, introductoryPrice: null}D/[Purchases] - DEBUG(11680): ℹ️ Vending Offerings from cacheD/[Purchases] - DEBUG(11680): 💰 Purchase started - product: com.revenuecat.purchases.models.ProductDetails@e5f3361e - offering: test_01D/[Purchases] - DEBUG(11680): 💰 Purchasing product: test_01D/[Purchases] - DEBUG(11680): ℹ️ Checking if cache is stale AppInBackground falseD/EGL_emulation(11680): app_time_stats: avg=534.12ms min=14.29ms
My app and pawwall is in landscape. I want the payflow, when I click ‘subscribe’ in my paywall to come in landscape too. However, it is coming in portrait. How do I change? Here’s my code #ifndef PAID_APP-(IBAction)premiumButtonPressed:(id)sender{ NSLog(@"premiumButtonPressed"); // Start Progress [progressIndicator startAnimating]; #ifndef PAID_APP [FIRAnalytics logEventWithName:@"ShopViewController" parameters:@{@"ShopPremiumButtonPressed": @"Monthly"}];#endif // TEST HARNESS //[self processPremiumSubscriber]; //return; // TEST END NSLog(@"RevenueCat - Purchase monthly product called"); [progressIndicator startAnimating]; [[RCPurchases sharedPurchases] purchaseProduct:rcStoreMonthlyProduct withCompletion:^(RCStoreTransaction *transaction, RCCustomerInfo *customerInfo, NSError *error, BOOL cancelled) { //if (customerInfo.entitlements.all[@"your_entitlement_id"].isActive) { // U
Hi there, I just wanted to check if I’m missing something obvious here… I am adding support for Google prepaid subscriptions to my app. I am trying to find a way of knowing if the entitlement the user has is a prepaid (non-renewing) subscription. The docs suggest that we should be using Entitlements and not ActiveSubscriptions of CustomerInfo. However the only clue I can find is that checking the active subscription product identifier will contain whether the active entitlement is prepaid or not, it doesn’t seem to be included in Entitlements anywhere. I would have expected that willRenew would be false, as the subscription will indeed not renew, but it seems to return true. Am I missing something or is this a mistake? Many thanks!
Hello RevenueCat, I am using React Native version 0.73.1. I have installed react-native-purchases: 7.21.0. It works fine on the emulator, but when I deploy it to TestFlight, the app crashes immediately upon opening.
I'm currently using RevenueCat for my native Android app. I'd like to add an iOS version and I'm considering Kotlin/Compose Multiplatform Mobile in order to reuse much of my Kotlin code. It's still early days for KMM, but I was wondering if there were plans to add a KMM SDK. And if not, how would you recommend I manage subscriptions in this case? Thanks!Sam
Hi,Our app is a subscription streaming with Monthly and Yearly package.The current flow we want to use with RC are:1) . Subscription Purchase but the user not login yet to the app. So still as a guestGuest > Purchase > Successful Is it correct if we use this const { customerInfo, created } = await Purchases.logIn(guest_id); ?Then we will force them to login before can use the full features of the app.Login > successfulBecause its already logged in, then we can get the actual subscriber_id for that user,Is it correct if we use this const { customerInfo, created } = await Purchases.logIn(subscriber_id); ?So in RC, the app_user_id will be updated with the latest one which is subscriber_id, whilst the original_app_user_id is still the original Anonyomous ID.Then later, this user can login to any device / platform and still can get the same status of the subscription.Is it my understanding on how to implement is correct?Thank you
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.