Discussion and help from anything related to RevenueCat.
Recently active
Hey All,We’re noticed a bug appear on devices running iOS 15.4 having issues when trying to present the store code redemption sheet using the RevenueCat iOS SDK (3.14.1).Purchases.shared.presentCodeRedemptionSheet()The presentation sheet appears, however the expected redeem code page is missing. Instead we’re presented with a “Cannot Connect” with the retry button not performing any action.This is repeatable on all devices running 15.4 and only appears after the update from 15.3.1.Does migrating to the the most recent 4.1.0 release fix this issue for devices on iOS 15.4?Thanks
i have a flutter app that about daily horoscope and tarot cards and i’m trying to implement it but i’m kinda lost in the documents and tutorials i have purchase function page like this in code import 'package:flutter/services.dart';import 'package:purchases_flutter/models/offering_wrapper.dart';import 'package:purchases_flutter/purchases_flutter.dart';class PurchaseFlutterAPI {// initialize function to be called to initialize our purchase_Flutter plugin static Future init() async { await Purchases.setLogLevel(LogLevel.debug); }// gets a list of offerings from RevenueCat and stores it in a list for use in our app static Future<List<Offering>> fetchOffers() async { try { final offerings = await Purchases.getOfferings(); final activeOffering = offerings.current; return (activeOffering == null) ? [] : [activeOffering]; } on PlatformException catch (e) { return []; } }}and a subscripiton page in thisimport 'package:flutter/material.dart';impor
I received the following email from Apple this morning. Subject: Notification of Apple Developer Program License Agreement (PLA) violationWe are writing to inform you that your company is not in compliance with the Apple Developer Program License Agreement (PLA).Section 11.2 (Termination) states:(g) if You engage, or encourage others to engage, in any misleading, fraudulent, improper, unlawful or dishonest act relating to this Agreement, including, but not limited to, misrepresenting the nature of Your Application (e.g., hiding or trying to hide functionality from Apple’s review, falsifying consumer reviews for Your Application, engaging in payment fraud, etc.).Be aware that manipulating App Store chart rankings, user reviews or search index may result in the loss of your developer program membership.Please address this issue promptly. We carefully reviewed all our apps, metadata, etc and have not found anything in violation or non-compliant with the PLA. We are absolutely not engaged
Could not validate subscriptions API permissions error. I think I need to publish my application in closed beta in the play store to solve this problem. Can I publish it in internal beta or does it have to be closed beta?
I see this error for our production app for iOS,we are using 4.25.6 version of RevenueCat.Error message is: “The device or user is not allowed to make purchase”Does this occur because of parental controls?Our app is +17
I’m trying to follow this documentation https://www.revenuecat.com/docs/apple-app-storeBut it’s not clear to me what I can do in the simulator. To my surprise when I run my code in the simulator, it is able to retrieve all the products from appstore connect. So is the simulator considered the sandbox? I have not install StoreKit Configuration File why does it work? What exactly does StoreKit Configuration File do for the simulator? Do I need a sandbox tester account for the simulator?
none of the products registered in the revenueCat dashboard could be fetched from the play store
I have a paid Android app which I want to migrate to RevenueCat and also make free (converting each app purchase to an equivalent in-app purchase - but I’m not talking about the details of this here). Since the app is currently paid, I do a license check using Google Play’s License Verification Library. This library gives a userId which is unique for that user-app combination and will not change in the future even with uninstall-reinstall etc. This userId does not expose any information about the user (looks like some meaningless hash). At first glance, this looks like a good userId to set through the RevenueCat SDK. Even after the app is made free, the License Verification Library can be used to fetch the userId, and so also fetch any entitlements through the RevenueCat SDK. Now, this will work for the Android app, but a new userId strategy will be needed once I expand to other platforms. I’m not worried about this for now, however. Has anyone used this strategy before? Any issues I m
Hello fellow developers,If you're like me, you've embraced RevenueCat as a silver bullet for your in-app purchase needs. The proposition is compelling: let RevenueCat handle the complex, ever-changing landscape of app monetization so you can focus on what you do best — building an amazing app. In theory, this should make our lives easier. However, a pattern has emerged that challenges this notion: the API keeps changing, and it's forcing us to constantly revisit and update our integrations.Now, I'm all for improvements and new features. Progress is essential. But let's not lose sight of why we signed up for RevenueCat in the first place. The whole appeal of a wrapper like this is to abstract away complexity, not to introduce a new layer of maintenance.What's the Point of a Wrapper If It Unwraps Itself?The idea behind using a wrapper around Google Play Billing Library (or Apple's equivalent) is that we should be shielded from direct changes to these libraries. If Google or Apple changes
hello,I am using this on the sandbox testing that after 5 minutes subscription will be extended.It seems that after subscription extension, user will need to restore purchase manually as the entitlements checking for isactive will return to not active. Is it the expected behavior like when uninstall and reinstall the app behavior? Thx
Hello, I use Flutter.I get that there is a CustomerInfo to get the purchase dates of the user.My question is that, How can i retrieved list of all automatic subscription renewal dates of the user ? Thank you.
Hello World! I’m a developer on a React Native mobile app that uses Revenue Cat (v. 5.14.0) to paywall our upgraded features behind a subscription. We have received a report of a user being unable to purchase our subscription from Apple. This user has submitted a video recording of the issue and the purchase process begins as expected and then ends un-expectedly. The app does not crash but premium was not purchased.Our onPurchase implementation looks like this: (sorry for formatting)```const onPurchase = useCallback(async (subscription: PurchasesPackage | null) => {try {setLoading(true);if (subscription) {const { customerInfo } = await Purchases.purchasePackage(subscription);if (typeof customerInfo.entitlements.active[REV_CAT_ENTITELEMENTS.PREMIUM_PRO] !== "undefined") {Sentry.Native.captureMessage("Premium Pro Purchased");setLoading(false);checkPremiumProStatus();if (isLoggedIn) {setPreProModalVisible(false);} else {setSignUpModalVisible(true);}}}} catch (e: any) {setLoading(false
Currently, we plan to use observer mode to import iOS receipts from the server side into RevenueCat. However, we do not have currency and price information. I noticed in the receipt API documentation that it's possible to infer this information using store_country and ip_address. Where does this information come from? If I synchronize all iOS products with RevenueCat, will it obtain this information from the product details?
Is there a method to refund the saved money on each subscription as a percentage? (without having to use metadata, which would entail recalculating everything, for instance, when changing the subscription price from the Play Console).As in the following image from the doc
We have an app in production using RevenueCat for iOS and Android using the Cordova SDK"cordova-plugin-purchases": "^3.12.0" One of our users is reporting that they’re not able to subscribe. Looking in Sentry, they’re the only one receiving this error. The error is below: Uncaught (in promise): Object: {"code":3,"message":"The device or user is not allowed to make the purchase.","readableErrorCode":"PurchaseNotAllowedError","readable_error_code":"PurchaseNotAllowedError","underlyingErrorMessage":"Billing is not available in this device. DebugMessage: Google Play In-app Billing API version is less than 3. ErrorCode: BILLING_UNAVAILABLE."} The problem is, they’re saying that they’re able to subscribe to other apps with that same device, and have tried another subscription since they’ve received this error from our app. Device: SM-G998U (S21 Ultra 5G)Android Version: 13Installed from: Play StoreSideloaded: No Shouldn’t the fact that they’re on Android 13 and installed from the Pla
Our team is currently integrating the option to cross-grade between monthly ↔ yearly subsctiptions.Most of our Android users are on old Google legacy subcription plans. A few months ago, we updated to RevenueCat Purchases v6 and also created a new “unified” subscription with 2 base plans, one for monthly and one for yearly.So the subcriptions we have look like this:Legacy Subscriptions:app_regular_subscription (for monthly) app_regular_subscription_yearlyNew Subscription (used since we upgraded to RevenueCat v6 a month ago)app_subscription_unified (with 2 base plans: app-subscription-monthly and app-subscription-yearly) While testing different scenarios in Sandbox mode, I found out that there are some unexpected behaviors when crossgrading from app_regular_subscription (legacy - monthly) to app_subscription_unified:subscription-yearlyThe PRODUCT_CHANGE webhook event doesn’t come when the user effectively changes the current plan, instead, the webhook event comes roughly one second afte
Hello,I am wondering whether it’s possible to grant all users of my app a Premium entitlement for 1 month, lets say for the entire September. I want all existing and new users to receive this entitlement as long as it is still September. Currently my app has launched and there are already a few active subscriptions, the free 1 month premium would not really affect these users since most of them are already on trial but if they were to cancel for whatever reason, they should still have Premium for remainder of September.An alternative to this would be that new users would get 1 month entitlement from the day they download the app, however I don’t know how this would work for existing users.I also want to easily be able to apply the entitlement to all app users at once if possible and new users should also continue to get it.What is the best way to go about this?
Howdy!My iOS app previously had a single “Unlock Pro” non-consumable iap (not using RevenueCat), and now I’ve setup and implemented subscription plans using RevenueCat.It works great, except migrating the old legacy non-consumable purchase is not working. On the latest version of the iOS SDK, I hit this line when I call syncPurchases.Is it a bug that that code ignores non-consumable purchases? It was introduced by this PR, in December. I downgraded to iOS SDK 4.15.5 (before the release with that code) and syncing the legacy non-consumable purchase seems to have worked as expected.Would love some advice on this. Would you recommend releasing with the 4.15.5 version of the sdk?(also, THANK YOU for making the iOS sdk open source ❤️)
IGNORE: Was issue with simulator needing to be restarted.Im using flutter and just upgrade from flutter_purchase 4.11.1 → 5.5.0 and I’m getting aPlatformException(2, There was a problem with the store., {code: 2, message: There was a problem with the store., readableErrorCode: StoreProblemError, readable_error_code: StoreProblemError, underlyingErrorMessage: Error when fetching products. DebugMessage: An internal error occurred.. ErrorCode: SERVICE_UNAVAILABLE.}, null)When I call:await Purchases.getOfferings()Was working perfectly fine until I upgraded. I only have 1 time purchases configured no subscriptions so as I understand it the google migration stuff doesn’t apply to me. Do I need to add some new config setting in in androidmanifest.xml or build.gradle need something new to support billiing 5.0?Currently in my AndroidManifest.xml I have this:<uses-permission android:name="com.android.vending.BILLING" />
Hi, How could I block a delinquent App Store / Play Store account from making a purchase again? I already block the app user id in my backend, but nothing prevents the delinquent from signing up again (different email) and obtaining a new app user id.
Hi there,currently i am trying to implemented revenuecat to my flutter app. it was awesome and going so well. I am using custom app id and get the id from google sign in. To avoid creating anonymous id i implemented :await Purchases.configure(PurchasesConfiguration(withAPIKey: <my_api_key>)..appUserID = "my_app_user_id");Then User will login with google sign in and i implemented this :LogInResult result = await Purchases.logIn(<id taken from google sign in>);and it all going well and behave how it supposed to be. The problem comes when the the app restart and i need to know the user subscription status programatically when the app started, the code is:await Purchases.logIn(<id taken from google sign in>);if (customerInfo.entitlements.all["Premium Monthly"]!.isActive ==true) {//grant premium feature}and it turns null as the subscription checking is not active. but when i leave the login code behind like this :if (customerInfo.entitlements.all["Premium Monthly"]!.isActi
Hello everyone,I hope this post finds you well. I've run into a challenge with the RevenueCat platform and was hoping someone here might have encountered a similar issue and could provide some guidance. Situation:I've been trying to import my IOS in-app purchase products into the RevenueCat for dashboard. While I've followed the standard procedures and ensured that my product identifiers in Apple's App Store Connect match those I'm entering in RevenueCat, not all of my products are appearing on the dashboard, there are 20 products but only 10 products are showing up when import. The products are on IOS side is still not send to submission but I think it should show up on revenuecat regardless of their status. Steps I've Taken:Double-checked the product configurations in App Store Connect. Verified the integration of the RevenueCat SDK within my app. Refreshed the RevenueCat dashboard multiple times. Checked for any API errors (for those who might ask). Deleted all products from revenue
hi,I have an app that offers both Light and Pro subscriptions.A user subscribed to the Light subscription on 08.10.2022. Today, the user upgraded to the Pro subscription. The Pro subscription comes with a 3-day trial period. However, I've noticed that the expires_date is now set to approximately 18 days. Could someone explain this to me?
I'm testing in a sandbox environment using Flutter (Android).I purchased a non-subscription and then refunded it.Then, when I perform a restore, an error handling with the following content is returned:CodePurchases.restoreTransactions();LogI/flutter (12532): PlatformException(16, There was an unknown backend error., {code: 16, message: There was an unknown backend error., readableErrorCode: UnknownBackendError, readable_error_code: UnknownBackendError, underlyingErrorMessage: Backend Code: 7651 - The payment for this non-subscription product is not complete.}, null)W/BillingClient(12532): Error consuming purchase with token. Response code: 8E/[Purchases] - ERROR(12532): 🤖‼️ Error consuming purchase. Will retry next queryPurchases. DebugMessage: Item is not owned by the user.. ErrorCode: ITEM_NOT_OWNED.I know this error is on Google's side, but is there anything I can do on RevenueCat's side or my code implementation? Is there a way to resolve the error?
Hi!I’m trying to test restoring Purchases in sandbox mode. My app does not identify users, and, by not having a login screen, every one of them has an anonymous App User ID.I purchased a consumable item inside the app, and, as this grants a “benefactor” entitlement, tried to restore the entitlement after uninstalling the app. This did not work.How can I ensure that an anonymous user can restore entitlements that are granted via consumable products? Thanks !Renato
Already have an account? Login
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.