Get help with anything related to RevenueCat.
Recently active
“””> To remove the app - do we simply unpublish it from the stores? Will it automatically cancel subscriptions of existing users and refund them?That should work and will cancel everyone's subscriptions but Apple and Google recommend a more gradual wind down, similar to what I described above. You can avoid more issues like many customers requesting refunds all at once by doing it gradually (it sounds like you have 12 months to wind it down which is great.)“””This is an existing answer which I have a follow up on. If you unpublish the app and existing subscriptions get cancelled, do users also receive a refund? Or are cancellations not the same as refunds? For iOS, can a user get a refund only when they proactively request it?
SOLVED IGNORE-----------Anyone had an issue with the leading icon for your product feature not showing in the paywall. Seems like it should be simply choosing the icon but it’s not displaying for me. Am I missing a next step to ‘enable’ the choice? Is there a variable embed call I need to encode?Specifically this is the ‘Bengal’ paywall template. Thanks.
Trying to test subscriptions here in the UK, I’m getting times that are an hour earlier than they should be.Eg. in the below, “event_timestamp_ms: 1715095053830” is 3:17 pm UTC but it was purchased at 4:17 PM BST). This means that my test subscriptions have already expired as soon as I’ve bought them.I’ve been testing and using this app on RevenueCat for many years now, I haven’t noticed this before?Is this expected (i.e. do I need to write some test code to adjust the time)??{"app_id": "app4ba6172f87","app_user_id": "$RCAnonymousID:6e4c865677794230bf7135217c28374f","country_code": "GB","currency": "GBP","entitlement_ids": ["TPBDCore","tpbdinno"],"environment": "SANDBOX",“event_timestamp_ms": 1715095053830,"expiration_at_ms": 1674173448000,"is_family_share": false,"new_product_id": "TPBDInNoMonthly","offer_code": null,"presented_offering_context": null,"presented_offering_id": null,"price": 67.89584611756514,"price_in_purchased_currency": 54.99,"product_id": "TPBDIaYhAnnually","purchas
I want to send a reminder to users when their subscription is about to renew. On a daily basis, I need to determine the users whose subscription will automatically renew in the next X days.I know I could do this with the Customer Lists feature, but to my understanding, that would require manual effort. I am looking for a way to programmatically query Revenue Cat.Is there a REST API I could use?Or, is there another way I can do this?
Sometimes my customers get the following error while attempting to make a purchase: “There was an unknown backend error. The API key is not intended for the Platform.” with the error code 7810. I can’t find any solutions online so I decided to ask how I should handle this here.
Dear Suuport team, As per check ‘getCustomerInfo’, it work for: - “Test card, always approves” / “Slow test card, approves after a few minutes” and “Test card, always declines” but for “Slow test card, declines after a few minutes”, there is no response status of that case. May you advise in this case? Please kindly check the code below: Future<void> makePurchase(context, String numberOfEgg) async { Map<String, dynamic> payload = {}; List<Map<dynamic, dynamic>> filteredItems = []; bool slowCardApproval = true; try { filteredItems = filterById(numberOfEgg, Platform.isIOS ? products : googleProducts); if (filteredItems.isNotEmpty && !isPurchasePending) { ref.read(purchaseInProgressProvider.notifier).setInProgress(true); payload = { 'identifier': filteredItems[0]['identifier'], 'description': filteredItems[0]['description'], 'title': filteredItems[0]['title'],
On latest Expo and react-native-purchases, as far as I can tell everything’s still active and I had a purchase back in February so this used to work. Works fine on iOSconst productIds = Object.values(Constants.expoConfig.extra.products[Platform.OS]);console.log('productIds', productIds); // Array of products output correctly// No console.log() or console.error() gets firedtry { const products = await Purchases.getProducts(productIds); console.log('products', products); // Never outputs setProducts(products);} catch (error) { console.error('Failed to get products', error); Sentry.captureException(error);}
I am setting up a one-time purchase with RevenuecatI have set up subscriptions before, but never a one-time purchase like the “coins” I am attempting to sell now. I am logging “currentOffering?.availablePackages and see the correct product I want to sell. When I run: const { customerInfo } = await Purchases.purchasePackage(currentOffering?.availablePackages?.coins); I get this error: [TypeError: Cannot read property 'identifier' of undefined] Please let me know if you can see what I am doing wrong. Please see the attached screenshot to see what is logging out for my currentOfferings
Hello,I'm currently working on automating an email notification system where users who are on a free trial receive an email automatically 5 days after their initial sign-up. I'm using webhooks for this purpose. Below is the implementation snippet using Node.js, Express, and Nodemailer: require("dotenv").config();const express = require("express");const bodyParser = require("body-parser");const nodemailer = require("nodemailer");const app = express();const port = 3000;app.use(bodyParser.json());const transporter = nodemailer.createTransport({ service: "gmail", auth: { user: process.env.EMAIL_USER, pass: process.env.EMAIL_PASS, },});async function sendMail({ to, from, subject, html }) { try { let info = await transporter.sendMail({ from: from, to: to, subject: subject, html: html, }); console.log("Message sent: %s", info.messageId); return "Email sent successfully"; } catch (error) { console.error("Error sending email: %s", error); return
APPLE ID IS SAMEPlease try to understand my situation by an example.We have three plans on App Store.1. one month2. three months3. one yearI signed up as User A and purchased one month subscription successfully.I logged out from User A and signed up as User B and tried to purchase one month subscription, I got error that subscription is already active.Now again tried to purchase three months plan, purchase is successfull but what happened when I again logged in as User A, then his subscription didn’t get renewed. I am not getting any hook to cancel or expire the User A subscription.Is this default behaviour of the app store in-app purchases, Am I missing something or doing something wrong.Is it really not possible to purchase two subscriptions from same Apple ID and both got renew parallely.Please note these all cases are for same Apple ID.
Hi! We’re trying to get the subscriber’s IP Address & Country Code more frequently from the rev cat webhook and had a few questions around that. Looking at the docs (https://www.revenuecat.com/docs/customers/customer-attributes), it looks like we can update either `$ipAddress` or an `$ip` property.Which one of these properties would actually show up in the subscriber attributes section of a webhook request? Does it accept IPv6 or does it only accept IPv4 formats? I read in another doc that country code is automatically pulled from the IP. Which one of those properties is looked at when calculating the country code?Thanks for the help!Best,Kevin
Hi There,Is there an easy way to test the subscriptions on TestFlight version and see also the partner integration is correctly working for Adjust? Or do we have to go live with the iOS version on production? Cause this is a bit risky, we have changed all our subscription infrastructure with RevenueCat.And just need to be sure of All Trials, Trial Converted subscriptions cancellations and other events are working well, and also we should see them on Adjust dashboard with our TestFlight version if possible?
Hey, i have configured android base plan with just 1 offer to be trial 7 days but purchase package does not have introductoryPrice information on app store purchases everything works. I have backward compatible base plan but looks like trial is not, why ? I created it last week, is it because of that? In this case how to fix it ? Thanks
*RevenueCatITMS-91053: Missing API declaration For NSPrivacyAccessedAPICategoryUserDefaultsI have updated the revenuecat dependency to the latest 4.41.2Still there is no mention of the Userdefaults usage in privacy report. Can see privacy report on purchase history. Where as Userdefaults comes under additional data. Should I be manually adding it ? Because we will receive automated mail if we upload it without the complete info.
Hello. I’m a bit confused about how to organize everything and was hoping to get some tips for best practices.My app has:Three subscription tiers (Are these “entitlements”?) Basic Pro Platinum Two subscription types for each platform: Monthly and annually (Are these “products” ?) android_basic_monthly, ios_basic_monthly android_basic_annaul, ios_basic_annual android_pro_monthly, ios_pro_monthly ...and so on Feature sets in each tier that inherit features from lower tiers (Are these “offerings”?) Basic: Remove ads, custom avatar Pro: All Basic features plus Feature A, Feature B, Feature C Platinum: All Basic and Pro features plus Feature D and Feature E If the feature sets for each tier are not offerings, then how are they represented in a Revenuecat payload/metada and where can I manage them on Revenuecat?
Hello,I need to attach some custom metadata to a user’s payment (recurring subscription or a product one time purchase) and receive the data in my webhook. Is there anyway to do this? Sounds like a useful feature, but could not find any answer in the docsThank you
Hi All,We have all read the documents on how to delete a sandbox user, but couldn’t find an exact solution. We see 4 active users which are our tests https://prnt.sc/dxie0_1PhtCO , but cannot see or delete these users and cannot test our subscriptions from these devices. And stuck with it. :( Also cannot click and select this sandbox data https://prnt.sc/gMjo7P8ldX5z We also couldn’t find from the dashboard https://www.revenuecat.com/docs/dashboard-and-metrics/customer-history/manage-users where the manage users menu is 😥So if anyone can help it will be really appreciated 🙏
There is currently a non-subscription permanent product. Starting from today, after users place an order to purchase, the RC dashboard cannot track the purchase information of the product, and the corresponding user benefits are not unlocked within the app. Google Play backend can see that the user's payment was successful. No effect on subscription-based goods.
Hello community 👋 I have my app only in internal testing track in Google Play Console. Is it possible to start integration with RevenueCat at this stage? I.e. when my app at internal testing track at Google Play Console. For some reason FlutterFlow guide mentions closed track for Revenue Cat integration. But to promote my app to closed testing from internal testing Google now asks details about paid part of my app, also Google wants to review my app before promoting to closed track. Best regards,Oleksandr
Hello, I’m following this https://www.revenuecat.com/docs/integrations/webhooks#syncing-subscription-status however the link for the GET /subscribers documentation is broken (https://www.revenuecat.com/docs/api-v2/overview#subscribers) .Where can I access this information?
I made a paywall with localisations for multiple languages. Now I would like to “experiment” with some changes on this paywall but it is “life” in my app.Is there any way to duplicate a paywall (to use it for another offering) and experiment with changes on it?I dont want to make the second paywall from scratch.
Im using RevenueCat Flutter package to implement subscriptions . When i’ve uploaded a build to the internal testing track on Google Play Console and added myself as a tester everything works perfectly and i can subscribe. However when i’ve uploaded the exact same build to production, the app review team are seeing the attached error message. Anyone got any ideas why this is happening?
Hey,I am trying to access a user’s entitlements via the API (I am using the sandbox environment, i.e. I am using Xcode to simulate purchases).But I always get empty entitlements in the response and I’m not sure why. This is my call:curl --request GET \ --url https://api.revenuecat.com/v1/subscribers/<app_user_id> \ --header 'accept: application/json' \ --header 'authorization: Bearer <my_v1_token>'\ --header 'X-Is-Sandbox: true'And this is the answer{ "request_date": "2024-04-26T13:34:56Z", "request_date_ms": 1714138496699, "subscriber": { "entitlements": {}, "first_seen": "2024-04-26T11:24:56Z", "last_seen": "2024-04-26T11:24:56Z", "management_url": null, "non_subscriptions": {}, "original_app_user_id": "<original_app_user_id>", "original_application_version": null, "original_purchase_date": null, "other_purchases": {}, "subscriptions": {} }} However, the iOS app SDK makes t
I'm implementing subscriptions in my app using RevenueCat; however, I had already implemented consumable products, validating them on my server.When I added RevenueCat to the project, I noticed that when a consumable product was purchased, it was automatically consumed, and when the user visited the purchase verification screen (to consume it and gain the content), an error occurred on my server because the purchase had already been consumed by RevenueCat.I discovered that I can use Purchases.sharedInstance.finishTransactions = false to handle consumable logic as before. However, by doing this, I'll need to manage subscription logic on my server as well, and that's not what I want.After running some tests, I think I found a way to handle this. Let me explain what I did:When I initialize RevenueCat, I call Purchases.sharedInstance.finishTransactions = false. When I open my subscription PayWall, I call Purchases.sharedInstance.finishTransactions = true. This ensures that when purchasing
Hi,What timezone is used in the data export, I am assuming it is UTC but I just wanted to check.
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.