Discussion and help from anything related to RevenueCat.
Recently active
If there is an attempt to change the purchase (switch between subscriptions), while app is without internet we will get a response like this:`PurchasesError(code=StoreProblemError, underlyingErrorMessage=Error finding existing purchase for SKU: something, message='There was a problem with the store.')`All the next attempts (even if the internet is now available) will return the following response:`PurchasesError(code=OperationAlreadyInProgressError, underlyingErrorMessage=null, message='The operation is already in progress.')``This is happening until the app is killed and restarted.
I have two products (weekly, monthly) and two entitlement attached to them. In sandbox, when I purchase the first weekly, the entitlement is right. But when I upgrade to the monthly when weekly entitlement is active, active entitlement seems to be be still the weekly. I expect it to entitled to only monthly. Upon purchase of monthly debug logs show the purchased product as monthly but I can’t get its entitlement as active entitlement.purchaseInfo.entitlements.active seems to have only one entitlement and it’s weekly. The product definitions are in the same subscription group. The sandbox data also shows the latest purchase as weekly and user’s entitlement to monthly. What could be the problem here?I’m checking it like shown below: Purchases.shared.purchase(package:selectedPackage) { transaction, purchaseInfo, error, userCancelled in if let error = error { print(error.localizedDescription) self.purchaseFailed(purchaseInfo, error, userCanc
I have 2 products in the AppStore: a monthly subscription and a yearly subscription, and I am testing the RevenueCat API in sandbox.the purchase function (Purchases.shared.purchase(package: package)) seems to be working fine, there’s no error.I’ve tested a scenario where I buy a monthly subscription, and then a yearly subscription right after, the purchase function returns the CustomerInfo with old info (still the productIdentifier pointing to the monthly subscription). However, Purchases.shared.restorePurchases actually return the up to date CustomerInfo with the yearly subscription.Here’s the code I’m using to purchase:static func purchase(package: Package, completion: @escaping (_ info: CustomerInfo?, _ error: Error?, _ usercancelled: Bool) -> Void) { Purchases.shared.purchase(package: package) { transaction, customerInfo, error, userCancelled in completion(customerInfo, error, userCancelled) } } Could it be a bug or is there something wrong wi
Hello, I’m trying to to handle the error thrown when the transaction is interrupted ( Accept terms and conditions, update payment info ). All the clue I have is “ Error: There was a problem with the App Store.”Can i rely on this message to identify this type of error? This seem too generic to me, and i fear that by handling this message some errors could stop being monitoredI’m testing with the enable interrupted purchases in store kit
Hello, I have some issues with the app review.I have tested it using an android and iOS simulators and I can fetch the entitlements without any issue, I can see the description, price etc and the subscription works.However after installing the app through the TestFlight application, when I fetch the entitlements, I only see the price.Any idea why could this happen?Thanks
Want object structure and demo values for return object of Purchases.getOfferings(). It returns an object of “current” and “all” keys. And don’t return demo values with which we can test in debug mode.
Hi, I’ve configured Free Trial offer on both Monthly and Yearly Plans in Google Play Store.The free trial (14 days) shows up in payment sheet incase of Yearly plans, but not incase of Monthly plans.The configuration is exactly the same in both monthly and yearly subscriptions and when I fetch the product info I get the following object - {…,freeTrialPeriod:”P2W”,...} in Logcat. Following the eligibility criteria - I fetch all entitlements and allPurchasedProductIdentifiers to make sure that user has not subscribed to the plan beforehand So, I’m not sure why its not reflecting in pay sheet only in case of monthly plans.Any help regarding this topic will be appreciated.
I'm using lib 4.1.2 purchases_flutter.My app requires login to be subscribed.Subscribe works correctly, the problem starts when I log out of the user and log in.When I login again the entitlements active comes empty, if I reopen the app it also comes with empty entitlements.I'm using test user on android with annual subscription renewed every 30 min.Any tips?
I am implementing paid subscriptions in my iOS app. I have an entitlement called “Pro” in RevenueCat, but this seems to be returned to the app sometimes as “pro” and sometimes as “Pro”. I get the entitlements using Purchases.shared.getCustomerInfo { (purchaserInfo, error) in } purchaserInfo?.entitlements contains one entry as expected, but both the key and the entitlementInfo.identifier are “pro” not “Pro”. However, just after a purchase completes successfully, it is [edit: sometimes] returned as Pro. This is using a sandbox user, if that is relevant.Is this expected behaviour? I suspect not, but can’t figure out what’s going in. Perhaps something to do with caching of user entitlements. Any ideas?
We recently launched our app and have a monthly subscription plan with a free trial.In both playstore and appstore we did set up free trials/introductory offers and are applied for all countries.For some reason, users in the UK do not see the free trial in the payment sheet and they are charged right away. Our dev team is in Serbia and we do see the free trial.Looking at this https://docs.revenuecat.com/docs/ios-subscription-offers free trials are handled manually.Sounds similar to thisWe are using react native 4.5.3.Any ideas what we are doing wrong?
I’m trying to set up our payment at my workplace and I encountered a problem I cannot find others are having.Everything works, in theory and practically which is weird, but I still get warning logs in console when clicking the purchase button in app.So as soon as I click the purchase button I get two warning/error in log:[Purchases] - WARN: 🍎‼️ There is a problem with the SKPaymentTransaction missing a transaction date - this is an issue with the App Store.[Purchases] - WARN: 🍎‼️ There is a problem with the SKPaymentTransaction missing a transaction identifier - this is an issue with the App Store.However, I still get the prompt to purchase and I fill in my sandbox account details and hit buy. Everything is successful. The customer and data shows up on RevenueCat list. However the billing shows up as an error in customer info in RevenueCat in the details of history for customer.I found this post on RC forums with same issue but the solution was to create a new sandbox user and to mak
Hello, I have an inquiry regarding the addition of the "Restoring Purchase Products" function. (Appstore has rejected the assessment that it does not have a purchase restore function.)What I'm curious about is1.I wonder if I can use "Anonymous App User IDs".I wonder if I need to designate a user ID.2.Purchases.addPurchaserInfoUpdateListener((purchaserInfo) async {final purchaserInfo = await Purchases.getPurchaserInfo();...}andPurchaserInfo restoredInfo = await Purchases.restoreTransactions();I'm curious about the difference.If the method is different, is there a code to refer to?I am inquiring because it seems to bring the same purchase information.Thank you for reading it.- Notes. flutter app. Purchase or restore purchase after SNS log-in. We do not share subscriptions between platforms.
The following message popped up on our Google Play console on June 2: Changes for users based in the European UnionJun 2, 2022 23:25In light of changes to EU consumer laws, we would like to inform you about important changes to prices and promotions on Google Play for users based in the European Union.Disclosing personalized pricing We've added an API to the Google Play Billing Library that will inform users in Google Play's purchase flow that an item's price has been personalized using automated decision-making. Please reference Art. 6 (1) (ea) of the Consumer Rights Directive (2011/83/EU) to determine if the price you are offering to users is personalized. To inform Google Play of when to add this disclosure you must have the latest version of the Google Play Billing Library (v.5.0) and call the setIsOfferPersonalized() method when an item's price has been personalized for the user.Changes to products & services previously labeled as "free" Going forward you may also notice chang
We have been using the ionic purchases plugin for a while in our project. Recently we have been working on getting offer codes working for iOS. This has not been successful at all.The implementation we have:- We call purchases.login at startup- We listen for purchases.onPurchaserInfoUpdated which triggers when someone makes a purchase (and we unlock based on the entitlements available)- We call purchases.presentCodeRedemptionSheet which pops up the iOS offer code screen- After it didnt work we started listening for purchases.addShouldPurchasePromoProductListener, we thought this might be triggered for the offer codesWe had to test this in production as offer codes didnt work at all in our test environment. Any tips to do this are more then welcome.We have seen multiple things going wrong in the app:- The redeem promo code button (the iOS native part) will go on disabled after pressing it, take a while and then enable again without doing anything- The redeem button works but the sale is
I have a question about the correct way to setup entitlements my app with only monthly recurring subscriptions.There are simply 10 different monthly recurring subscriptions, no yearly option, etc..Of these, the user can only have ONE active subscription and be “entitled” to; Either 1 Ball, 2 Balls, 3 Balls, etc depending on what they are paying for...1 ball = $0.99 per month2 balls = $1.99 per month3 balls = $2.99 per monthetc….10 balls = $9.99 per monthAll of my subscriptions are configured in the *same subscription group* in the App Store so a user can only be subscribed to *one subscriptions at any time*.If the user has NO subscription they can't "play the game" in the app, however the app is a free download.POTENTIAL ENTITlEMENT SETUP 1 (10 Different entitlements)Entitlement 1 = 1 ball $0.99 per monthEntitlement 2 = 2 balls $1.99 per monthetc….Entitlement 10 = 10 balls $9.99 per monthPOTENTIAL ENTITlEMENT SETUP 2 (1 Entitlement)Entitlement 1 = "Can play game" (since user has
Good morning,We’re looking at the Firebase Integration documentation here : https://docs.revenuecat.com/docs/firebase-integration In the section about setting the Firebase User Identity in RevenueCat. Here: // Add state change listener for Firebase Authentication Auth.auth().addStateDidChangeListener { (auth, user) in if let uid = user?.uid { // identify Purchases SDK with new Firebase user Purchases.shared.logIn(uid, { (info, created, error) in if let e = error { print("Sign in error: \(e.localizedDescription)") } else { print("User \(uid) signed in") } }) } }It is clear that you call logIn when the user id is available. However, why don’t yo call logOut when it is not? Is there a reason? We just want to get our implementation right / complete and from an remote point of view, it feels incomplete. Thank you
I am following the ‘Magic Weather’ tutorial using Flutter on iOS. I’ve set up the RC project, app, entitlements, offerings and products. When I run the app, purchaserInfo appears to be valid but all of the lists and maps are blank.Any help is appreciated.
Have user A logged in Purchase a subscription Log out, log in as user B Purchase a consumable in-app purchaseExpected: no subscription for user B, subscription for user AActual: subscription for B, no subscription for AThis is extremely wrong, since user B is expecting to get a consumable in-app purchase effect, while they get an effect as if they bought a subscription. Subscriptions should only be transferred when explicitly asked by a user.
We’ve recently started developing a React Native app and are now at the stage of looking to configure IAP and integrate RevenueCat. However we’re running into the following issue when building the app with react-native-purchases to our Google Play testing track via fastlane:Google Api Error: Invalid request - Release uses an old version of Google Play Billing.I’m aware this is likely to be a result of the recent update to version 5 which isn’t currently supported with RevenueCat, but is there a workaround for this in the meantime? Or is it only possible if the app already had subscriptions under version 4 of the billing library?
Hello, I have a case that I can’t seem to handle. Currently, if User1 with an alias logs in to the application from a device and buys a subscription he will get it just fine. Next, User1 does a logout and User2 will login on the same device and then something strange happens. The subscription is being transfered from User1 to User2. Is there any way to avoid that and link a subscription to the User ID alias?Also, is there any way to get a purchaseinfo by alias? Thank you
How to check the status of a subscription suspended to block access to the application content because even when a subscription is suspended the right is still active. With the free plan.
I have a question about the StoreKit 2 isEligibleForIntroOffer behavior when testing with a sandbox user. On my iPhone I’m logged in with a sandbox user (via Settings > App Store > Sandbox Account) where I’ve cleared the purchase history via App Store Connect > Users.When I run my code on the device, the “StoreKit 1” way of determining if a user is eligible for a free trial for a renewable subscription (see “Determine Eligibility” section in Implementing Introductory Offers in Your App) works as expected. However, when I use the product.subscription.isEligibleForIntroOffer or Product.SubscriptionInfo.isEligibleForIntroOffer(for:) function with StoreKit 2, they both return false, even though this should be true since the receipt has been cleared. I was wondering if anyone has come across this too when testing with a Sandbox User...where isEligibleForIntroOffer doesn’t return the correct value.Code-wise, I’m using very similar logic found in RevenueCat’s project: TrialOrIntroPr
Note that developers (you) cannot change a customer's subscription directly. The app stores do not allow developers to upgrade or downgrade a subscription on behalf of a customer. Only a customer can change their subscription.iOSThere are no code changes required to support upgrades, downgrades, and crossgrades for iOS subscriptions in your app. A customer can upgrade, downgrade, or crossgrade between subscriptions as often as they like.According to Apple, when a customer changes their subscription level, access to the new product can vary depending on the new product:Upgrade. A user purchases a subscription that offers a higher level of service than their current subscription. They are immediately upgraded and receive a refund of the prorated amount of their original subscription. If you’d like users to immediately access more content or features, rank the subscription higher to make it an upgrade.Downgrade. A user selects a subscription that offers a lower level of service than thei
Hey there! I’m currently implementing an “Active Subscription” view in my app and was wondering if I can somehow get the following data from the `CustomerInfo`?Next payment price (the next amount the user will be changed)Active renewal period (if the user is subscribed to weekly, monthly or yearly)Family sharing active (if the active subscription can be shared with the iCloud family)A possible workaround could be to load the products again and search for the `productIdentifier`, but here I’m not sure how I’d find out which price is the due on the next payment (intro offer, discount, etc)Thanks in advance!
I created a subscriber using the api https://api.revenuecat.com/v1/subscribers/app_user_idI can not find this subscriber in customer list, I checked in active,sandbox, non-subscribers and expired sections. But when I search for the user app_user_id, I can find the user. Why is that?
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.