Discussion and help from anything related to RevenueCat.
Recently active
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
My application doesn't need user to create account or login. When the user open the app, they need to subscribe to one of the plan to use the app. I am having trouble submitting the app for Google review since they need me to give them access to the app.Is there anyone familiar with this situation and does revenuecat has any function for this case?
We need to add some metadata (key-values) to user’s payments. As an example, we’d like to send workspaceId and other key-value parameters along with a payment that user is creating.I understand that there is a Subscriber attributes which offers capturing custom metadata on the user object, however what we need is to attach metadata to individual payments and not users.Anyway to acheive this functionality with RevenueCat APIs?
I am using RevenueCat for in-app purchases in my Ionic Capacitor React app. I have a question regarding the scenario when a user purchases or subscribes to a plan. If the payment enters a pending state, how can I check whether the payment was eventually successful or failed?And also how i am check if the user are not cancel their subscription after plan purchase.
Hi,I would like to implement a 24 hour “full access/no ads” acess to my App. It should be a one time purchase for the user and automatically expires after 24 hours. I see only the possibility to implement this with consumables.How I would realise it:I would create an own Entitlement for those consumables My app would check all transactions for this Entitlement and consider the entitlement as active if one of the purchases has been done max 24 hours agoCaveats I see:Revenue cat would consume the product directly after purchase. And then the entitlement stays active forever. Not a problem. But not really beautifulWhat do you think of this idea? Are there more caveats or problems you see? A better idea?
Hey everyone!I wanted to share an issue I’m experiencing with RevenueCat in my app, which is currently in closed testing. Yesterday, I made two purchases using a real credit card to check how things work in production mode. Up until now, I had only tested with Google Play’s test cards, and everything worked perfectly in sandbox mode.The issue is that while the payments were processed correctly (each purchase was under 1 USD), when I checked the "Overview" section in RevenueCat, it recorded a total of 30 USD, which doesn’t make sense. Both transactions are listed as if they were 14.99 USD each.This seems strange since everything worked as expected in sandbox mode, and the amounts were recorded correctly. Has anyone experienced something similar or have any idea why this might be happening?Any help or suggestions would be greatly appreciated!I’m attaching some screenshots to provide more evidence of what I’m describing.This is one of the transactions, and the amount is 0.53This is what t
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
Error 429 is:{ "code": 7638, "message": "There is another request in flight trying to perform the same action."}Error 529 is:{ "code": 7746, "message": "This fetch token is currently being ingested. Please retry the request again to ensure any changes since the initial request are ingested."}This can happen if we do multiple `POST /receipts` for the same user.Do they have a different meaning? Is there a nuance in how we should handle these?
Because of the account number, I now have to re-register a google play account.Therefore, it involves transferring the application of the old account to the new account.My app offers subscription items as well as one-time permanent buy-out items.I want to know what I need to do before and after migrating my application. I need to ensure that users who have purchased perpetual goods are not affected and subscriptions are not affected before and after migrating my application.
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 ?
I have a question.I'm thinking of leaving the in-app purchase subscriptions for my iOS and Android apps to Revenuecat, storing the data received from Revenuecat's Webhooks on my own server, and using that data to control the provision and suspension of paid features in my app using my own app API. In that case, I have two questions.1. Webhooks are asynchronous, so what should I do if I need to take delays or non-delivery into account? I'd like to know if there is a Revenuecat function that can take that into account.2. Is this design correct in the first place? The purpose of introducing Revenuecat is to reduce the cost of implementing in-app purchase subscriptions in-house in accordance with the specifications of Apple and Google's platforms.
we have a subscription package with an offer 1 week free and working fine after adding a new offer 1 month as developer determined, will be the default when calling purchasePackageand this affect current users, is there a problem in offer eligibility?i need 1 week to be the default for new uses, and the mange the 1 month programmatically through Purchases.purchaseSubscriptionOption version: purchases_flutter: ^8.1.3
Hi. I use Paywall, which is awesome. But it doesn’t manage upgrades/downgrades for Google Subscriptions, which is not awesome. W/o this basic support, Paywall is essentially unusable for Play Store with multiple subscriptions. Are there any solutions that allow us to use Paywall for upgrades/downgrades?
Hello !I have an app with 2 subscriptions: yearly and monthly; If with userID1 subscribe the yearly subscription and add the custom user app id, I want to block both subscriptions to another accounts that log in with the same google play/ apple store account. How can revenue cat manage that ? Thanks in advance
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,I have an app where the users can connect their vehicles to an API and record trips and so on.Currently I have one subscription, where the user can add as many vehicles as he wants. But now I want (need) to change this to one vehicle per subscription.So if the user want to add two vehicles, he need to subscribe two times to the same product.How can I handle this?Thanks,Arangoool
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
I received this error when tried to build my app on EAS after installingnpx expo install react-native-purchasesnpx expo install react-native-purchases-ui Run script build phase 'Create Symlinks to Header Folders' will be run during every build because it does not specify any outputs. To address this warning, either add output dependencies to the script phase, or configure it to run in every build▸ ** ARCHIVE FAILED **▸ The following build commands failed:▸ SwiftCompile normal arm64 Compiling\ PurchasesPlugin.swift /Users/expo/workingdir/build/node_modules/react-native-purchases-ui/ios/PurchasesPlugin.swift (in target 'RNPaywalls' from project 'Pods')▸ SwiftCompile normal arm64 /Users/expo/workingdir/build/node_modules/react-native-purchases-ui/ios/PurchasesPlugin.swift (in target 'RNPaywalls' from project 'Pods')▸ (2 failures)** ARCHIVE FAILED **The following build commands failed: SwiftCompile normal arm64 Compiling\ PurchasesPlugin.swift /Users/expo/workingdir/build/node_modules/r
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.