Discussion and help from anything related to RevenueCat.
Recently active
Hi,We have a back-end protecting routes based on the subscription status of the user. If user has a subscription, middleware allows to access. To ensure it, after purchase or any other transaction, Revenuecat sends webhook to our server and we are comparing the expiration dates and change the subscription status of user on our server by sending Revenuecat rest api.However, in the initial subscription, if user make purchases and tries to see premium routes immediately in which webhook doesn’t recieve to our server; user may not see the premium content. In this case i have two questions:Revenuecat paywall waits webhook to be sent to be closed? If paywall waits for sending webhook to be closed, no problem. If not, should we make a control on our server by sending request to Revenuecat rest api when the paywall result is purchased?What should our approach be? We know that we mention about very small milliseconds but we have to consider each possibility that may affect the user experience.
Hello,I'm curious if it's feasible to incorporate custom logic between the "call to action" button and the purchase action on RevenueCat paywalls. Here's a more detailed explanation of what I have in mind for my implementation: Upon a user selecting a subscription product on the paywall and tapping the "call to action" button, instead of proceeding with the purchase immediately, I aim to present the option for users to "sign in with Apple." Following successful sign-in with Apple, the purchase process would then proceed. Otherwise, if the user chooses not to sign in, the purchase action would not proceed. Is it technically achievable to implement such functionality within RevenueCat?Many thanks in advance!
Hello,I'm interested in incorporating custom variables for each package within RevenueCat paywalls. Is this possible? To clarify, let's consider a scenario with two packages displayed on the RC paywall, namely pkgA and pkgB. For each package, I aim to integrate two custom strings: strA1 and strA2 for pkgA, and strB1 and strB2 for pkgB. In this context, these custom variables (strA1, strA2, strB1, strB2) are distinct from the variables mentioned on your "Displaying Paywalls" page. Essentially, I'm seeking complete flexibility in defining the values of strA1, strA2, strB1, and strB2.Could you provide guidance on how to implement this?Thank you in advance for your assistance.
Hello!We use MixPanel as our source of truth and we have created a cohort with certain filters to get all the active subscribers. We have followed the same filters as RevenueCat but still the numbers doesnt quite match:Active Subscriptions shows the number of unexpired, paid subscriptions at the end of each period charted.For the current period, the number indicated is the current active subscriptions. Subscriptions that have auto-renew disabled are still counted in Active Subscriptions. Refunded subscriptions are counted as active between their start date and their refund date.Active subscriptions is important as a measure of the number of individual, recurring relationships you are currently serving and is a proxy for the size of the business. So I would like to know if there is someone how has made a cohort or report that gives the same results as in RevenueCat that can share it with us.This is the cohort we created:RevenueCat - Active Subscribers CohortJust for you to know, we have
My app retrieve subscription status when the app startsconst customerInfo: CustomerInfo = await Purchases.getCustomerInfo(); console.log('current time', getDateTimeDisplayString(new Date().getTime())); console.log('customer info when loading the app', customerInfo);however, it always loads the last cached data in my ios simulator LOG current time 2024-04-22 19:35:32 LOG customer info when loading the app {"activeSubscriptions": [], "allExpirationDates": {}, "allExpirationDatesMillis": {}, "allPurchaseDates": {}, "allPurchaseDatesMillis": {}, "allPurchasedProductIdentifiers": [], "entitlements": {"active": {}, "all": {}, "verification": "NOT_REQUESTED"}, "firstSeen": "2024-04-22T23:30:56Z", "firstSeenMillis": 1713828656000, "latestExpirationDate": null, "latestExpirationDateMillis": null, "managementURL": null, "nonSubscriptionTransactions": [], "originalAppUserId": "56de1eda-4738-a098-55b8-041900dc5f37", "originalApplicationVersion": null, "originalPurchaseDate": null, "originalPurch
As per subject, I am testing revenue cat integratoin on the ios simulator, but the prices are only showed in USD currency code.Any idea? My app is availble in multiple language or country. It is a limitation of the simulator and then on real device in production will be ok? In such a acase how revenue cat will know the price? Myabe did I miss configuration on Apple side? Thanks for any support.Here a sample if what I get rom the revenue cat api: LOG {"identifier": "$rc_monthly", "offeringIdentifier": "base", "packageType": "MONTHLY", "product": {"currencyCode": "USD", "description": "Remove Ads", "discounts": [], "identifier": "01_month2", "introPrice": null, "price": 2.9899999999999998, "priceString": "$2.99", "productCategory": "SUBSCRIPTION", "productType": "NON_CONSUMABLE", "subscriptionPeriod": "P1M", "title": "1 Month"}} LOG {"identifier": "$rc_three_month", "offeringIdentifier": "base", "packageType": "THREE_MONTH", "product": {"currencyCode": "USD", "description": "Remove Ads
I am using Android SDK, revenuecat version 7.0, and this is my code (kotlin):Purchases.sharedInstance.getCustomerInfoWith( fetchPolicy = CacheFetchPolicy.FETCH_CURRENT, onError = { error: PurchasesError -> log("END with ERROR = $error") }, onSuccess = { customerInfo: CustomerInfo -> val purchased = customerInfo.entitlements["premium"]?.isActive log("END with SUCCESS: isActive = $purchased") })Consider following scenario:Before purchasing a product = getCustomerInfo properly returns no active entitlements (as I never purchased the product) After I purchase the product = getCustomerInfo properly returns existing active entitlement (as I just purchased product) After I refund my purchase in Play Console (including checked checkbox "Remove entitlement") = getCustomerInfo incorrectly still returns I do have active entitlements. Even after hours, even after I specifically used fetch pol
HiI’m trying to grant promotional with REST API.(https://api.revenuecat.com/v1/subscribers/{app_user_id}/entitlements/{entitlement_identifier}/promotional) docs: https://www.revenuecat.com/docs/api-v1#tag/entitlements But I received error with 404.[raw error message]{status: 404, statusText: 'Not Found', headers: AxiosHeaders, config: {…}, request: ClientRequest, …} What could be the cause of this error?[Already Confirmed Topics]User exists in project (with `https://api.revenuecat.com/v1/subscribers/{app_user_id}`) Entitlement exists in project (with `https://api.revenuecat.com/v2/projects/{project_id}/entitlements/{entitlement_id}`) Path is valid (A generic "Page not found" error message appears when adding an unnecessary character to a path.) The error does not occur only with a specific user. The error does not occur only with a specific entitlement.
Forgive me if this is a rookie question but I can’t seem to figure out how to customise the text of the subscription. Where can I set the text that will be displayed here (red highlight on screenshot)? Is is possible to show a different text for the Sandbox accountExample shows iOS but I also want to set this on Android. Thanks!
I have an offering with three packages. How do I set the package name & set a custom description for each package? There is only a limited number of things I can select from the drop down menu. I need to explain what each product is exactly in my paywall. Thank you.
Hi I’ve setup my Paywall successfully and integrated into my app. However I only see the english version of my Paywall. My sandbox user country is set to Germany. And I’ve edited the Paywall template for german.The data coming from appstoreconnect is correct since I see the description in german. But the Paywall template does not change. Did I miss something? I’m using React Native if that matters.Thanks in advance!
It would be great to have a direct Asapty integration. It’s possible via webhooks right now, but it would be so much nicer to just have a button. From my research, they seem like a fantastic ASA provider.
Hello RevenueCat Community,I'm encountering an issue where, despite setting up a closed testing program and adding my email to the list, I'm still being prompted for credit card information when installing the app on my phone. This behavior persists even though I've successfully joined the testing program through the provided link.Details:Platform: Android using flutter SDK Version: purchases_flutter: ^6.26.0 Testing Program Setup: I've created a closed testing program in the RevenueCat dashboard and added my email to the list. The program is configured to not require payment information.Issue: When I install the app on my phone using the same email, the system still requests credit card information. This behavior is unexpected since I'm part of the closed testing program.Steps Taken:I've ensured that the email used in the app matches the one added to the testing program. I've tried clearing the app's cache and reinstalling it to no avail. I've verified that the RevenueCat SDK is corre
When calling the https://api.revenuecat.com/v1/receipts endpoint I’m getting a 400 error as if I’m not sending the X-Platform header const revenueCatBaseUrl = 'https://api.revenuecat.com/v1/';const url = `${revenueCatBaseUrl}receipts`;const headers = { 'Authorization': `Bearer ${revenueCatApiKey}`, 'X-Platform': 'stripe', 'Content-Type': 'application/json'};const data = {app_user_id: uid, fetch_token: subscription}const response = await axios.post(url, data, {headers: headers});return response.status === 200;{code: 7000, message: "Invalid Platform."}Is anyone else experiencing similar issues?
Let’s consider a scenario where customer subscribed for monthly plan. But after few days, customer cancelled the subscription. Shouldn’t customer be allowed to access to the pro content till the period subscription ends ? Whats the right way of handling such situation ? Do we refund and immediately close the subscription or whats the best we do when user cancels the subscription ?
W/[Purchases] - WARN(13858): ! Unable to start a network connection due to a network configuration issue: https://api.revenuecat.com/v1/subscribers/gi61cjv4sSYwVJVm9YyqLJzJYet2/attributesE/[Purchases] - ERROR(13858): 😿‼️ PurchasesError(code=InvalidSubscriberAttributesError, underlyingErrorMessage=Some subscriber attributes keys were unable to be saved., message='One or more of the attributes sent could not be saved.')E/[Purchases] - ERROR(13858): 😿‼️ There were some subscriber attributes errors: [SubscriberAttributeError(keyName=$androidId, message=Android ID cannot be modified.)]
Hello there!I have noticed that the revenuecat events differentiate in behavior for android and ios but i did not find a specific explanation for that. If a subscription is canelled and a user purchases again, a renewal event is sent for ios but an initial_purchase is sent for android. Is this correct behaviour?Ive seen that initial_purchase events are sent for first subscriptions or if a “lapsed” user resubscribes. What exactly is a “lapsed” user? The documentation says an active user is someone who interacted with revenue cat in the past 28 days. But then again android is sending initial purchases. I have not come to a conclusion with this. I hope anyone can help me out, thanks!
I have verified that I can purchase products in the Amazon AppStore Live App Testing using the Unity SDK in version 6.9.3.https://github.com/RevenueCat/purchases-unity#amazon-support> This version of the SDK doesn't have support for Amazon Store. If you would like to use our SDK with Amazon Store, use the version tagged amazon-latest and follow the AMAZON-INSTRUCTIONS.md docs to get set up.However, the GitHub readme says I need to use the version tagged "amazon-latest".Is the information in the GitHub readme out of date?
While trying to create a paywall, I get this error, even though the above shows that each package has a product attached. Not sure what I’m doing wrong here 😅
When trying to upgrade an existing Play Store subscription in our React Native mobile app, I often get a "The device or user is not allowed to make the purchase" error, and the upgrade fails. Eventually, using another payment method, the upgrade succeeds. I’m unsure if this is an error with my payment method, RevenueCat code, or something else.Steps taken on a Samsung Galaxy A14 in a live production app with real purchases:Purchase sakura_gold_v1a:monthly-5-autorenewing subscription with Apple Card credit card info entered into Play Store - succeeds. Upgrade to sakura_diamond_v1a:montly-19-autorenewing subscription with Apple Card - fails. Retry - fails. Apple card shows no declined transactions that require approval Play Store app is up to date Play Store “Require authentication for purchases” is on Google payments activity shows Declined transaction Error logged in app: code: 3, message: The device or user is not allowed to make the purchase., name: Error, nativeStackAndroid:
Fetched all offerings with accurate details Create a closed testing release with testers (Successfully published) Using a real device with logged in email in the play store that is included in the testersAll of the necessary steps to test the subscription feature have been done but still I’m getting : D/[Purchases] - DEBUG(10299): ℹ️ Vending Offerings from cacheD/[Purchases] - DEBUG(10299): ℹ️ Checking if cache is stale AppInBackground falseI/flutter (10299): PurchasesErrorCode.productNotAvailableForPurchaseErrorI/flutter (10299): The product is not available for purchase.
I’m working on the best way to handle errors in my app, referencing the revenuecat error documentation.It seems to me that there are broadly four classes of error:`PurchaseCancelledError` - which is simple enough to handle in the UI `NetworkError` - in which a purchase definitely didn’t go through, and I can give my users a chance to retry the purchase Errors related to my code and configuration - in this case, I should display an error message, send an alert to our error logging system, and not allow the user to proceed. And `StoreProblemError`The last category of error I find puzzling - `StoreProblemError`. The documentation says that “If everything was working while testing, you shouldn't have to do anything to handle this error in production. RevenueCat will automatically retry any purchase failures so no data is lost.” So if I’m reading this correctly, the user will not have an active subscription made immediately, but they will have a subscription made eventually because the rev
Just launched my app with subscriptions on Monday.On Tuesday I had an iOS user successfully subscribe to a Monthly plan.Now, Wednesday morning, I’m seeing this error in my Sentry dashboard. Not quite sure what to make of this. Clearly things were working well enough ~12 hours prior that someone was able to subscribe - and I haven’t touched/changed anything since.Only the one error / one user so far - but I’m concerned it could continue.
How does RC recommend anyone already using mobile to get the existing purchases and subscriptions for users on a Flutter Web app given no RC Flutter Web SDK. I want to ensure subscribers on Mobile can log in on Web and their subscriptions are retrieved. I see there is the Revenue Cat API, and also Firebase Integrations. I want to understand what the best practice is. Thanks
IntroThis vulnerable can be used on all app uses revenuecat subscriptions verification. All code here wrote on JavaScriptEntitlement’s bugThis vulnerable based on getting entitlement’s s from server, exampleconst params = {url: "https://api.revenuecat.com/v1/product_entitlement_mapping",timeout: 5000,headers: $request.headers}delete params["headers"]["x-revenuecat-etag"]$httpClient.get(params, function(errormsg, response, data) {if(errormsg) {err(errormsg)}else{mapping(data)}}) SSL pinningSSL pinning is mechanism to stop sending response if traffic was capturing .Recommendation: add SSL pinning to all app requests
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.