Discussion and help from anything related to RevenueCat.
Recently active
I am trying to localize Paywalls with no success.I tried to enter detailed text in Paywall setup.However, month and year words are never get translated.Actually, They are both localized inside Google and Apple stores.They show up correct once you go inside Apple or Google after clicking paywall but not on the actual paywall.So, how should I set this up?
In the iOS SDK, you can check an entitlement for a customer and determine if that entitlement is in the sandbox environment or not. For the same customer, when looking at the Firebase collection setup via the integration, the entitlements object has nothing indicating if the entitlement was granted in the sandbox or the production environment: "entitlements": { "pro": { "grace_period_expires_date": null, "product_identifier": "pro_1199_1m", "expires_date": "2024-08-01T20:03:48Z", "purchase_date": "2024-08-01T20:02:16Z" } },The only way I can think to determine if this is in the sandbox is to match the product_identifier for the entitlement over to the subscriptions object and see if is_sandbox is set. Is there a better way to do this? For a given product_identifier, will there only be a single matching entry under the subscriptions object, or will there potentially be multiple entries?
I am trying to use RevenueCat for selling consumable products on my ReactNative mobile app. To start with, I configured a product in my revenuecat account, connected it with a in app product on Google Play. In revenuecat, I can see the two are connected properly. I do not have any offerings or entitlements, because these consumable products are open for all users.However, in my code, when I queryPurchases.getProducts(["productId"]) get an empty array. Struggling for two days, not able to guess what could be the issue? Can you please help?
We have a bunch of skus from price experimentations and across platforms.E.g.co.acme.product.monthlyco.acme.product.monthly.discountedco.acme.product.monthly.discounted2 For reporting (e.g. of churn), I’d like to group them all together so the chart isn’t so fragmented. Is there a way to do that?
Hello there. We developed an app that's for both platforms, iOS and Android, the app allows users to purchase a subscription. The iOS version is working fine, but I'm trying to implement same functionality on Android, using either purchaseStoreProduct or purchaseSubscriptionOption. The first one gives me message that the item to purchase is not found and the second got stuck forever and gives no error.Can you help me please? I'm using the 7.2.8 version of the lib.
As discussed in the post linked below which seems to have comments closed, the migration guide points to the Firebase docs for tracking StoreKit 2 transactions in Firebase.However, it’s not clear from the sample code provided by Google/Firebase how this would integrate with RevenueCat exactly.Does it matter if `await transaction.finish()` is called after `Analytics.logTransaction(transaction)`?Guidance appreciated. Thank you.func purchaseSomeProduct(_ product: Product) { // Purchase a Product. This is mostly standard boilerplate StoreKit 2 // code, except for the Analytics.logTransaction() call. let result = try await product.purchase() switch result { case .success(let verification): let transaction = try checkVerified(verification) // Call this Firebase API to log the in-app purchase event. // NOTE: How do we hook in to this specific point via RevenueCat? Analytics.logTransaction(transaction) await transaction.finish() ...}
Hi,When can I expect a RevenueCat Unity SDK update to include latest RevenueCat Android SDK changes?.Thanks
Hi there,I did find a similar post to what I wanted to ask here, but it’s now closed for comments:Our context is that we implemented and shipped IAPs ourselves, before we decided RevenueCat was worth trying out. We didn’t store the raw base64 receipts, because Apple actually discourages and deprecated the /verifyReceipt endpoint last year. We did store every transaction ID, though, and —as that post notes — we’re able to get the full transaction info securely and verifiably through the App Store Server API.Since we don’t have the base64 receipts, we indeed went with a client-side migration path, but the result is that RC’s data even a week+ after shipping is incomplete. We’re trying RevenueCat out now, but it’s been really hard to trust and rely on RC data when we can see the numbers are still incomplete and inaccurate (like still 30% off in some cases!!).Is there any way you all could reconsider this limitation? This would be very meaningful to us.Could you also share more about what
i see Opted-out of renewal on the subscription history of our subscribers. does it mean refund?it’s too confusing. does it mean they paid the subscription but will not renew next year?
When a user logs in, it pulls their app user ID then performs the login() function on that ID.I have a real active subscription with my live app on the app store with my App User ID.When I run my app in TestFlight and login with the same App User Id, my entitlement is granted and it loads my CustomerInfo from my Live account. I thought this was an isolated environment?
I have over 500 users subscribed to a certain price plan.I want to increase the price of my app, but I want to let my current 500 users continue with that plan indefinitely. I can create a new plan with a higher price and make everything work fine in my paywall.The problem is, people can still sneak into the app store and view my old lower price offer and subscribe to that. I don’t see any way to disable old prices in app store connect without ruining it for all my existing users. Is there a solution to this for ios & android?
I’m a big fan of the Experiments feature. However, in my app I have a discount/affiliate program that gives certain users a discounted price. In the app, if they have the custom RevenueCat attribute “latest_referral” set, it will override their assigned Offering and use the Offering associated with that referral instead. It would be great if I could ignore/exclude customers with that attribute from the results of experiments.
we are using purchases_flutter packagein pubspec.yaml version info below:- purchases_flutter: ^6.3.0in pubspec.lock version info below:purchases_flutter: dependency: "direct main" description: name: purchases_flutter sha256: "5791321994934c265f9a178c69a329e0f7c21b1975b1e40abfadfa1a3f07cd8a" url: "https://pub.dev" source: hosted version: "6.24.0"From Google play console has issue ‘App must use Google Play Billing Library version 6.0.1 or later’How can fix this.Regards Abdulahad
After upgrading our Flutter environment from version 3.13.8 to 3.19.3, we encountered a persistent error when fetching offerings from RevenueCat using the purchases_flutter plugin. The application throws a type cast exception, specifically type 'Null' is not a subtype of type 'Map<dynamic, dynamic>' in type cast, during the offerings fetch operation. DetailsFlutter Version: Upgraded from 3.13.8 to 3.19.3. purchases_flutter Version: Initially encountered on version 6.21.0; upgraded to 6.24.0 in an attempt to resolve the issue, but the error persists. Error Message: type 'Null' is not a subtype of type 'Map<dynamic, dynamic>' in type cast Error Location: The error occurs within the try-catch block around the Purchases.getOfferings() call, indicating an issue with handling the fetched offerings data. Observations: The debug logs indicate that the getOfferings call successfully contacts RevenueCat and receives a response, but fails during JSON deserialization or handling within
Google play now requires billing lib >= 6.0.1 , I found this blog: https://www.revenuecat.com/blog/engineering/google-play-billing-library-7-features-migration/I added `implementation "com.android.billingclient:billing:7.0.0"` and updated Revenuecat to 8.2.1 I exclusively use the Revenuecat sdk for my app, namely: `Purchases.sharedInstance.purchaseWith , getOfferingsWith , awaitSyncPurchases, awaitRestore, getCustomerInfoWith, awaitCustomerInfo` do I need to make any more changes before uploading my app ?
Hi!I recently launched a hard paywall in my app and have had a fair few people each day sign up to the 3 day free trial.Around 55% of users remain after the 3 day trial but I am finding that when it ends around 40-45% of the remaining users are running into 'billing errors' meaning they end up not paying at the end of the trial despite never cancelling.The app does target a younger audience, but this still feels way too high. Has anyone come across this issue before at such a high % and if so, is there anything we can do to try and improve this number?Thank you!
Hello,I want to have two separate paywalls for my app. One for subscriptions and for one one-time purchases. I have created both paywalls in my RevenueCat account. However, when I use the RevenueCatUI.presentPaywallIfNeeded() function with different strings for offering identifiers, I get every time the default offering. In other words, the second paywall does not show even through I have put the correct offering identifier. Do you know how to achieve the behavior I described above?
Hello,I want to have two separate paywalls for my app. One for subscriptions and for one one-time purchases. I have created both paywalls in my RevenueCat account. However, when I use the RevenueCatUI.presentPaywallIfNeeded() function with different strings for offering identifiers, I get every time the default offering. In other words, the second paywall does not show even though I have put the correct offering identifier. Do you know how to achieve the behavior I described above?Just to clarify, the user does not have the entitlements so the paywall shows.
“This method will send all the purchases to the RevenueCat backend. Call this when using your own implementation for subscriptions anytime a sync is needed, like after a successful purchase.”Source: https://sdk.revenuecat.com/android/5.0.0/purchases/com.revenuecat.purchases/-purchases/sync-purchases.htmlIf I understand correctly syncPurchases:1. upload the local device’s receipt to RevenueCat2. Transaction might under another app user id, so if needed transfer going to happen.3. The user access all entitlement based on the device’s receiptIs it correct? If yes, I don’t understand why need to call “like after a successful purchase.”.I assume purchaseProduct make a full sync with RevenueCat backend after the purchase, because the app should send the current receipt to the RC server, so why needed syncPurchases?
Hello, I’m having the following error on iOS platform in my Unity game. PurchasesHybridCommon/CommonFunctionality.swift:21: Fatal error: Purchases has not been configured. Please configure the SDK before calling this method.Not all my users face this error and I cannot reproduce it on my devices. I just can see them on Crashlytics.This is how I configure Purchases:
We are occasionally seeing cases where a user is able to start a subscription but their email is not associated with the user in the RC dashboard. Our code pretty straightforwardly should not allow this. The below snippet is the only place where we call `Purchases.configure()` and we immediately set the email attribute.fun initializeRevenueCat(user: User) { if (user.email.isEmpty()) { return } val config = PurchasesConfiguration.Builder(...).build() Purchases.configure(config).also { it.setEmail(user.email) }}Is this a bug in the RC Android SDK or are we missing something in usage?
Hello!Our app was rejected due to the same issue discussed here: It appears that the solution given in that thread was basically to not use the sandbox - but the App Store reviewer uses the sandbox to test and validate our app?We were able to get things working by restoring purchases prior to trying to view the introductory offer. However, as you can imagine, it is difficult to communicate this issue to the App Store reviewer.I have some follow-up questions on this:Is this an App Store Sandbox issue or is there an issue with the RevenueCat SDK? Has a bug report been filed with Apple that we can reference when responding to the reviewer? Is there some sort of additional functionality we should implement in our app to make sure we don’t experience this issue in the sandbox?
I have this error when trying to fetch offering from Revenue cat[Error: 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). Here is my Setup:app store agreementsapp store product:in revenue cat, i can import product automatically from app store here is my offerings & product: Can someone tell me what's going on =(( I'm stuck with it for 2 days now
Flutter, iOSI’m able to subscribe through paywall, able to fetch offerings and products. But when deployed to testflight it doesn’t work. I get error that error with configuration and can’t fetch products. The subscription in applestore connect hasn’t been approved and is in the state “Waiting for Review”, if I submit a build it gets reviewed and rejected stating that they got an error when opening the paywall, the error is the same as above. Can anyone help me out?
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.