Get help with anything related to RevenueCat.
Recently active
I have a configured offer on Google Play with a 33 percent discount, and indeed, I receive the discounted value in the introPhase, but the number 33 does not come through anywhere. I had to calculate it, but I wouldn't want to do that. Is there any way to obtain the percentage of the discount being applied?
Not directly related to RevenueCat, but is there a way to make the monthly introductory offer expire in less than 7 days in the StoreKitConfiguration? I have subscription renewal rate set to “Any Renewal Every 30 Seconds” but 30 seconds go by and nothing seems to update. I did, at one point, change monthly to 30 seconds, and the subscription canceled, but it seems that the introductory offer was still in effect. Any way to get around this?
We have a premium product which we already offer a free trial period on, which auto-subscribes for a year at the end of the trial period.We are hoping to set up an “open day” for the app where our paywall is dropped for a day (or a small number of days). The logic is that all users will get the full experience of our premium app and not have the barrier of entering their card details. Does anyone have experience of implementing this (or something similar)?
Hello! Unfortunately I tested my lifetime IAP with my sandbox user and now I can’t get rid of it.When I get the customerInfo, it always becomes active, so I can’t test my app without active purchase.I tried to delete my revenueCat customer from the sandbox, but nothing happened, and the customer is still there. Is there a solution to disable/delete lifetime in-app-purchase?thanks,Peter
Hi all,I have completed, I believe, the integration of Flutter development with RevenueCat. My app has it’s own user system. I have the following questions:When the app user X make subscription, the payment is make by AppleID? If the payment is make by AppleID, when the app user Y login and try to make the subscription using the same AppleID, what will happen? Will all the app users login to the device with a same AppleID get the subscription? If I want all app users who login to the device with a same AppleID to get the same subscription, what should I do? Thank you
Assume I have montlhly and annual subscriptions that unlock some features. I want to charge some users more for the same subscription based on some user data. What would be a good setup for this to work with both app stores? Basically one user could pay more for the exact same features as another user.
I have been planning to have my app be available as only a subscription service: monthly or annual.I was expecting to have them sign in with OAuth from Google or Apple, using Supabase Auth to handle things like sessions. Then, once signed in/registered, update my own data `user` data table to store things about the user depending on their interactions within the app.Now I am trying to add RevenueCat. I see that in the docs about Users, Purchases.configure({apiKey: <public_sdk_key>}); will generate a random ID. Unfortunately, this will not tie into my backend of known users. So the docs give an option to include appUserID in the config. My question is now about the flow.Is it reasonable to have my subscription-only app open on the login screen, then user logs in, and once logged in, trigger the configure({apiKey: ‘123abc’, appUserID: ‘known@user.com’) API with the appUserId?Or I can call the RC `logIn()` method later too... Is there a downside to waiting to configure & loa
How to detect refunds that were made through Google? I tried Purchases.getCustomerInfo but this does not get updated. I thought of using Purchases.syncPurchases but the doc says “You should not call this programmatically on every app launch for every user. This can increase latency in your app and can unintentionally alias users together.”So the solution would be to call it sometimes? Or is there a better way?
We've discovered a very strange case in our app.Here's what we do:Our mobile app makes a purchase and sends a base64-encoded receipt file to our server. We send it to the /v1/receipt endpoint. We check the entitlements that are returned in the response, and we also respond to events from RevenueCat to manage access to our service.For some users, the following has occurred (user #1, user #2):/v1/receipt returned empty entitlements. No events from RevenueCat for this user have come in. However, Apple sends the correct event SUBSCRIBED.INITIAL_BUY:{ "notificationType": "SUBSCRIBED", "subtype": "INITIAL_BUY", ..., "data": { ..., "signedTransactionInfo": { "originalTransactionId": "$txId", ... }, "signedRenewalInfo": { "originalTransactionId": "$txId", ... }, "status": 1 }, "version": "2.0", "signedDate": 1698842056024}After investigating the situation, we found that the problem was with the receipts files we got. Here are the differences we foun
I'm attempting to retrieve active trials for a specific app using the Overview Metrics V2 API. However, the API response does not include the app name. How can I extract the app name from the response, which provides data on active trials and active subscriptions for the project?
When the data returns for Metrics in the v2 API, what is “Num tx last 28 days”? There is no explanation about this parameter anywhere I have searched. I am guessing number of trials?Maybe using the complete word rather than tx would be more helpful to a user.
Hello everyone,I have 2 apps in the google play store and two apps in the iOS App Store. Both are subscription based. I would like to offer users a discounted rate if they subscribe to both apps (in a single store). For example, iOS app 1 charges $36.99 a week and so does app 2. If the user subscribes to both, I would like to charge them around $50 instead of making them pay for both subscriptions. Any thoughts as to how to do this?
I’m looking at moving my app to RevenueCat but I’m wondering how the Pro plan pricing is calculated when it comes to VAT?(Sorry if this has already been answered somewhere, I can’t find it) Is the 1% of MTR calculated from:(Price + VAT) * 0.01 Price * 0.01 (Price + VAT)*(1-store_commission_rate) * 0.01 Something elseNumber 3 is my revenueNumber 2 is mine + Apple’s/Google’s revenueNumber 1 is mine + Apple’s/Google’s + the government’s revenue. In Europe number 3 is often 60-70% of number 1. So if RevenueCat calculates pricing based on number 1 then it is more like 1.5-1.7% of my actual revenue. Which may still be reasonable but something I would like to know when I compare alternatives.
I want to have a lifetime free premium offer for me and contributors. Instead of creating my own backend for this, I want to use RevenueCat as well.In AppStoreConnect, the longest subscription I can offer for free is one year, which is not sufficient.Therefor I made a non-consumable in AppStoreConnect and connected it to RevenueCat.I will implement my own logic to manage which promoCode is valid for a free lifetime subscription.I have the following two questions: Can I reliably hide this non-consumable from those who are not meant to see it? In AppStoreConnect there is no way to add logic to who can see it, so does that mean if I simply never show it in my app, nobody can access it? Because I know that for subscriptions, when going to cancel in the apple settings, one can see multiple offers, and I don’t want this non-consumable to show up in any place unless with my dedicated UI for it. Is the following implementation something that would work for what I’m trying to do? Get promo co
I build local development builds and the Revenuecat API works fine. Even with Expo Go, Revenuecat works fine, but it does not load data from Revenuecat when submitted to Test Flight and installed on my iPhone. Basically my offers are not shown at all. Here is the data loading component: const SubscribePackages = () => { const [packages, setPackages] = useState([]); const navigation = useNavigation(); const fetch_prices = async() => { const result = await Purchases.getOfferings() setPackages(result.current.availablePackages) } const subscribe = async(item) => { try { const {purchaserInfo} = await Purchases.purchasePackage(item) const purchase = await Purchases.getCustomerInfo() console.log('purchase: ', purchase) if(typeof purchase.entitlements.active['pro'] !== 'undefined') { await navigation.navigate('Account') } } catch (error) { console.log(error) } } useEffect(() => { fetch_prices() }, []) return ( <
Has anyone had this issue before? We emailed the RevenueCat team and they haven’t been able to help us. Thanks in advance!
Hi there!We have one subscription subscription_id, within which there are two base plans base_plan_id_1 and base_plan_id_2.After purchasing, our application sends a fetch token to our server, which we forward to /v1/receipt/:{ "app_user_id": "$someUserId", "fetch_token": "$someValidFetchToken", "is_restore": false, "product_id": "subscription_id"} The call is executed successfully, but in RevCat and all webhook events, it always shows that the base plan base_plan_id_1 was purchased, regardless of which actual base plan was bought.Example:User buys a Monthly subscription for 0.99 - it works and is tracked correctly User buys a Yearly subscription for 9.99 - it’s tracked in RevenueCat as Monthly for the price of 9.99 After studying the SDK, we tried sending the following variants, but nothing changed.Sending platform_product_id:{ "app_user_id": "$someUserId", "fetch_token": "$someValidFetchToken", "is_restore": false, "product_ids": [ "subscription_id" ], "platform_product_
Hi all - hope everyone is doing well!In our app, we have premium access available to users via in-app subscriptions. We are now introducing a ‘promo-code’ system which allows users who are both subscribed/not subscribed to redeem free premium access for a certain duration (1 week, 1 month, etc).For users who are not subscribed, we can simply grant them promotional access through the RevenueCat SDK. For users who are subscribed, the effect should be that their next billing date gets delayed by a certain duration. Our current approach is to transfer them onto a Promotional Offer within their existing product if they are on iOS, and transfer them onto a new product if they are on Android. In both cases, this promotional offer, and alternative Android product have an initial free period.Is this the correct approach to achieve this functionality? I am concerned that by doing this, a user will lose out on their already purchased subscription? For example, If i pay monthly, and have 3 weeks u
Our application only allows user to use it after logging in and purchases as well. The business logic does want to say that a purchase is only tied to one user ID (otherwise users can log out and create new account and connected the purchases to that new account and the log out and go back to the first account and do it again etc). Does this mean that Keep with original App User ID is the only options we should use?If so, how does work to manually transfer or assign purchases to a user say when they delete their account and decide to maybe come back later and restore it into a new user id but still unique?Any advice is appreciated. Thank you
I am using react native library/sdk on Android to complete a purchase and want to get clarification on how to know the purchase completed successfully. Using this example, i call await Purchases.purchasePackage(package)but this evaluates to false:typeof customerInfo.entitlements.active.my_entitlement_identifier !== "undefined"and it is considered not a successful purchase even though in the OS it said purchase was done ok.seems like my_entitlement_identifier is undefined.Any idea why this would happen?The resulting customerInfo has activeSubscriptions populated to it is telling me it was a success. What is the best way to know it was done successfully? Just compare the product id of the purchase with the one inside activeSubscriptions?productIdentifier coming from the promise is just the name of the subscription and does not include the base so that was not enough to tell..
I have implemented RevenueCat in my app and am testing the restore functionality across multiple devices. I use a device identifier as the RevenueCat user ID. This is a UUID generated when I first authenticate the app on first run.When I restore the subscription on another device, the subscription is transferred to the new app user id, and the old device no longer has a subscription to the content. I can get it back by hitting restore in the old device, but then the new device does not get the content too The Apple guidelines state:“Subscriptions must work on all of the user’s devices where the app is available.”How do I ensure that the subscription is available on all devices which the user owns, and has the app installed on? I don’t want to have the person perform a login step.
After following the suggested answer I am still facing the error of“ 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).”
Hello Everyone,I am currently utilizing the RevenueCat SDK in my Flutter project to manage in-app purchases, specifically, monitoring real-time changes in users' subscription statuses. The SDK has been instrumental in achieving this on the client-side, and now, I am looking to sync this data with my backend.In my backend (which is developed using the Elixir/Phoenix framework), I have a database table where I would like to maintain a record of whether a user is subscribed or not. The main goal is to ensure that the subscription status in my backend is always in sync with the real-time status on the client-side.Here are my thoughts so far:One way could be to send the subscription status from the client to the backend every time there is a change. However, I am concerned about the reliability and timeliness of this approach. Another approach could be to use webhooks, but I am not entirely sure how to set this up with RevenueCat and Flutter.I am very interested to hear if anyone has encoun
Hello, Let’s say I have a project called Flexifit that is both on the mobile and the web.I am using revenuecat to handle subscriptions on the iOs app, users are presented with a paywall before signin in, meaning that they could be a “pro” member without user account.After they create account, how do I reliably “attach” the revenue cat user to my database user? Also on top of that what uniquely identifies the revenue cat user? is it the original_app_user_id or is the email address that is used to login to the app store? I want a single source of truth so that I could verify their subscription status no matter what device they are using.The reason for this is that if user decides to go use the web version, I could check their pro status by calling my database and then checking what revenue cat user id belongs to the current user.
I don’t always want to have to develop features on my physical device and obviously we can’t interact with the Simulator on iOS, related to getting offerings for paywalls…what’s the suggested workaround to avoid having to set a subscription in development on simulator?
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.