Discussion and help from anything related to RevenueCat.
Recently active
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
Hi,I am looking to trace a specific purchase and cancellation that I see in Revenue Cat’s Customer Profile in App Store Connect. Is this possible?I know that in Google Play Console, under Order Management, there are Order IDs I can map to transaction_id’s from RC.. But not sure I can see the same in App Store Connect.Do you guys know if Apple has a full customer view that tells me the lifetime revenue for that customer and the final take home amounts?Thank you
Hello! We intend to provide a panel so the user can see their Purchase history.The PurchaserInfo object provides a good list of nonSubscriptionTransactions that gives a solid output with product id and date of purchase for them. But for subscriptions we only get the latest for each product id, I see it is also the output from the API, so it’s not just a SDK limitation. Is there plans to add something more thorough? Is there any other endpoint where I could get such data? I’d rather not hunt down a local receipt for this (and of course I prefer it to be cross platform) Best regards,Rafael
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.
I’m building an app in FlutterFlow so no code app and i integrate RevenueCat that i would make app on subscription on monthly basis. I look and i do like tutorial say and every step one by one, but when i put in FlutterFlow test mode and press button nothing happen and i don’t know where is problem?Does anybody know some good tutorial or is open to help?
Android development using Flutter.When the system language is set to English, the paywall looks the same as in the preview screen as expected.However, when the system language is set to Japanese,the paywall looks different.Below is the preview when I set the Localization to Japanese on Paywall Editor.The same behaviour was observed in the emulator and on the actual device.The Japanese paywall cannot be set up correctly, even though this app will be released primally in Japan.Please help.
Hello, I am using revenuecat in my three apps. I have a problem with attributions for the first app.When the first subscription starts I see some attributions (ip, idfa, idfv, appslyerid, onesignalid ) but after renewal subscriptions I don't see any attributions. My other two apps have all citations after renewal and there is no problem.In all my applications; Firebase, Fb, AppsFlyer, SearchAds integration is available. Also, revenuecat plugin is installed on Firebase. I don't understand a problem with these integrations. Does anyone have any idea?Translated with DeepL.com (free version)
I am currently porting a Java Android app that doesn’t use RevenueCat to a Flutter Android app that does use RevenueCat. I have a single IAP for “pro mode” that is marked as consumable in Google Play but not consumable in RevenueCat.Once I launch this update I don’t want all my users to have to manually click my restore purchase button. I tried using syncPurchases() during first launch, but it takes two launches for this to take effect. I was able to make it work with restorePurchases(), but there are warnings in the documentation that this might prompt a login and I shouldn’t use it.What is the best practice here?
In our old question there was a reply stating we’ve duplicate products & some of them has no entitlements. Unfortunately, the question’s comments were blocked for some reason so we couldn’t reply there. It’s true that we had duplicate products but those products were never connected through the dashboard nor we used the API to add them.They appear after we successfully submit stripe subscription id as fetch_token to https://api.revenuecat.com/v1/receipts. While product with same stripe product id already exists in the RC dashboard. We’re not sure why and how that’s happening. But it may be worth mentioning, we’re listening to the invoice.paid as we’re using stripe checkout session which automates a lot of stuff. But it shouldn’t matter because we’re submitting the correct subscription id. For further clarification, this is how we’re handling creating stripe session:And this how we’re sending the Stripe subscription id to RC servers
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.
Maybe I didn’t fully understand the purpose of packages in offerings. I would like to have one offering, with 1 package, which contains 2 different products. Both should have annual renewal, but are linked to different entitlements, since one gives full access, and one only reduced (read-only). How to do this? When I try to add a second product, the first one is replaced.Do I have to create 2 offerings? I cannot have another package with “Annual” identifier...
There are some users that seem to have access to a discount offering with no apparent mechanism to getting that discount. We want to be able to see how many users have this offering to understand how they are getting it and fix the issue
I’m hoping to get some clarification on how the Meta Ads Integration works. Our app consists of only subscriptions and we currently have the integration set up where we can see the events Trial Start and Subscription in the Meta Datasource. We have configured the events for SKADNetwork in the settings in the meta platform and I can see that the idfas and idfvs are properly being collected in the customer list on revcats platform. Our code (swift ios15+ app) in the application(didfinishlaunching:) has the ApplicationDelegate.shared.application(...) function then Purchases.configure(...) , collectDeviceIdentifiers(),setFBAnonymousId(...). I can see that we are successfully getting both subscription and trial start events, but why will our campaign not show any conversions in ads manager? What am I missing?
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) ?
We’ve activated the Branch MMP integration in RevenueCat. The RevenueCat documentation mentions:In order to attach attribution data to the correct user, make sure the App User Ids for RevenueCat and Branch match. The easiest way to do this is to set the Branch SDK identity to match the Purchases App User Id whether you're providing your own ids or using our randomly generated ids. The issue is users can start a subscription before we identify them with our ID’s. This means when the trial start event gets sent to Branch it looks like this:{ "name": "rc_trial_started_event", "user_data": { "app_id": "XXXX", "developer_identity": "$RCAnonymousID:ETCETCETC" }}Then when later events come in, the identity is different:{ "name": "rc_expiration_event", "user_data": { "app_id": "XXXXXX", "developer_identity": "OUR IDENTIFIER" }}Will the RevenueCat Branch integration handle this and correctly match up the identifiers as the same user?
Is it 30 days?
I want to show like this I already setup at paywall
Hi guys.I am encountering a crash in my Expo React Native application when attempting to make a purchase using the RevenueCat Purchases module. The error occurs when calling the purchasePackage method. The error message is: Attempt to invoke interface method 'java.util.HashMap com.facebook.react.bridge.ReadableMap.toHashMap()' on a null object reference. This is how i built:1, eas build --profile development --platform android2, Copied the generated .apk onto my phone3, npx expo start --dev-clientThe package itself working, because i am getting back products, and i can display them on the screen. But when i click on a package, and want to make a purchase, i am getting this error, and the app collapse. import Purchases, { PurchasesOffering } from 'react-native-purchases';const ANDROID_API_KEY = 'my_key';const TokenScreen = () => { const { t } = useTranslation(); const { balance } = useBalance(); const [products, setProducts] = useState([]); useEffect(() => { Purchases.setL
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.