Get help with your SDK implementation.
Recently active
Hi everyone, We have a Subscription page developed in Flutter that displays 3 Tiers of subscription - LITE, PRO (Monthly & Annual) and ULTRA (Monthly and Annual). RevenueCat’s single paywall only supports a single offering - current. And hence, the way that we’ve configured is that there are 2 offerings - PRO (with its PRO paywall) and Ultra (with its ULTRA paywall).When the page is loaded, in the initState() - we call:if (Platform.isAndroid) {await Purchases.configure(PurchasesConfiguration("xxx")..appUserID = userId);} else if (Platform.isIOS) {await Purchases.configure(PurchasesConfiguration("yyyy")..appUserID = userId);} To show 2 different Paywalls, there is a function that gets the respective offerings in initState():var _offerings = await Purchases.getOfferings();var _proOffering = await _offerings.getOffering('Pro')!;var _ultraOffering = await _offerings.getOffering('Ultra')!;setState(() {offerings = _offerings;proOffering = _proOffering;ultraOffering = _ultraOffering;}); I
sdk: 5.3.2 [RCPurchases configureWithAPIKey:]
When a user purchases a subscription we run the code that calls purchase():const getInfo = useCallback(async () => { try { const info = await Purchases.getCustomerInfo(); packageRef.current = info?.entitlements?.active?.[entitlementName]?.productIdentifier; const { isActive: isEntitled } = info?.entitlements?.active?.[entitlementName] || {}; setIsActive(!!isEntitled); if (isEntitled) { setSawPaywall(true); } return info; } catch (e) { throw new Error((e as Error).message); } }, [setIsActive]);const purchase = async (purchasePackage: PurchasesPackage) => { try { await Purchases.purchasePackage(purchasePackage); await getInfo(); } catch (e) { if ((e as Error).message !== 'Purchase was cancelled.') { throw new Error((e as Error).message); } } };After the subscription is successful, the app runs correctly, which navigates to the sign in page and after the user signs in, goes to
I’ve setup a subscription in Google Play console that includes an offering. While the RevenueCat SDK (react native) is able to access the subscription correctly, the free trial (introPrice) is missing (set to null). Offer settings in Google Play consoleNewly created offer, user as never purchased this subscription before. Offer received on the front-end{ annual: { identifier: "$rc_annual", offeringIdentifier: "ProTrial", packageType: "ANNUAL", presentedOfferingContext: { offeringIdentifier: "ProTrial", placementIdentifier: null, targetingContext: null, }, product: { currencyCode: "AUD", defaultOption: [Object], description: "", discounts: null, identifier: "yearly_pro_trial:yearly-pro-trial", introPrice: null, presentedOfferingContext: [Object], presentedOfferingIdentifier: "ProTrial", price: 124.99, pricePerMonth: 10415833, pricePerMonthString: "A$10.42", pricePerWeek: 2397068, pricePerWeekString: "A$2.40", pricePerYear: 124990000, pricePerYe
I have a valid Android subscription and offer setup in Google Play console. When I test this, the paywall shows correctly with correct values. When I proceed to buy the subscription, both subscription and offer are show in minutes. Is this because it’s a development build or is there something wrong? SubscriptionOffer
The RC Flutter SDK offers the .logIn method, which allows the current user to log in using only the appUserID.Since the appUserID is exposed on the client side, a malicious user could potentially obtain someone else's appUserID (e.g., through reverse engineering the app or intercepting network requests) and use it to impersonate that user. This could allow unauthorized access to premium content or features, etc..
Can I know if a subscription is cancelled using the Flutter sdk? I only found allExpirationDates property. Does the expiration date refer to the date when the subscription will end if not being renewed in the meantime? Does it also refer to the date when a canceled subscription ends its current active interval and becomes inactive? Thanks!
Hello!I am testing my flutter application on Sandbox environment. I useaddCustomerInfoUpdateListener in order to get customer info ( I call it on app initialization) and then I listen to any changes that may occur. However, if user is offline and subscription expires it does not trigger listener. User has still has access to app. I would expect, that user should loose access to app if subscription expiration date is before now. Should it work like that?From : Michael suggest to call getCustomerInfo. Is it necessary if I’ve just got all the customer information from listener?If it’s not a bug, but feature, what is your recommendation? Should I set timer myself in a code in order to take access away if expiration date passes?Thanks in advance for your help!
In my iOS app, if I click multiple times before the purchase window appears, the purchase window appears. several times. And if I managed to click 5 times, in the window that appeared I bought the purchase, after hiding the purchase window 4 times I will see a message that the purchase has already been purchased. I expected the following message in the console:INFO: 💰 Purchasing Product 'product_id' from package in Offering 'default'INFO: 💰 Purchasing Product 'product_id' from package in Offering 'default'INFO: 💰 Purchasing Product 'product_id' from package in Offering 'default'ERROR: 😿‼️ The operation is already in progress for this product.ERROR: 💰 Product purchase for 'product_id' failed with error: Error Domain=RevenueCat.ErrorCode Code=15 "The operation is already in progress for this product." UserInfo={NSLocalizedDescription=The operation is already in progress for this product., source_function=addPurchaseCompletedCallback(productIdentifier:completion:), source_file=Revenu
Is there a way to provide a callback in Flutter for the warning: 'WARN: User is already subscribed to this product. Ignoring.'? I tried using .onPurchaseError, but my callback was not triggered.https://github.com/RevenueCat/purchases-flutter/blob/main/purchases_ui_flutter/lib/views/paywall_view.dart#L31
Hi,do you have in plans to fully support Google Play Pass? I don’t see clear solution how to manage it using Revenuecat. Previously I used approach described here with .reset() and restoreTransactions() approach, but it caused really strange problems and user ids multiplications. If the app relies on a purchase management solution that takes 24 hours to sync entitlements, the app either needs to use a different product management solution. It's not acceptable for Google Play Pass to have a 24 delay for entitlement revocation.
Is it possible to(1) customize the package title? Just Annual or Monthly is displayed but I want to add something like “Annual (2 months free)”(2) customize font size, family, etc?(3) create my own paywall widget in flutter? and just return it instead of the one created in the rc dashboard?Regarding (3):People who use RC typically already build an entire app. Creating a paywall screen on their own is usually very easy and quickly done. However, the process becomes frustrating when trying to fetch product details from Apple and Android. It would be extremely helpful if the RC SDK offered APIs for directly retrieving product details from these platforms. This would simplify the creation of custom paywalls a lot.. creating ones own paywall from scratch with the native language one uses would be very nice.. Please consider adding this feature, and if you do, it would be great to prioritize Flutter since that’s what I use. ^^
Hi there,I am currently display my default paywall using .sheet & PaywallView() however I am having issues with the view refusing to compile if I attempt to add PaywallView(offerings:) parameter.In my class that connects to the sdk I have tried adding: Purchases.shared.getOfferings { (offerings, error) in if let packages = offerings?.offering(identifier: "experiment_group")?.availablePackages { self.display(packages) } } but with this I just get the error that no member “display” exists, no matter what I do.Have I missed something? I’m still very new to paywalls so please excuse my lack of experience. I should add, I am targeting iOS 17 & using SwiftUI. Many Thanks, Billie
By default, our app's billing grace period is turned off. However, we're considering turning it on to retain customers who may be experiencing temporary billing issues or errors. Should we make this change, we're wondering whether we need to make any modifications within the app, or if RevenueCat will handle it automatically. Additionally, if we activate the billing grace period through the AppStore portal, are there any potential issues we should be aware of?
I am using Revenuecat for my APP to handle payments and paywalls. I am using purchases_flutter: ^8.1.0purchases_ui_flutter: ^8.1.0I am seeing 100% failures on payment made through UPI on Google Play Store in India. Do I need to do anything on my end to make it work?
Is there any way to test different end-user currencies to see how the UI handles different storeProduct.priceString values for different countries? (Obviously, without needing to open actual Google accounts in different countries.)Does storeProduct.priceString always show the actual/local currency symbol & price of what the user will see in the Play Store or App Store after Purchases.purchasePackage is callled?Thank you.
Since last month my display prices from the class store product displaying wrong currency and prices. I’m currently in the netherlands, so my currency should be EUR, but instead it’s showing RY - currency from turkey. I have not changed anything in my default phone settings. I have been investing this issue for the last 2 weeks, but there are no similar cases. Is there anyone who could help me? I’m testing in sandbox mode on revenuecat and have some information about this my sdk version is 6.5.0:Last Opened In the last dayUser Since 2023-06-15 at 07:31 AM UTC (22 minutes ago)Last Seen Platform Version android 33Last Seen SDK Versionnative 6.4.0Last Seen Locale en-NL Purchase information:"country_code": "TR","currency": "TRY","environment": "SANDBOX","event_timestamp_ms": 1686815472617,"expiration_at_ms": 1686815808143,"is_family_share": false,"is_trial_conversion": false,"offer_code": null,"price": 15.90344831154524,"price_in_purchased_currency": 374.99,"product_id": "subscription_3_m
I have set my consumable products on Revenu-cat and also set them as multi-quantity on google-play. However when try to purchase on the revenuecat no-code paywall, I see debug log with following info. D/RevenueCatUI(17244): Ignoring purchase request for already subscribed package Not sure what’s going on
I'm experiencing an issue with the paywall on our React Native app when viewed on an Android tablet in landscape mode. As shown in the attached screenshot, the paywall image fills the entire screen, making it non-scrollable. This issue prevents users from seeing or interacting with the subscription options, essentially rendering the paywall unusable.We are using the following versions"react-native-purchases": "7.28.1","react-native-purchases-ui": "7.28.1"I saw a similar issue reported a while back, but it was for the Android SDK. It seems like the React Native version hasn't been updated to utilize the fix for this problem? Here’s the link to the previous discussion: Android paywalls in landscape are not displayed correctly.
Hi!I’ve been trying to add RevenueCat to my App, I’ve managed to successfully setup subscriptions, and test them using the StoreKit Configuration file. Works like a charm.I’m now working on adding a Lifetime non-consumable in app purchase. Purchasing works well. But I can’t make the refund works.Here is my flow:- Start the app- Buy the Lifetime IAP- Wait a bit- Issue a refund via the Xcode StoreKit test panel.The refund seems to be process correctly, I see this in the dashboard for the user:Unfortunately the Entitlements for the user is still active.<EntitlementInfo: "identifier=Pro,isActive=true,willRenew=false,periodType=PeriodType(rawValue: 0),latestPurchaseDate=Optional(2024-08-29 12:36:23 +0000),originalPurchaseDate=Optional(2024-08-29 12:36:23 +0000),expirationDate=nil,store=Store(rawValue: 0),productIdentifier=#####.#######,productPlanIdentifier=null,isSandbox=true,unsubscribeDetectedAt=nil,billingIssueDetectedAt=nil,ownershipType=PurchaseOwnershipType(rawValue: 0),verificati
I have a customer that has purchased a subscription in the sandbox, and when I call the V1 get subscriber endpoint, it does not return this subscription entitlement: { "request_date": "2023-12-15T19:43:21Z", "request_date_ms": 1702669401141, "subscriber": { "entitlements": {}, "first_seen": "2023-12-15T19:32:20Z", "last_seen": "2023-12-15T19:32:20Z", "management_url": null, "non_subscriptions": {}, "original_app_user_id": "823d3d4b-1760-f789-709a-48e47cf96b4e", "original_application_version": "1.0", "original_purchase_date": "2023-12-15T19:32:46Z", "other_purchases": {}, "subscriber_attributes": { "$attConsentStatus": { "updated_at_ms": 1702668767953, "value": "notDetermined" } }, "subscriptions": {} }} I’m assuming that this is returning the non-sandbox data. This was working as expected before and seems to have started failing recently.
The paywall and offerings work perfectly in the test environment, and Apple's testing also shows everything functioning correctly. However, once the app is approved and goes live in production, the offerings no longer appear. This means I now have a live app, but users can't make any payments because they can't see the offerings. could this be a configuration issue. i followed all instructions
I want to track app installs, but currently, I am not receiving any install information on iOS. I found the this for a solution in revenueCat document: https://www.revenuecat.com/docs/integrations/attribution/facebook-ads#track-install-and-usage-events Track Install and Usage EventsAs noted above, you'll need to disable all client side tracking of revenue to prevent double counting of revenue in Facebook Ads Manager. To continue tracking install and usage events, you'll need to call Facebook's 'activate app' event after configuration:-Swift// disable automatic trackingFBSDKCoreKit.Settings.shared.isAutoLogAppEventsEnabled = false// optional: call activateAppFBSDKCoreKit.AppEvents.shared.activateApp() What is the equivalent of this code in flutter?
I am developing my app with React native plus Expo.It provides an inapp subscription using RevenueCat.The app works well on my local PC and I could successfully purchase subscription plans.These are the commands I built the local version :$ npx expo prebuild$ npx expo run;android --device$ npx expo start --dev-client After the local test, I built a PRODUCTION profile of my app by the following command$ eas build --platform android --profile production Then I launched it on the close-test track of the Google Play console.But the app does not work for paywall screen.Actually, it displays the home screen, and it gets stuck when I click the purchase button whichis supposed to display packages, offerings, or whatever on the next next paywall screen. Any idea about where can I see to address this issue?Thank you in advance.
I'm just curious if I signed up for a sandbox API not a production API because the offerings work perfect in testing but when it goes to Apple production after approval, it does not work Does anyone know if there's that is two different environments?
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.