Get help with your SDK implementation.
Recently active
I have the following use case: A user can choose between using the app without an account or with an account, after which the data is synced to the cloud. In both cases, the user can purchase the Pro version. I display different paywalls depending on whether the user is logged in or not. This is managed through custom attributes and paywall targeting:Without an account → Show paywall without the sync option. With an account → Show paywall with the sync option.Problem: When a user starts without an account but then creates one, the app still displays the paywall meant for users without accounts even though the custom attribute is updated. The updated paywall is only shown after a restart. Is there a way to reinitialize the paywall or clear the cache without restarting the app?I don’t want to hard code the offering for the paywall in the code because I want to stay flexible and run experiments.
Hi there, I have my Flutter App on Production with a subscription of 1 Month.I bught the subscription on a real device on production, and after 5 minutes I cancelled it. Looks like in RevenueCat it is still showing that thee Subscription is still active, why?Also, on my Flutter code I’ve implemented to show a different UI if isPremium, but doesn’t have recurring true. Not sure why is not working, and RevenueCat Dashboard doesn’t get updated…
Hi All,hoping for some help as I’m stuck. We’ve built an app in Flutter using Revenue Cat paywall. Products and subscriptions enables in App store and listed as ready for review.when I submit I get this error. I am only using a revenue cat paywall. App is only available in IOS App Store and Playstore no other option to purchase. no idea how to resolve or where to start.Guideline 3.1.1 - Business - Payments - In-App Purchase We noticed that your app includes or accesses paid digital content, services, or functionality by means other than in-app purchase, which is not appropriate for the App Store. Specifically: - The subscription can be purchased in the app using payment mechanisms other than in-app purchase. Next Steps The paid digital content, services, or subscriptions included in or accessed by your app must be available for purchase in the app using only in-app purchase. Apps that offer paid digital services and content across multiple platforms may allow customers to access the c
I am trying to publish my react native app on the Play Store but have been rejected multiple times with error Error 23: There is an issue with your configuration when the testers try to open my paywall.I have published in Closed Testing (where it works with no issue, as well as in Dev) and promoted the build to Prod for review, where it gets rejected. I’ve triple-checked that my configuration works and that the app and subscriptions are available in every country.Can anyone advise on how to solve this? I’m pulling my hair out trying to get this approved - even a temporary workaround would be helpful just to get the thing published in some form or another.
I’m planning on doing a soft launch of our web app that includes subscriptions with the Revenuecat web SDK. Are subscriptions from the web SDK treated the same way as iOS and android platforms? Meaning we can see them segmented in the charts?During the soft launch I just want to monitor any purchases coming in w/ web.
Say I have subscription plans A and B (same level).From entitlement.productIdentifier I detect that a user is, say, subscribed to A. With this information, I keep option B available for a crossgrade, and A disabled and marked as active.When they opt to subscribe to B, A is still active (because it will remain so until the renewal date). The purchase succeeds but do I have the information to communicate the current scenario? I would like to disable B as well, because it is already purchased, and mark it somehow as active starting on certain date. Apparently I don’t have the information to figure out this scenario in PurchaserInfo, do I?
I’m using `customerInfoStream` for the first time, and I’m a bit confused - in sandbox testing, I’m seeing updates come in reliably each time a subscription renews, and it correctly includes the `activeSubscriptions` along with expiration dates. If I wait sufficiently, however, I never get an update with an `activeSubscriptions` property that is empty - I simply stop getting updates. I left my app running overnight in the simulator, and in the morning, I was not presented with the paywall as expected. Looking at my logs, the entry that I received includes the active subscription, from which my app (correctly) surmised that the entitlement was still active. The next update that I would have expected, with no active subscription, was never delivered. The time of this last event matches what I see in the console (where I do see ‘Opted out for renewal’) Is this expected? I can certainly use the provided `expiresDate` to create an event at that time, but it doesn’t seem to me like this
Hello, I invite you to create your two applications (IOS and android) on RevenueCat. To create my two applications (IOS and android) on RevenueCat via this one I imported the subscriptions of my application directly from the stores (AppStore and PlayStore).When I call the Purchases.getOfferings() method in my application having made the configurations beforehand I get this error:D/[Purchases] - DEBUG( 8517) : ℹ️ Product request completed for codingindustry.qualityfood.monthlyD/[Purchases] - DEBUG( 8517) : 💰 Retrieved productDetailsList : W/[Purchases] - WARN( 8517) : 🤖‼️ Unable to find ProductDetails for codingindustry.qualityfood.monthly W/[Purchases] - WARN( 8517) : There is a problem with your configuration in Play Store Developer Console. More information here: https://errors.rev.cat/configuring-productsD/[Achats] - DEBUG( 8517) : ℹ️ Build a bid response with 0 productsE/[Purchases] - ERROR( 8517) : 😿‼️ Offer retrieval error - PurchasesError(code=ConfigurationError, underlyingEr
I using a ‘Subscription Renewal Rate’ of ‘Any Renewal Every 2 Seconds’ in Xcode, and what I’m seeing from RevenueCat is very unreliable, both in the behavior of the SDK, and on the web console. Is this renewal rate simply too fast to reliably use? (I’m completely open to the possibility of Apple’s sandbox servers not being efficient enough to support this. In fact, it’s probably true). Here’s an example of what I see (the final ‘Opted-out of renewal’ is expected, I think)
Hello,Despite not having pushed new builds live during this month, yesterday we stared seeing a spike on the attached ANR through Crashlytics. Wondering if anything server-side changed that may have caused this or if the source of the issue its known.Thanks! main (native):tid=1 systid=13134 #00 pc 0x911c0 libc.so (syscall + 32) (BuildId: 02a91a85343debb2911714273ff2b670)#01 pc 0x95f20 libc.so (__futex_wait_ex + 148) (BuildId: 02a91a85343debb2911714273ff2b670)#02 pc 0xfe5c8 libc.so (NonPI::MutexLockWithTimeout + 660) (BuildId: 02a91a85343debb2911714273ff2b670)#03 pc 0x458648 libunity.so (BuildId: 3136b3ea4de05c5c5e8e5c62663529953fcd50fc)#04 pc 0x4584f8 libunity.so (UnitySendMessage + 116) (BuildId: 3136b3ea4de05c5c5e8e5c62663529953fcd50fc)#05 pc 0x4074d4 libunity.so (BuildId: 3136b3ea4de05c5c5e8e5c62663529953fcd50fc) at com.unity3d.player.UnityPlayer.nativeUnitySendMessage(Native method) at com.unity3d.player.UnityPlayer.UnitySendMessage(unavailable:39) at com
I’m working on an app with an auto-renewing subscription. When using Sandbox testing, I can subscribe, and it updates just fine. However, if I cancel the subscription, when I go to get the updated `purchaserInfo`, the `willRenew` property is `true`. Even if I reset the cache, it still won’t be updated.How can I have it properly update?
I’ve integrated RevenueCat’s Capacitor package into our Ionic React Capactior App, and I’m running into an issue getting everything working in Testflight. I’ve added the functions into our app and everything is working as expected when running the app locally, but the app is crashing as soon as it’s opened in TestFlight. Can Anyone Help ? Paid & Free app agreements are updated and Active , What could potentially be the cause of this?
Hello everyone,I’ve been working on integrating promotional offers in Android using RevenueCat within a React Native project, and after a lot of research, I wanted to share some thoughts and open up a discussion. While RevenueCat provides an overview of promotional offers, there is a noticeable lack of practical code examples, especially for Android developers.In particular, when trying to set up promotional offers based on eligibility criteria, the official documentation outlines the concept but doesn’t offer any specific guidance or code snippets for implementation on Android. This gap has made it tricky to move forward seamlessly in a React Native environment.If anyone in the community has successfully implemented these offers or has insights on how to tackle this issue, I’d appreciate your input!For reference, here’s the documentation that lacks code details:RevenueCat Google Play Offers DocumentationLooking forward to hearing your thoughts and best practices!
I’d like to let my new users experiment my app with all the features for X days without enforcing them to subscribe with a free trial and force them to unsubscribe if they don’t like the app. When the X days are over, they have to purchase a subscription in order to continue to use the application. Is the `first_seen_at` a reliable attribute to check in this case? Does it reset if the user remove then reinstall the application (on macOS) or does it internally use the StoreKit `originalPurchaseDate` date?
Our app has had great success using RevenueCat experiments to optimize subscription pricing for an iOS app. We are looking at adding an additional higher service tier, and would like to know if there are best practices given that we have users on multiple subscription groups.In order to prevent users of our main (“plus”) subscription tier from cross-grading to a lower price point offered in a pricing experiment, our experimental price points have all been confined to their own subscription groups. We understand this to be RevenueCat’s recommended best practice.Additionally, in order to avoid negative user reviews, we have not consolidated our users from low-price experiments onto the final higher price. We have subscribers active at several price points in several subscription groups.We now want to add a “pro” service tier at a higher price point. What is the best way to do this without risking users being subscribed to both the “plus” and new “pro” tier at the same time? It seems that
In my Flutter application, I’ve implemented a PaywallFooterView to display subscription offers. I would like to dynamically change the footer text or perform specific actions based on the offer that the user selects. How can I: 1. Detect the currently selected offer from the available options? Any guidance on how to achieve this would be greatly appreciated!
Hi.RC SDK 5.3.4 is used.I upgraded to Xcode 16.0 and macOS 15.0When I install my project to a simulator w/ iOS 17.5, all works fine - no warnings.When I install my project to a simulator w/ iOS 18.0, I get about 30 warnings (same when installed to an iOS 18.0 device).RevenueCatDiagnosticsPostOperation.swiftClass 'DiagnosticsPostOperation' must restate inherited '@unchecked Sendable' conformanceDispatchTimeInterval+Extensions.swiftExtension declares a conformance of imported type 'DispatchTimeInterval' to imported protocol 'Comparable'; this will not behave correctly if the owners of 'Dispatch' introduce this conformance in the futureGetCustomerCenterConfigOperation.swiftClass 'GetCustomerCenterConfigOperation' must restate inherited '@unchecked Sendable' conformanceGetCustomerInfoOperation.swiftClass 'GetCustomerInfoOperation' must restate inherited '@unchecked Sendable' conformance...Can someone confirm this behaviour?Is this an RC, Xcode or iOS issue?
I’ve just noticed that there is now an official Capacitor plugin, having been using the cordova plugin in my Capacitor app for the last few years.Can anyone tell me if this is a drop-in replacement or will I need to do some rewriting?Thanks!
Hi.I am not able to purchase subscription for other user after purchase some subscription on the other account.Steps:User A login + Purchase.logIn(userAId)User A purchased some subscription - SuccessUser A logout + Purchase.logOutUser B login + Purchase.logIn(userBId)User B purchasing some subscripton - Failed - Error, gathering informtion from the server, PG-GEMF-O1. Android, React native, Expo, Google Play, SubscriptionWhy this happend?How to solve it? Please help!Thank you
I got the folloing error after updagting purchases_flutter from 6.26.0 to 8.1.3. I am using Android studio on iMac. How can I fix this errorThe setter 'observerMode' isn't defined for the type 'PurchasesConfiguration'. (Documentation) Try importing the library that defines 'observerMode', correcting the name to the name of an existing setter, or defining a setter or field named 'observerMode'.This is my code:PurchasesConfiguration configuration; if (StoreConfig.isForAmazonAppstore()) { configuration = AmazonConfiguration(StoreConfig.instance.apiKey) ..appUserID = null ..observerMode = false; } else { configuration = PurchasesConfiguration(StoreConfig.instance.apiKey) ..appUserID = null ..observerMode = false; } await Purchases.configure(configuration);} // end
Issue:I have a sandbox subscription that expired over 6h ago, but it still returns in the active entitlements.The expiration date in the customer info from flutter sdk is: expirationDate: 2024-09-28T14:07:31Z. The current date is 2024-09-29T06:00:00Z. However, isActive is still true. I guess possibly a caching issue, but 6h seems a bit long? On the revenuecat website when I search the user it shows the annual package expired as expected. The issue is just with the sdk result.Any ideas on how to fix? Don’t want to push to live if some bug here. Json output:Here is relevant part of the entitlements json: {entitlements: {all: {premium: {identifier: premium, isActive: true, willRenew: true, latestPurchaseDate: 2024-09-28T13:07:31Z, originalPurchaseDate: 2024-09-23T02:20:56Z, productIdentifier: vb_1y, isSandbox: true, ownershipType: PURCHASED, store: APP_STORE, periodType: NORMAL, expirationDate: 2024-09-28T14:07:31Z, unsubscribeDetectedAt: null, billingIssueDetectedAt: null, productPlanIde
Hello,I read the documentation and if I understand well, if the user purchases a subscription then it will be linked to the app user ID.In my case, I do not provide any custom user IDs. What happens if the user uninstalls, then reinstalls the app ? He will lose his premium status since the app user ID won’t be the same.What can I do ?
Is there a fetch policy for getCustomerInfo that translates to,Go to network, get the most recent If network fails, use cache if not stale Return error if cache is staleBasically, “fetchedOrNotStaleCached”, borrowing from the policy names below. Is there any reason this is not supported (so I don’t try to create it through extra code either)? I thought maybe a rate limit is behind this, but not sure now (it seems a rate limit of 5 minutes for this type of policy for example would become effectively “notStaleCachedOrFetched”). public enum CacheFetchPolicy: Int { /// Returns values from the cache, or throws an error if not available. case fromCacheOnly /// Always fetch the most up-to-date data. case fetchCurrent /// Returns the cached data if available and not stale, or fetches up-to-date data. /// - Warning: if the cached data is stale, and fetching up-to-date data fails (if offline, for example) /// an error will be returned instead of the outdated cached data.
Hello. For some reason the purchases work perfectly in sandbox but production it’s not working. I can see the purchase in my revenuecat dashboard, but I don’t see any logs in my server. To make sure I deleted the app and re installed the development build to make another purchase, and it worked perfectly, meaning the purchase appears in the RC dashboard but I also can see the logs in my server.It’s crucial that this works because it’s my server that adds the tokens to the customer’s account. I should mention that the app became available just a couple of hours ago in the appstore, so maybe there is something about that. And that I double checked I entered the RC URL for both sandbox and production in the Apple Appstore app information: Hopefully somebody knows what the problem could be.Thank you for your help
I’m relatively new to iOS/Swift, and completely new to the RC SDK. I’ve made some progress with the SDK purchase flow and Apple sandbox testing. I’m trying to figure out the best practice to determine if a purchase is in progress—something robust that can persist across app re-launch—so the UI can properly reflect that.From the sample app (Magic Weather) code and documentation, Swift try/await format (which I assume is recommended over completion handlers) seems to be the proper way to call purchase(). Is this correct?Managing an isPurchasing property, as in the sample code below, is straightforward; what if the purchase takes longer than user’s patience, and for that (or any other) reason, app is terminated and re-launched before purchase is complete? Is there any API that could return something like “purchase in progress” or similar to help get the fresh app state back on track? Is this something that apps even consider?do { let result = try await Purchases.shared.purchase(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.