Discussion and help from anything related to RevenueCat.
Recently active
Hello, everyone,I hope you're all doing well. I'm facing an unfortunate issue with my Apple Developer Program membership that was suddenly terminated. I received a generic email from Apple, stating that my membership was revoked, but no specific reason was provided for this action.I appealed the decision, offering all possible explanations and commitments to adhere to guidelines, only to be met with a reply stating that the decision is "final" and no subsequent appeals will be processed.Has anyone here faced a similar situation? Are there any steps that can be taken to understand the reason for termination when Apple doesn't disclose it? Is there a way to open a dialogue with Apple, even when they've stated that their decision is final? Would publicizing this issue through social media or blogs be advisable?This is a particularly trying time for us, as we are recovering from a recent earthquake and our app is our sole source of income.Any insights, advice, or shared experiences would b
Hi, I want to purchase a specific subscription offer from google play.This should work as described here: https://www.revenuecat.com/docs/subscription-offers#more-control-over-offer-selection and here: https://github.com/RevenueCat/cordova-plugin-purchases/releases/tag/4.0.0 I did my setup for Ionic(Vue) + Capacitor as described here (https://www.revenuecat.com/docs/ionic)I have the following dependencies installed:@awesome-cordova-plugins/core@^6.3.0 @awesome-cordova-plugins/purchases@^6.3.0 cordova-plugin-purchases@^4.2.3 cordova-annotated-plugin-android@^1.0.4 In my App I am usingimport { Purchases } from '@awesome-cordova-plugins/purchases';and geht the typings from here:node_modules/@awesome-cordova-plugins/purchases/index.d(those seem to be incomplete! subscriptionOptions are not defined in the types I get) BUT: In the results of “Purchases.getOfferings()” I get packages with products and those products have an array called “subscriptionOptions” with all my options listed. So the
Apologies for a basic question. This is my first RevenueCat project…I’m running an Expo managed project for React Native. react-native-purchases is installed and imported. I can call setDebugLogsEnabled successfully. But I cannot see a “setup” method on the Purchases object? If I type the code to run setup() I get the following error:What am I missing?Thx!
I’m using the purchases_flutter: ^5.6.2 and I am trying to set an monthly subscription in Android, I have all the steps mentioned in the Google Play checklist but apparently its not working properly, using the same setup for iOS works fine, Do I need add some implements in the AndroidManifest or build.grade or anything else?
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
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.