Discussion and help from anything related to RevenueCat.
Recently active
We have multiple developers on the team that are working on our mobile IAP implementation, which means they all have to receive webhooks on their local dev machines to test things. So far we have been managing this by just changing the webhook URL as different people test, as well as having multiple RC apps to test with. This can be pretty cumbersome because we can’t duplicate apps, we have to create new ones fresh and go through the process of copying the existing configuration from the old app.It would be so much easier if we could just configure multiple endpoints that all webhooks get sent to. Is this possible, or something that we could get added to your backlog?Thanks.
Hello everyone,I apologize for the double post, as there was an issue with the previous one where some of my private data got published unintentionally. I appreciate your understanding.Now, I'm facing a challenge while implementing subscription functionality using RevenueCat, and I could really use your guidance. Here's the scenario:When a user clicks on any subscription plan on the paywall, I disable the buttons to prevent multiple clicks. However, I'm unsure how to handle the situation when the user closes the subscription sheet without completing the subscription process. This leaves them on the paywall without re-enabling the buttons.I would greatly appreciate any advice or suggestions on how to catch this event or find a solution that allows me to re-enable the buttons in this specific case. My goal is to ensure a seamless user experience, even when users accidentally close the subscription window.Button(action: { isProcessing = true if let package = subscriptionManager.pack
Hello, I’ve managed to invoke presentCodeRedemptionSheet() inside the react native app, and did successfully setup the subscription offer codes in the app store. However when we try to redeem the code, native modal says that the offer has already expired even though expiration date is in the future. Is it possible to test the subscription offer codes in the sandbox? thanks
First of all, Great product team!This is for macOS.I want to make sure following:Deny sandbox entitlements on AppStore AppStore reviewer should be able to access pro content after they do paymentLets say I use customerInfo.entitlements.activeInCurrentEnvironment[“pro”] to unlock access, what will happen when AppStore reviewer tests payment flow to unlock access? I assume it will not work as that environment uses sandbox for payments.I tested this on TestFlight and activeInCurrentEnvironment looks for non sandbox entitlements and does not find one.Basically this code of checking sandbox env ignores macOS TestFlight and I assume will ignore AppStore review environment also:BundleSandboxEnvironmentDetector:var isSandbox: Bool {return path.contains("Xcode/DerivedData") Also if I am doing this filtering myself instead of activeInCurrentEnvironment:For macOS TestFlight detection this gist works: https://gist.github.com/lukaskubanek/cbfcab29c0c93e0e9e0a16ab09586996Does anyone know safe way to
We implemented iOS offer codes, but not with revenueCat properly. So now subscriptions are being read, but the total paid / revenue is $0, when in reality it’s not.Is there a way to custom edit individual entries?
Sorry if it was asked before, I searched but couldn’t find anything :(What is the best way to calculate the price for annual subscription per month/week? I want to show user, how much he/she will pay for an annual subscription each month or week.I see that there is a pricePerMonth property on StoreProduct and it calculates correctly, but it shows only the numbers, without currency symbols such as $.Thank you!
I’m trying to apply a developer-determined offer in the app.Using react-native-purchases 6.0.0.I’m able to fetch the Offerings using `Purchases.getOfferings()` and I can see the discount as an option in what is returned. packageType: 'MONTHLY', product: { discounts: [ { cycles: 12, periodNumberOfUnits: 1, priceString: '$2.99', period: 'P1M', price: 2.9899999999999998, periodUnit: 'MONTH', identifier: '12_month_25_percent' } ],However, I am unsure on how to then apply this offer.purchasePackage and purchaseSubscriptionOption each don’t seem to offer an option to apply the discount.purchaseDiscountedProduct and purchaseDiscountedPackage say they only apply only to iOS.So how should I apply a developer determined offer in android when making a purchase?https://www.revenuecat.com/docs/google-play-offers#eligibility-criteria
Hi everyone,I am afraid the answer to this question is No but in case this ever changes in the future I am still asking it.Is it possible to export/integrate RevenueCat collected data into Google Firebase Analytics?Thanks in advance for your reply.
Hello my subscription id is lotto_world_pro and base id is lotto-world-pro-monthly. in revenuecat my id for this product is lotto_world_pro:lotto-world-pro-monthly. When i use the code below in flutter if i use revenuecat id i receive a product not found error but if i use just lotto_world_pro(sub id) it works well and revenuecat sees my transactions. Am i doing it right? Shouldn’t the revenuecat id sholud work?Future<void> _getAndroidProductsSubs() async { try { androidSubs = await Purchases.getProducts( [ 'lotto_world_pro', ], type: PurchaseType.subs, ); } on PlatformException catch (e) { debugPrint(e.toString()); } }
Hello,I see this is a very common problem. I have waited 4 days but I still get this error. I think I have created the service and pasted the JSON file correctly to RevenueCat. My question is if there is any way to check that the credentials are correct without having to make a transaction at source code level. How could I check if the credentials are working let’s say in an external way? If I re-create the keys and set a new JSON file, will I need to way again between 24-48 hours? Or this only happens when the service account is created? I would like to continue with the development but currently I am stuck since I cannot test some notifications due to the transactions being rolled back because of the credentials issue. Thanks.
My iOS app has recently passed Apple's review process and is currently in the status of "Pending Developer Release." Prior to the official release, I wanted to test the in-app purchasing feature, so I issued a promo code shortly after the app was approved. Through this promo code, I downloaded my app, but unfortunately ran into an issue. When I attempted an in-app purchase, the screen remained in a "loading" state. This issue was not present in my TestFlight version, where the iOS payment sheet typically displayed promptly.I'm uncertain whether this could be an issue with my code, or if there is a certain waiting period required after approval before the in-app purchase functionality can be tested, even with the app downloaded via a promotion code.With these concerns, I'm feeling quite apprehensive about making my app public. I would greatly appreciate if someone could provide some insight or guidance on testing in-app purchases in the actual production environment before public releas
We are trying to keep the same entitlement state of our users in our own database, and we're using webhooks for that. It's globally working well, except for a case where we found that the `expiration_at_ms` is not giving us the correct expiration date, for a TRIAL in a "INITIAL_PURCHASE" event, only for ANDROID.Please check screenshot attached:on the user page, you can see that the user subscribed to a trial on April 21st, on the top right you can see him having the "pro" entitlement until 2023/05/08. when we click on the "started a trial" line, we check the webhook event, the expiration_at_ms value is `1682357863507` corresponding to `Monday, 24 April 2023 17:37:43.507`, which is the info we have in our DB. Why are the 2 dates so different ? This is the only event that is triggered to us. As it is only happening with Android, is there a bug for android or an additional thing we need to do to set this up correctly ?
If I'm using the 'Transfer to new App User ID' Restore Purchase Behaviour, is just calling syncPurchases() after I call Purchases.configure() a reasonable course of action?I could put a button there and do a proper restore, but if I’m presuming that the user is just going to hit the button anyway, doesn’t syncPurchases() save them the trouble?Many thanks.
I regularly find that a billing error is triggered within minutes after a user converts to a subscription from a trial. This is problematic because we send emails based on billing error events, and in many cases this is one of the first communications our users receive from us. Any idea why the billing error could be happening so soon after the subscription payment is successfully charged?
Hi there, is there a way to create a filtered customer list based on custom Attributes? We would want to use this in order to create a Customer List filtered through a list of “blacklisted” internal accounts we do not want to count towards our sales and user statistics. If there is another way to make this happen, I would love love to hear some tips and best practices.
Hi there,I’m just starting out trying to implement and test an App Store auto-renewable subscription. I followed the setup guide and am using the iOS simulator to test. I was able to make a test purchase of a monthly product I have configured and I can see it in the sandbox with my anonymous user. I can see also subsequent purchases for the same user. The question I have is, all of the purchases are INITIAL_PURCHASE and none of them are RENEWAL. I was wondering if this was normal? From what I understand, the app store should do up to 6 renewals per day before you have to wait 8 hours to test again on the same sandbox user account? I can see currently 20 INITIAL_PURCHASE transactions in the Overview Dashbaord. In my code I just added this one:Purchases.shared.purchase(package: package) { (transaction, customerInfo, error, userCancelled) in if let customerInfo = customerInfo { if customerInfo.entitlements[name]?.isActive == true { // code for unlocking goodies
Hello,I’m running an experiment where one of the items is an in-app purchase, but I can't find how to account for that revenue in the results.Thanks
Some of our subscription prices are round numbers like $15/yr however when I use the localizedPriceString in the Package class it shows the cents part as 00 e.g. $15.00 I just want the dollar amount if the cents part is 0. I tried modifying package.storeProduct.priceFormatter to hide the fractional part but it didn’t have any effect on the string in the package.localizedPriceString property. Is there some way to just show the localized price without the fractional part via the SDK? Thanks.
I’m running into a bit of an edge case where my app might allow duplicate subscriptions to occur:Our app is iOS only. For experimentation with pricing, I have 2 subscription groups setup in App Store Connect:Group A = has monthly/bi-monthly/yearly products at default prices Group B = has monthly/bi-monthly/yearly products at experimental pricesEach of these groups is put into an Offering, and an Experiment is setup to compare these 2 offerings.(I understand that I must use 2 subscription groups here, or users could manually cross-grade to the cheaper group)Our app does not use any anonymous App User IDs -- users must create an account before purchasing. We are using the “Transfer to new App User ID” behavior for purchases with multiple App User IDs.Starting with a fresh iOS Sandbox tester ID:Create account (App User ID) UA RevenueCat SDK logIn() with App User ID = UA Experiment drives user UA into Offering A User UA purchases a Monthly subscription from Group A at Price AAfter this, th
I am reading RevenueCat's documentation to implement subscriptions using RevenueCat.But, I encountered a problem while setting things up as I was reading the documentation.When create new service account in Google Cloud Console, I cannot find Monitoring Viewer.Should I choice Monitoring Snooze Viewer?
Hi,I am processing the REST JSON output from https://docs.revenuecat.com/reference#section-the-non-subscription-object . For a scenario I need the date when the user started the current subscription. As far as I understand the “original_purchase_date” provides the original date of purchase. This is fine as long as the user does not cancel and later re-subscribes. Is there a way to get the original purchase date of the re-subscription?Best regards,
I created a new in app product and add it to the offer list in reventcat, when trying to fetch the offerings list, I only can see the current offer: Is there something I can do to see it through revneucat? I’m using com.revenuecat.purchases:purchases:5.0.0-rc3 latest sdk
When is the flutter SDK going to support andriod billing SDK 6+? At the moment Im not able to get any products to show up that are not backwards compatible and the google play store only allows you to set one product/subscription as backwards compatible.My project is using the latest andriod billing SDK and the latest revenueCat flutter plugin. Just switched the Andriod configuration to only work with 6+ and I get the below error Error fetching offerings - PurchasesError(code=UnknownBackendError, underlyingErrorMessage=Backend Code: 7728 - This SDK version is not supported for this app., message='There was an unknown backend error.') If I have it to support 6+ and backwards compatibility I only get the one product for Andriod (iOS is fine)
I have an App with a single In app purchase that I would like to see restored on reinstall or device switch. I am using anonymous id’s with the ‘Transfer to new App user ID’ setting. Upon app startup I call the ‘syncPurchases’ function immediately after ‘configure’ and wait for the response before proceeding with other revenuecat API calls.if a user reinstalls the app, then he will not have the in app purchase available. He has to restart the app in order to see it take affect. I have only tested this out on Android, so I am not sure it’s an issue with IOS.This is my react-native code:useEffect(() => { const fetchPurchaseData = async () => { // ... omitted if (Platform.OS === 'android') { await Purchases.configure({ apiKey: APIKeys.google }); } else { await Purchases.configure({ apiKey: APIKeys.apple }); } await Purchases.syncPurchases(); const offerings = await Purchases.getOfferings(); const customerInfo = await Purchases.getC
Hi ,I have the purchase code ,but where should I create the configs/env.props file?
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.