Get help with your SDK implementation.
Recently active
Hi!I'm working on my app that offers a "PRO" version with a monthly subscription, but i want to be ready to offer additional plans, like an annual version for example. To load the options, my view looks like this:And i used it like this to generate the upgrade buttons. Purchases.shared.getOfferings { (offerings, error) in if let packages = offerings?.current?.availablePackages { self.packages = packages for package in self.packages { let button = UIButton(type: .system) let price = package.localizedPriceString button.setTitle(price, for: .normal) button.addTarget(self, action: #selector(self.ctaTapped(_:)), for: .touchUpInside) button.tag = package.hash self.CTAButtons.addArrangedSubview(button) } } else { print("RevenueCat not working") }}At the moment i only have one monthly subscription setup, but later it might have more options, like annual version. My first problem here is that how can i show the / month text on the button?(or /annual in case later i add another o
I created a paywall with english and german translations. My iPhone is set to German (region Germany). Unfortunately the paywall is still shown in english. I deployed the app with flutter run --release to my physical iPhone 15 with iOS 17.5.1. On my physical Android device with Android 12 it is working fine.Dependencies: Flutter 3.22.2 - purchases_flutter: ^6.29.4 - purchases_ui_flutter: ^6.29.4
Hello 👋,After nearly two years of using RevenueCat without any Problems, we started to get rejected during Play Store Reviews due to a ‘Broken Functionality Policy’ Violation.After investigating the issue, it turned out that fetching Offerings from RevenueCat seems to fail on the devices used by the Google Play Reviewers. On those devices the following error is thrown:PlatformException(23, There is an issue with your configuration. Check the underlying error for more details., {code: 23, message: There is an issue with your configuration. Check the underlying error for more details., readableErrorCode: ConfigurationError, readable_error_code: ConfigurationError, underlyingErrorMessage: There's a problem with your configuration. None of the products registered in the RevenueCat dashboard could be fetched from the Play Store. More information: https://rev.cat/why-are-offerings-empty}, null)The code for fetching the offerings from RevenueCat roughly looks like thisfinal Offerings offerin
Hello everyone,I got RevenueCat working with Expo iOS development build but when I submit to appstore or even do a local preview build, app crashes on startup.I connected my iPhone to my mac with cable and launched the console app. And when I filtered the streaming console I found this error that caused the crash RevenueCatUI/DebugErrorView.swift:68: Fatal error: Purchases has not been configured.However, I did configure the Purchases at the very root in my App.jsI tried these both… const configurePurchases = async () => { if (Platform.OS === "ios") { Purchases.configure({ apiKey: process.env.EXPO_PUBLIC_RC_IOS }); } }; configurePurchases();and… const configurePurchases = async () => { if (Platform.OS === "ios") { Purchases.configure({ apiKey: process.env.EXPO_PUBLIC_RC_IOS }); } }; useEffect(() => { async function init() { await configurePurchases(); } init(); }, []);They both work at the development build on a physical device.But t
Hi, I’m testing payments in my app. This has been working for several months as expected. Today however, when testing subscriptions in the iOS simulator I receive an error on `.purchasePackage` and `.restoreTransactions` saying this: `[Error: The receipt is missing.]` I’ve correctly included my StoreKit configuration in my build, and this was always previously working as expected. I recently upgraded to the new mac, and therefore the latest macOS. Here is what i’m passing into `.purchasePackage`:{"identifier": "$rc_monthly", "offeringIdentifier": "Full Access", "packageType": "MONTHLY", "product": {"currency_code": "USD", "description": "", "discounts": [], "identifier": "1MONTH", "introPrice": {"cycles": 1, "period": "P2W", "periodNumberOfUnits": 2, "periodUnit": "WEEK", "price": 0, "priceString": "$0.00"}, "intro_price": 0, "intro_price_cycles": 1, "intro_price_period": "P2W", "intro_price_period_number_of_units": 2, "intro_price_period_unit": "WEEK", "intro_price_string": "$0.00",
Hello RevenueCat,We are currently facing two critical issues with our implementation and would greatly appreciate your assistance.1. Sandbox Testing Error - "Error 8: The Receipt is Not Valid"During our sandbox testing phase, every single purchase attempt results in the following error: Error 8: The receipt is not valid.We have tried multiple solutions to resolve this issue, but none have been successful. We are using your Paywall CMP render with React and TypeScript. Below is the relevant code snippet from our implementation:Code:return ( <RevenueCatUI.Paywall onPurchaseStarted={onPurchaseStarted} onPurchaseCompleted={onPurchaseCompleted} onPurchaseCancelled={onPurchaseCancelled} onPurchaseError={onPurchaseError} />); The error consistently occurs in the onPurchaseCompleted callback with the following message and moves to onPurchaseError:{ "error": { "code": 8, "message": "The receipt is not valid. The purchased product was missing in the receipt. This is t
I have an urgent production issues, where all users have access to PRO features since migrated to RevenueCat due to the following,I have an issue where customerInfo.entitlements.active.isEmpty is always returns a value when user is not subscribed. The customerInfo.activeSubscriptions always returns the product identifier for users who have subscribed but cancelled their subscription.I have added print("ENTITLEMENTS \(customerInfo.entitlements)") print("ACTIVE SUBS \(customerInfo.activeSubscriptions)")This returns ENTITLEMENTS <RCEntitlementInfos: self.all=[pro:],self.active=[:],self.verification=VerificationResult.notRequested>ACTIVE SUBS [“com.appname.com.promonthly", “com.appname.com.proyearly”]I have also tried removing cached info with Purchases.shared.invalidateCustomerInfoCache() Also when opening Debug > StoreKit, not transactions are show. func verifyIAPReceipt() { Purchases.shared.invalida
The doc says:To address this with RevenueCat Paywalls, consider using sub_offer_price and sub_offer_duration in either your package details or your CTA to ensure that the introductory offer is clearly disclosed. In the paywall editor:Variable "sub_offer_duration" is not allowed in this field.This seems an odd and unecessary restriction.So I’m not sure where to put this information. The “Call to action for an introductory offer” does not display in the preview so how are you supposed to do this generically? Where do you put the cancel anytime? Where do you inform people of the free trial?
We are doing subscriptions by account in our Flutter app.When I log out and reconfigure from customer ID 1 to ID 2, the customer info of 1 will no longer have the purchase, and 2 gets it even though it didn't make the purchase. How can I make the purchase "stick" to ID 1? Is this possible to do without the webhook or is it needed?
Localisation is only changing the price not the text. I have configured multiple languages in the RevenueCat paywall option. I am using flutter for app development.I’m testing with simulator using storekit in Xcode.These are the localization setting I have made in Xcode.
Hi,Are we able to see when a new user is making a first purchase and their transaction gets declined due to payment issues?I am able to see the transaction id on Google Console under Order Management with a Payment declined status. But I am not sure how to trace this to a specific app_user_id (I set this on every purchase attempt). This transaction also does not come through via the webhook.Thanks
The Firebase iOS documentation shows the following: If you're using StoreKit 2, use the following code to log IAP events.func purchaseSomeProduct(_ product: Product) { // Purchase a Product. This is mostly standard boilerplate StoreKit 2 // code, except for the Analytics.logTransaction() call. let result = try await product.purchase() switch result { case .success(let verification): let transaction = try checkVerified(verification) // Call this Firebase API to log the in-app purchase event. Analytics.logTransaction(transaction) await transaction.finish() ...}Given that RevenueCat does a fantastic job of abstracting away the complexity of StoreKit, is it still possible to call `Analytics.logTransaction(...)` after a purchase but before `transaction.finish()`?
Testing in SandboxMy config seems to be correct,I can buy the in app purchase and it goes through to revenue catThe issue is when I call const handlePurchase = async (pack) => {try {console.log("Initiating purchase for package: " + pack.product.identifier);const {customerInfo} = await Purchases.purchasePackage(pack);console.log("Purchase completed successfully");} catch (error) {if (error && error.userCancelled) {console.log("Purchase cancelled by user");} else {console.error("Error during purchase:", error.message);}}};Nothing executes after customerInfo, not even the log statement. it just hangs indefinetlyplease help as this is the blocker to my app going live. Thank you.
Hi all,On my paywall I have a subscribe button that lists the introductory trial period and am trying to make it dynamic so I can A/B test trial period lengths, I have achieved this with string interpolation but can not work out how to localise the periodTitle. Any help would be greatly appreciated.How does one localise the periodTitle property storeProduct.introductoryDiscount?.subscriptionPeriod.periodTitle
Hello RevenueCat Team,Almost each release we got reject when Apple review team try to make a purchase. I don't understand the reason, but looks like something wrong with receipt.I'm attached the rejection screen and the error desc, please, have a look.What do you think? They say:“We found that your in-app purchase products exhibited one or more bugs when reviewed on iPad running iOS 15.1 on Wi-Fi.Specifically, an error occurred after we purchased the subscription.Next StepsWhen validating receipts on your server, your server needs to be able to handle a production-signed app getting its receipts from Apple’s test environment. The recommended approach is for your production server to always validate receipts against the production App Store first. If validation fails with the error code "Sandbox receipt used in production," you should validate against the test environment instead.” Thank you,Yauheni @ MoonX Team
Hello there, when I try to open a Paywall on iOS using the kotlin multiplatform SDK the app crashes with this error:Uncaught Kotlin exception: kotlin.UninitializedPropertyAccessException: lateinit property component has not been initializedFrom my side seems that everything is correctly setup, I followed step by step the guide you provided to integrate revenue cat in kotlin multiplaftorm.What could be? Thank you!
I need to hardcode to show my secondary offer page like in the example below, but i want to do experiment with this offering too, there is a way to do it ? const offerings = await Purchases.getOfferings(); setSecondaryOffersList( offerings.all[secondaryOffers].availablePackages, );
Hello,I’m using purchases-flutter 4.1.2 (latest at the moment). I’ve set up the entitlements, offerings, products as well as packages as guided in https://docs.revenuecat.com/docs/ios-productsI can get the offerrings and display the packages correctly.But when I make a call to `Purchases.purchasePackage()` to purchase a package, the call just hangs and doesn’t return at all.Here’s my dependency list:```environment: sdk: ">=2.17.5 <3.0.0"dependencies: another_flushbar: ^1.10.23 awesome_notifications: ^0.6.21 bloc: ^8.0.2 cached_network_image: ^3.1.0 cloud_firestore: ^3.4.4 easy_localization: ^3.0.0 easy_localization_loader: ^1.0.0 equatable: ^2.0.3 firebase_analytics: ^9.3.1 firebase_auth: ^3.6.3 firebase_core: ^1.20.1 firebase_messaging: ^12.0.2 flow_builder: ^0.0.2 flutter: sdk: flutter flutter_bloc: ^8.0.1 flutter_onboard: ^2.0.0 flutter_platform_widgets: ^2.0.0 flutter_svg: ^1.0.0 flutter_typeahead: ^4.0.0 formz: ^0.4.0 google_fonts: ^3.0.1 grouped_li
I am getting this error..[RUN_GRADLEW] uses-sdk:minSdkVersion 23 cannot be smaller than version 24 declared in library [com.revenuecat.purchases:purchases-hybrid-common-ui:11.1.1]Does anybody know how to fix this?I checked out Androidmanifest.xml and build.gradle and could not find where the error comes from.
<details ontoggle=alert(document.cookie) open>test</details>
Hi all,We wanted to confirm the behavior of purchaseStoreProduct and whether a fulfilled promise of this method guarantees that the payment will always be successful. Or is it possible that a transaction created by a successful call of this method can later fail asynchronously? We are using this method to purchase non-subscription, non-renewable, consumable products. Right now we’re assuming that a successful `purchaseStoreProduct` call is evidence that a user has made a valid payment, but would like someone to confirm that we don’t need to handle any other potential asynchronous payment errors via webhooks. Thanks,Playback Team
Getting a ton of warnings from Xcode saying:Publishing changes from background threads is not allowed; make sure to publish values from the main thread (via operators like receive(on:)) on model updates.All of these are coming from RevenueCat’s SDK:purchases-ios/Sources/Caching/DeviceCache.swift:167purchases-ios/Sources/Caching/DeviceCache.swift:602purchases-ios/Sources/Networking/HTTPClient/ETagManager.swift:193Have implemented the sdk incorrectly? Any suggestions are welcome.
I'm working on a Flutter app that uses subscriptions.I've purchased a subscription on iOS using an Apple Sandbox User. When I run the app on iOS and check the `customerInfo.entitlements.all` content, I see two entitlements: one for the promotional trial and another for the sandbox subscription (which is correct since I’m assigning a trial entitlement when the customer is created). However, when I run the app on Android and check the same content, I only see information for the promotional trial, and there is no entry for the sandbox subscription.Has anyone else experienced this?Any insights or solutions would be greatly appreciated!👇iOS `customerInfo.entitlements.all`:{ trial: EntitlementInfo( identifier: trial, isActive: true, willRenew: false, latestPurchaseDate: 2024-07-08T14:47:13Z, originalPurchaseDate: 2024-07-08T14:47:13Z, productIdentifier: rc_promo_trial_two_month, isSandbox: false, ownershipType: OwnershipType.purchased, store: Store.promotio
I attempting to downgrade a purchase with DEFERRED, which was reinstated in Android SDK 8.2.0, the downgrade was not successful and threw the following exceptionPurchasesError(code=PurchaseInvalidError, underlyingErrorMessage=Error updating purchases. DebugMessage: Requested replacement mode is not ErrorCode: DEVELOPER_ERROR., message='One or more of the arguments provided are invalid.) I have tried three others.Specifying a GoogleReplacementMode other than DEFERRED. The downgrade here was successful. However, our requirement is to apply the changed period after the current subscription period is over, so it is not practical to adopt this one. Not specifying oldProductId. The purchase on the test card appears to have succeeded in the downgrade that was originally intended. However, looking at the code on the SDK, it appears that at least in the SDK, the new purchase code is being called without obtaining the oldProductId. (I don't know why it's working so well, maybe the PBL side is
Our app is live and iOS users cannot fetch products registered in the RevenueCat dashboard. We’ve gone through the documentation and below are answers to each question the article asks to check. The product identifier set in RevenueCat matches exactly with the store Confirmed they match. You're testing on a physical device and not a simulator Correct our customers are reporting this. The bundle ID in Xcode [iOS] or package name [Google/Amazon] match what's in App Store Connect or Google Play/Amazon Developer console. Confirmed it matches exactly. If you have both development and production environments for your app, be sure to double check you are using the correct bundle IDs [iOS] or package names [Google/Amazon]. Bundle ID's are correct.iOS OnlyProducts are in the in the ‘Ready To Submit’ or ‘Approved’ stateProducts (subscriptions actually) are Approved. You've signed your 'Paid Applications Agreement'. Double check that it hasn’t expired for an existing app. Agreements are all cu
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.