Get help with your SDK implementation.
Recently active
I have the same app running in production on two iOS devices, both devices are logged in with the same Apple ID.The App on both devices are logged into the same user account.The app calls `configure` with the same RevCat user id, and then calls `getCustomerInfo`.On the iPhone: the customer info shows the correct active entitlement.On the iPad: There is no active entitlement.I’ve tried logging out, and uninstalling and reinstalling the app, but this behavior persists.What’s causing this? How do I fix it? Thank you!
I would like to send the purchase amount to the Telemetry Deck analytics provider which I am using in my SwiftUI app. For example: .presentPaywallIfNeeded( requiredEntitlementIdentifier: "all_access", purchaseCompleted: { customerInfo in let priceValue = NSDecimalNumber(decimal: transaction.price ?? Decimal()).doubleValue TelemetryDeck.signal("TelemetryDeck.Purchase.completed", floatValue: priceValue) }, restoreCompleted: { } )I’d like to get the transaction price, ideally I’d also like currency, term, etc. Can I get this information from CustomerInfo?
Revenuecat has events and one of them is .transfer, Does .expired also get triggered for .transferredFrom user that is defined in .transfer json?
Until few hours ago, everything was running smoothly. This afternoon I received a Flutter package update. After updating, I completed my project. After admob and iap test When I checked Revenuecat, I saw an error with the "Store Status Incompatible product." I couldn't understand if it's my fault or not. Can you please help me?" this problem occures with google play
My iOS app crashes at run time in the following line in RevenueCat when Xcode 16 beta 2 attempts to install on iOS 17.5.1 (it does not crash under iOS 18 beta):`self.subscriber = try container.decode(Subscriber.self, forKey: .subscriber)`This is in RevenutCat/Sources/Networking/Responses/CustomerInfoResponse/init(from:)The app builds and runs fine with Xcode 15.4I have updated RevenueCat to 5.0.0 Debug logs from RevenueCat: DEBUG: ℹ️ Configuring SDK using UserDefaults.standard because we found existing data in it.DEBUG: 👤 Identifying App User IDDEBUG: ℹ️ Debug logging enabledDEBUG: ℹ️ SDK Version - 5.0.0DEBUG: ℹ️ Bundle ID - maadotaa.TeslaSwiftDEBUG: ℹ️ System Version - Version 17.5.1 (Build 21F90)DEBUG: ℹ️ Not using a simulator.DEBUG: 👤 No initial App User IDDEBUG: ℹ️ Purchases is configured with response verification disabledDEBUG: ℹ️ Observing StoreKit.Transaction.updatesDEBUG: ℹ️ Purchases is configured with StoreKit version 2Any help is appreciated
We’ve had requests from Android and iOS users on wanting to buy a subscription on behalf of another user (e.g., buy monthly or annual plan for their friend). Didn’t see any gifting option in RevenueCat’s documentation.We’re not familiar with the normal native implementations to support this either, so any documentation in general that you think is relevant can be helpful for our team!
Hi all,I’m trying to get RevenueCat up and running on my Expo-based application. I’ve installed the SDK (by running “yarn expo install react-native-purchases”. When trying to build the app (with EAS - “eas build --profile development --local --platform ios --output build/ios-dev-build.tar.gz”), the CocoaPods install script returns this:CocoaPods could not find compatible versions for pod "PurchasesHybridCommon" None of your spec sources contain a spec satisfying the dependency: `PurchasesHybridCommon (= 10.9.0)`.
I have a 7 days free trial configured for Monthly sub, but it is not displayed on my Paywall, could you look into this?The 1st purchase option should show monthly with 7 days free trial. And the Continue button should be code something like, try ## first then ##
I've been using a subscription purchase function in my React Native app with RevenueCat for a while, and it was working perfectly. Recently, I updated RevenueCat to version 7.27.4 and also updated the Google Play Billing Library to version 7.0.0 in my app/build.gradle. Since these updates, the function no longer produces any logs or performs the purchase action. My Purchase Function:import { Alert } from 'react-native';import Purchases from 'react-native-purchases';const buySubscriptionMonth = async () => { console.log("Attempting to buy subscription for 'affirmations_month'"); try { const { customerInfo, productIdentifier } = await Purchases.purchaseStoreProduct('affirmations_month'); console.log("Purchase completed: ", productIdentifier, customerInfo); alert("Customer Info after purchase: " + JSON.stringify(customerInfo)); if (customerInfo && customerInfo.entitlements.active["pro"]) { dispatch(setSubscriber(true)); navigation.navigate('Record');
Hi,We’ve been sending requests to the following endpoint: https://api.revenuecat.com/v1/subscribers/{{id}}.curl --request GET \ --url 'https://api.revenuecat.com/v1/subscribers/<app_user_id>' \ --header 'accept: application/json' \ --header 'authorization: Bearer <my_v1_token>'In the request we DON’T send the optional parameter: “X-Is-Sandbox”: https://www.revenuecat.com/docs/api-v1#tag/customers/operation/subscribers On the production environment, we have the following json response.{ ... "subscriber": { "entitlements": { "entitlement_identify": { "expires_date": "YYYY-MM-ddTHH:mm:ssZ", "grace_period_expires_date": null, "product_identifier": "product_identifier", "purchase_date": "YYYY-MM-ddTHH:mm:ssZ", } }, } ...}We look for the subscriber node to make user’s subscription validation. But in the last 3 days we’ve been experiencing trouble in the sandbox environme
Upgrades, Downgrades, & Management docs for Google Play only offer code snippets for Kotlin and Java. Is there no React Native alternative?
I need the original transaction id to send it to backend. We use original transaction id to check whether a used has renewed a subscription or not. I can’t check for renewals in the app because our service works outside the app, even if a user deletes the app. I was using StoreKit and had access to it but I can’t seem to find it when using RevenueCat Paywalls. How can I access the original transaction id?
I want to generate a promo code which will give access to first 200 users for free.I want to implement this in flutter. How can I do that?
Is this to be expected? I’ve setup my free trial in App Store Connect for one of my two products (the annual plan) and everything on that end seems to be good to go. But every time I hit checkTrialOrIntroductoryPriceEligibility in my simulator i’m getting INTRO_ELIGIBILITY_STATUS_NO_INTRO_OFFER_EXISTS. Is there anything I need to do in my Revenuecat dashboard to support adding a free trial? I’m seeing the free trial discount details coming down on product.discounts[0] from my getOfferings call.
Hello! I’m doing a game for VisionOS using Unity and I’m trying to using RevenueCat, but without success. I’ve followed the guides and everything seems to be properly setup.However, when I run the game I get no logs (or errors) from RevenueCat whatsoever. I have the logLevel set to verbose.Calling any method on the Purchases behavior simply does nothing. I suspect it’s because the Purchases class has the following code:private void Start() {#if UNITY_ANDROID && !UNITY_EDITOR _wrapper = new PurchasesWrapperAndroid();#elif UNITY_IPHONE && !UNITY_EDITOR _wrapper = new PurchasesWrapperiOS();#else _wrapper = new PurchasesWrapperNoop();#endif if (!string.IsNullOrEmpty(proxyURL)) { _wrapper.SetProxyURL(proxyURL); } if (useRuntimeSetup) return; Configure(string.IsNullOrEmpty(appUserID) ? null : appUserID); GetProducts(productIdentifiers, null); } I’ve tried to manually change the files but then I ge
Users have reported and proved active subscriptions. Only they are presented with the paywall. here is my code to check their status static func isPremiumSubscriber() -> Bool {var subscribed = false Purchases.shared.getCustomerInfo { customerInfo, error in//this is too slow as subscribed is not updated to the result of //!customerInfo!.entitlements.active.isEmpty//before function is returned with the initial value of false for subscribed. subscribed = !customerInfo!.entitlements.active.isEmpty }return subscribed }
Hi, I observed a weird behavior with RC where it logged a lot of "granted entitlement" entries. I usually use this REST API RevenueCat Entitlements to grant promotions to some users, then use this REST API RevenueCat Grant a Promotional Entitlement to revoke the promotion under certain conditions.When I checked the Entitlements section, I realized there were a lot of "Granted entitlement" entries displayed (please check the attachments).That led to a lot of CANCELLATION events coming to my webhook when I revoked that user's entitlement. I considered this abnormal as it is not necessary to send many CANCELATION event, and as I remember, if I grant the same entitlement to one user, there should be one active production with the duration is sum of all granted time, now, it is divided to multiple products with the same nameI wonder if there was something changed on RC side? Or this behaviour configurable.Thank you in advanceRegards
My app is a paid app, and I’m transitioning the pricing model to the same model as Due app (https://dueapp.zendesk.com/hc/en-us/articles/360053244591-What-is-the-Upgrade-Pass). The difference is instead of using a subscription, I use a consumable in-app purchase.Each feature in the app has its own release date. To determine if a feature is unlocked, I compare its release date with the upgrade end date. If the release date is the same as or earlier than the upgrade end date, the feature is unlocked. I calculate the upgrade end date from the CustomerInfo object returned from Purchases.shared.getCustomerInfo:Purchases.shared.getCustomerInfo(fetchPolicy: .notStaleCachedOrFetched) { customerInfo, error in if let customerInfo { let purchaseDate = customerInfo.purchaseDate(forProductIdentifier: productIdentifier) ?? customerInfo.originalPurchaseDate let endDate = Calendar.current.date(byAdding: .month, value: 12, to: purchaseDate) // Further logic here } else if let
Hello,I’m trying to use custom display logic in my android’s paywall dialog.I use “setShouldDisplayBlock” according to the documentation, however it seems it’s being ignored.Let’s use an exaggerated example:val paywallDialogOptions = PaywallDialogOptions.Builder() .setShouldDisplayBlock { false } .setRequiredEntitlementIdentifier(PurchaseManager.premiumEntitlementId) .build()PaywallDialog(paywallDialogOptions = paywallDialogOptions)It should never be displayed according to the documentation, yet it’s being shown the moment the screen is open.Did I get something wrong?I created a simple project that it can be tested on - https://github.com/kmalyshev/purchases-paywall-problem. You’d need to add a revenuecat’s api key and the entitlement identifier
We have found an issue during Live App Testing on the Amazon App Store. In the Amazon Developer Console we have set up one subscription in-app items with two terms: Monthly, paid subscription, no free trial, no promotional price Annually, paid subscription, free trial (1 month), no promotional price. When testing our app with Amazon Live App Testing, we found that the annual subscription package object from RevenueCat does not have a period set (it’s “period=null”), however, the monthly subscription has a period set as expected (“period=Period(value=1, "unit=MONTH", iso8601=P1M)”). The main difference between the two is that the annual subscription has a free trial period. This hinders us from displaying our available packages as desired with the proper subscription period. We’re using RevenueCat v8.1.0. My device is a Amazon Fire HD 8 (12th Generation), running Android 11 (SDK 30). Here are the RevenueCat Package objects, logged from a Live App Testing build of our app from the Amazon
I am testing my application. I can make purchases and test them in the simulator, but whenever I share testflight, it gives error number 23 on the real device. Can you help me, I'm sure I'm doing everything right?
Hi,We are trying to use the OpenAPI spec available on your website but if you run a linter against it, you can see that many of your examples do not align with the specification:v1:npx @redocly/cli@latest lint https://www.revenuecat.com/docs/redocusaurus/plugin-redoc-3.yaml v2:npx @redocly/cli@latest lint https://www.revenuecat.com/docs/redocusaurus/plugin-redoc-0.yaml This will show things like:Example value must conform to the schema: `refunded_at` property type must be string.238 | period_type: normal239 | purchase_date: '2019-07-26T01:02:16Z'240 | refunded_at: null241 | store: promotional242 | unsubscribe_detected_at: null It would be great if the RevenueCat development team could please fix these errors and publish a valid spec that would help us confirm we are calling the API correctly.
Hi, I attached line of codes below, how can I send the email I get from Firebase to RevenueCat as the user’s email attribute.
Hi, I’d like to use the purchase_ui library in flutter but as stated in the docs you can only pass a offering as parameter to the Paywall widget.For my use case I need more customization, is there a way to pass a list of StoreProductDiscount (Apple) or SubscriptionOption (Android) ?
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.