Get help with your SDK implementation.
Recently active
In the documentation for checking subscription status, it is said that for checking if a user has paid, we need to use the entitlement object like this:if (Object.entries(customerInfo.entitlements.active).length) { //user has access to some entitlement}However, this doesn’t work when a user has used a promo-code on Android. Instead we use:if (Object.entries(customerInfo.activeSubscriptions).length) {//user has access to some entitlement}Is that a correct way to check?
Hello,I’m having some difficulties with implementing Capacitor and Vue 3 for Android.Firstly, I want to figure out how to handle locked areas in my app upon boot. As I understand it, the app will send a request to the RevenueCat API to check the subscription status of each user IDs, which will return either a “subscribed” or “unsubscribed” response.I think the best approach would be to save this status in persistent storage and then develop the necessary logic to lock or unlock functions in my app.Could you please confirm if my understanding is correct?Additionally, regarding the Vue.js part: should I include this logic in the App.vue file?Thank you! if (Platform.is.android) {try {const revenuecat = await import('@revenuecat/purchases-capacitor');const Purchases = revenuecat.Purchases;const LOG_LEVEL = revenuecat.LOG_LEVEL;await Purchases.setLogLevel({ level: LOG_LEVEL.DEBUG });await Purchases.configure({ apiKey: process.env.REVENUECAT_API_KEY_ANDROID, appUserID: this.authSto
When do you plan to add flutter web support? There is a huge demand for it and it seems that you already have the tools to support it?
I recently received several iOS errors with error code 20 (PAYMENT_PENDING_ERROR). I read the documentation here, but am still unsure what’s causing this error and how to resolve it. The users don’t have parental controls on their devices.The RevenueCat docs mention “a user might choose to purchase your in-app product at a physical store using cash” - is this an option the user would have turned on somewhere in their device settings?Or is there a different reason this error could be occurring?
Hi all!We’re running an A/B-test with a monthly subscription and two pricings both pricings and have the same setup in the AppStore and RevCat but the second package has PACKAGE_TYPE CUSTOM or UNKNOWN whereas the first has MONTHLY as expected. What could be wrong with the setup?currentOffering.availablePackages.map((pkg) => {let priceTag = pkg.product.priceString;switch(pkg.packageType) { case Purchases.PACKAGE_TYPE.LIFETIME: priceTag += ' einmalig'; break; case Purchases.PACKAGE_TYPE.ANNUAL: priceTag += ' pro Jahr'; break; case Purchases.PACKAGE_TYPE.SIX_MONTH: priceTag += ' alle 6 Monate'; break; case Purchases.PACKAGE_TYPE.THREE_MONTH: priceTag += ' alle 3 Monate'; break; case Purchases.PACKAGE_TYPE.TWO_MONTH: priceTag += ' alle 2 Monate'; break; case Purchases.PACKAGE_TYPE.MONTHLY: priceTag += ' pro Monat'; break; case Purchases.PACKAGE_TYPE.WEEKLY: priceTag += ' pro Woche'; break; default: // UNKOWN und CUSTOM priceTag += ' pro Monat*'; break;}
Hello,We are currently using the React-Native SDK. The getCustomerInfo() method provides a PurchasesEntitlementInfo object that contains both the originalPurchaseDate and latestPurchaseDate.originalPurchaseDate: The first date this entitlement was purchased, in ISO8601 format. latestPurchaseDate: The latest purchase or renewal date for the entitlement, in ISO8601 format.Does the originalPurchaseDate refer to the start date of the current subscription cycle? Or does it represent the very first date the subscription was ever started?For example, if Customer A initially began a 1-month premium subscription on 2024-03-01, canceled in 2024-06, skipped payments in 2024-07 and 2024-08, and then resumed the same 1-month premium subscription on 2024-09-01, what would be considered the originalPurchaseDate?In this case:If the originalPurchaseDate is 2024-03-01, is there a way to identify the start date of the current subscription cycle? If the originalPurchaseDate is 2024-09-01, is there a way t
Hi all, I’m testing the possibility of extending a subscription.For Apple I managed to get it work by using the https://api.storekit.itunes.apple.com/inApps/v1/subscriptions/extend/ endpoint. This also produced a webhook event. For google I used the https://api.revenuecat.com/v1/subscribers/{app_user_id}/subscriptions/{product_identifier}/defer endpoint. Now, the subscription correctly got extended by the amount specified; using the https://api.revenuecat.com/v1/subscribers/{app_user_id} endpoint to fetch subscriber data I can see the updated expires_date, but I did not received any webhook events. I would like to receive that event so that the user transaction list is updated as well. Since I integrated ETL export so i can fetch all user transaction data and pour it in my database, missing this event information can produce inconsistent data. Is this normal?
I am using Unity version 2021.3.29f1 and I am making subscription purchases with IAP version 4.12.2. IAP version supports android payment library version 6.2.1. So I am using RevenueCat sdk 6.10.0. When I try to get a build after sdk installation, I get an error as “com.android.build.gradle.internal.tasks.Workers$ActionFacade”. When I uninstall the SDK, the problem is solved. What should I do?
Hello,I’ve read all the other community posts for this issue and can’t seem to get to the bottom of it. I’ve also been through the Why are offerings or products empty? post.I’m running a Capacitor app with NextJS using @revenuecat/purchases-capacitor 9.0.4. I have configured Purchases with an apiKey and confirmed with Purchases.isConfigured() and Purchases.getCustomerInfo() - both coming back as expected.When calling Purchases.getProducts({ productIdentifiers: [‘my-product-id] }) I’m just getting back an empty array, no errors.My Service Account Credentials JSON is verified and I even imported the subscription product from Google Play, so I know the connection is working ok. When viewing the product within the RevenueCat dashboard I see “Store status: Ok”. The subscription is both active and backwards compatible within Google Play.I have a closed track release with a tester added (myself) and still no luck when trying on a device. I have also tried using Android Studio with a physical
Im using React Native and have setup my Paywall to include an introductory offer if eligibleFor example - {{ sub_offer_duration }} Free then {{ price_per_period }} Unfortunately my Paywall does not show the introductory offer, even though I am eligible.This is true on TestFlight & SandBox. New users and existing. When I start the Apple Payment Dialogue, Apple actually shows me the introductory offer - So this seems to be a problem with RevenueCat. Does anyone have a solution for this?
Hi Everyone,In the case that a user has a payment problem or their payment is past due, I would like to help them navigate to a place where they can manage their payment info (in case they need to update their credit card number or something similar). The managementURL property just sends the user to a general area for managing subscriptions, but there is no way to manage payment details from there.Is there any way to send the user some place where they can view and update their payment details?TIA!-Mike D.
'm developing a subscription-based app on Flutter for Google Android and have run into a challenge with the platform's limitations on subscription management. Specifically, Google Play does not allow developers to programmatically cancel or modify subscriptions on behalf of users. Users must manage their subscriptions directly through the Google Play interface, which complicates the process of upgrading to a new subscription tier within the app.Challenge: Google Android’s policy requires users to manually cancel or modify their subscriptions, which can disrupt the user experience and reduce conversion rates for subscription upgrades.Proposed Solution: To address this, I am considering a hybrid approach using RevenueCat's customizable paywall feature. The idea is to still use the RevenueCat paywall for managing subscriptions but to augment this with additional UX elements that guide users through the necessary steps to manually cancel their current subscription before upgrading.Implemen
Probably related to Using React Native PaywallFooterView. There is a general lack of flexibility to control what happens behind this component.I attached a picture of my paywall running on an iPhone 6s simulator running iOS 15. There is no way to control the font scaling for this view, rendering it completely unusable for users who have bigger font sizes. As you can see, my custom paywall design is hidden behind this huge footer.I read that you are currently working on improving paywall design, but still wanted to report this use case so it’s taken into account.
Hello, `ERROR - The receipt is not valid. The purchased product was missing in the receipt. This is typically due to a bug in StoreKit`.I was recently rejected from app store review due to this weird RevenueCat bug ("react-native-purchases": "5.13.0") that I sometimes experience.I believe that I have set up all of my code correctly, but when clicking on a subscription purchase (using the purchaseProduct method - `const purchase = await Purchases.purchaseProduct(identifier, null, Purchases.PURCHASE_TYPE.SUBS);`) the request can fail and throw the following error. “The receipt is not valid. The purchased product was missing in the receipt. This is typically due to a bug in StoreKit.” It seems that this error will happen in patches 5-10 times in a row, then once I see one success, they are all successful from there forward (the purchase modal shows up with the product, and the user can subscribe to my subscription). Now when I go back into the app, I cannot reproduce the bug as it will be
Hi there - Since this topic has been brought up multiple times and left unanswered; I’d like to raise it again for Unity SDK. Android/iOS Native applications might be easier to add/remove code snippets, but with Unity wrappers accessing native code, it is much trickier and opens up potential pitfalls. Currently - our single source of truth for subscription revenue tracking is Adjust. We are using Unity’s IAP Package to complete the purchase and afterwards passing following data points to Adjust from the Client so that they can keep validate/track and attribute the revenue to the right marketing source.Apple transactionId originalTransactionId GooglePlay orderIdReference Adjust SDK Doc: https://dev.adjust.com/en/sdk/unity/v4/features/subscriptions#record-the-purchase-region-ios-onlyI’d like to retain Adjust still as single source of truth - my priority concern Revenue - Marketing attributions. However, RC SDK doesn’t give any option to access these variables and I need to find workaroun
I have an application on React native Expo. In this application I want to show Paywall.I use expo@51.0.36 and expo-router@3.5.23. OS - android. Same problem on physical device and emulator. import { View } from 'react-native';import RevenueCatUI from 'react-native-purchases-ui';const PaywallPage = () => { return ( <View style={{ flex: 1 }}> <RevenueCatUI.Paywall /> </View> );};export default PaywallPage;When I open a page with Paywall component, everything works, the component is displayed correctly. But if you go to another page and go back to the page with Paywall, the component disappears. What could be the problem?
so basically, I have a bare minimum paywall that is only set in English, and I want anyone viewing the paywall to view it in English. now the problem is when the device language is English everything works fine. but once the device language changed for example arabic the paywall packages will not show.device in english:device in Arabic: the issue only happen in old iPhone device (iPhone 7, ios 15.8.3)tried it on new iPhones it works I am no sure if it’s going to happen to other iPhon models what could be the problem?
Added this packages:purchases_flutter: ^8.1.6purchases_ui_flutter: ^8.1.6 Error: Purchases instance already set with the same configuration. Ignoring duplicate call.D/[Purchases] - DEBUG(21300): ℹ️ Listener setE/PurchasesUIFlutter(21300): Paywalls require your activity to subclass FlutterFragmentActivityI/flutter (21300): ----------------FIREBASE CRASHLYTICS----------------I/flutter (21300): PlatformException(0, Make sure your MainActivity inherits from FlutterFragmentActivity, null, null)I/flutter (21300): #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:648:7)I/flutter (21300): #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:334:18)I/flutter (21300): <asynchronous suspension>I/flutter (21300): #2 RevenueCatUI.presentPaywallIfNeeded (package:purchases_ui_flutter/purchases_ui_flutter.dart:41:20)I/flutter (21300): <asynchronous suspension>I/flutter (21300): #3 _configureSDK (package
I’m trying to implement Restore purchase for my first app using RevenueCat for Apple device. Want to understand how Restore Purchase work in RevenueCat When we call restore purchase, Does it check based on Apple account ID associated with that device / sandbox environment, or does it check based on the App User ID that we set for that session when initializing RevenueCat SDK? My paywall appears only after user has logged in if there is not any active subscription for that user, so RevenueCat SDK is always initialized with a valid App User ID. Let say a user login with email a@mail.com, make a subscription, then logout. He then sign up with a new email and log back in with email b@mail.com on the same device that uses the same Apple account ID. Would my understanding be correct that: He will see a paywall when logging back in with b@mail.com , since he is now being identified with a different App User ID which RevenueCat has not associated with any subscription yet If user clicks on Re
This has wasted so much of my time, I am starting to think it was a total mistake to go with revenue cat if they can’t even prune their repo and make it small and convenient for developers. https://github.com/revenuecat/purchases-iosI put that into Swift Package Manager and it sits for hours.
I’ve been using RC in my Flutter iOS and Android apps and it’s working beautifully. I’m now looking to add web support w/ Stripe and am hitting a road block. In Stripe, we can create a single product with multiple price points. This seems to be the suggested way to do things, according to RC documentation. However, it appears I should use the product ID to create a single product in RC. This precludes me from putting my Stripe products in different RC packages for the offering.For instance, I have ‘Lifetime’, ‘Yearly’, and ‘Monthly’ packages in the default offering. I added those as price options for the Stripe product. But RC requires the ‘prod_######’ ID to link to a product in Stripe, which doesn’t differentiate for the price options.Should I split it up into different products in Stripe? Or am I missing something?Thanks!
Hey all.I have a paywall that just displays a single IAP, which I imported to RC from Google Play as a consumable. The problem is - once that consumable was bought once it can’t be bought again. Checkout/payment google pay widget just doesn’t appear, I can press on CTA button as much times as I want - nothing really happens. My guess is that it can be caused by not consuming consumable but I would think that expected behaviour would be a widget appearing to say ‘You already have this item’, plus from what I see on this forum, it seems that RC automatically consumes any non-subscription IAP from Google Play, so I’m really confused here.Please, let me know if you can help in any way
Hi community !I am new at developping applications and I am currently using svelte that I will convert with capacitor to be able to use the app on iOs and Android.I did not see any of svelte SDK in the documentaiton, is there a way to integrate RevenueCat in my svelte projet ? Maybe with simple typescript ?Thank you for reading me :)
I’m trying to use the web sdk in my javascript code but I can’t even pass the initial stage. I’m loading the sdk from unpkg. Here’s my code:<script src="https://unpkg.com/@revenuecat/purchases-js@0.11.1/dist/Purchases.umd.js"></script><script>const api_key = “PUBLIC_API_KEY”const appUserId = “MY_APP_USER_ID” // Replacing with my own useridconst purchases = Purchases.configure(api_key, appUserId);</script>And just this gives me the error:Purchases.configure is not a functionWhat am I doing wrong here?
In the last 24 hours I have been having issues connecting to iOS store with revenueCat. here are the logs, from a “production” bundleERROR: 😿‼️ The operation couldn’t be completed. (RevenueCat.BackendError error 0.) error 21:32:38.863784-0600 IdentaFly WARN: 🍎⚠️ StoreKit 2 product request took longer than expected (83.86 seconds)error 21:32:39.133027-0600 IdentaFly WARN: 🍎⚠️ StoreKit 2 product request took longer than expected (84.12 seconds)error 21:32:40.346549-0600 storekitd AMSURLSession: [2e64_SK2] Session decoder failed. Result = (null); Error = Error Domain=AMSErrorDomain Code=301 "Invalid Status Code" UserInfo={NSLocalizedFailureReason=The response has an invalid status code, AMSURL=https://sandbox.itunes.apple.com/commerce/messages/app/inbox?bundleId=com.identafly.production&guid=00008110-0005046601E2801E&status=1, AMSStatusCode=410, NSLocalizedDescription=Invalid Status Code}error 21:32:40.346623-0600 storekitd AMSURLSession: [2e64_SK2] Task completed with error =
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.