Discussion and help from anything related to RevenueCat.
Recently active
Why Google play test time is 5 minutes but Revenuecat test time is 7 minutes?
"await Purchases.restorePurchases();" it gives this error "allowSharingPlayStoreAccount is set to false and restorePurchases has been called. This will 'alias' any app user id's sharing the same receipt. Are you sure you want to do this? More info here". ****(General - Restore behavior: selected Transfer purchases)****Why this method gives this error?
Im seeing this warning in the logs when I launch my app (iOS integration). I’m not calling Purchases.shared.restorePurchases() in this scenario (added a breakpoint to the line where it is called to verify it is not hit). I haven’t touched or set the allowSharingAppStoreAccount value anywhere so I’m not sure what this warning means, maybe I am doing something wrong with my RevenueCat integration? What could be causing this warning? [Purchases] - DEBUG: ℹ️ applicationDidBecomeActive[Purchases] - DEBUG: ℹ️ CustomerInfo cache is stale, updating from network in foreground.[Purchases] - DEBUG: ℹ️ Offerings cache is stale, updating caches[Purchases] - DEBUG: ℹ️ GetCustomerInfoOperation: Started[Purchases] - DEBUG: ℹ️ There are no requests currently running, starting request GET subscribers/$RCAnonymousID%3A96F13EE4-CC53-4E78-A6A4-3BB161B05772[Purchases] - DEBUG: ℹ️ API request started: GET /v1/subscribers/$RCAnonymousID:96F13EE4-CC53-4E78-A6A4-3BB161B05772[Purchases] - WARN: ⚠️ allowSharingAp
We run into a use-case that seems like an edge case but ends up being more common that you’d expect.User subscribes via App Store, let’s say an annual plan that ends on 2023-01-01. In the middle of the subscription, user now wants to be billed through Stripe (receiving a promo code or something like that). It is too late for a refund. User cancels their App Store subscription, though it is still active until 2023-01-01. User wants to purchase their new Stripe subscription but only get billed once their App Store one ends in the future.There are a few ways to do this:Just not support this at all, and force users to wait until their App Store subscription expires before they purchase their Stripe subscription (less than ideal). Let the user purchase their new Stripe subscription, but with a really long trial duration so that during the overlap period, they have the canceled (but non-expired App Store), then on 2023-01-01 when the first one expires, their Stripe trial ends and they get bi
Hello,I am new to revenuecat and have some questions.1. Can I use revenuecat to make direct purchase like stripe in my web and flutter apps? do you have tutorials on that? 2. Does revenuecat support Australia dollars? Is there any extra fee on it?3. The per transaction fee in stripe in Australia is 1.75% + A$0.30, I can see revenuecat is 0.8% in starter plan, is that correct?4. When a customer makes a purchase, will the money go to my bank account? Or it goes to revenuecat and I need to transfer it to my account manually. Thanks
I integrated Revenuecat successfully in my Flutter App. When I make a test purchase from the app it gives the following terminal error: D/[Purchases] - DEBUG(18782): 💰 kw_100_1y_1 - SkuDetails: {"productId":"kw_100_1y_1",etc...}D/AudioTrack(18782): correcting timestamp time for pause, currentTimeNanos: 4563963963773 < limitNs: 4573594802304 < mStartNs: 4573694802304D/[Purchases] - DEBUG(18782): ℹ️ Found 0 unsynced attributes for App User ID: 3oTDvlvRsiuuuuuuuuuuuuI/System.out(18782): (HTTPLog)-Static: isSBSettingEnabled falseI/System.out(18782): (HTTPLog)-Static: isSBSettingEnabled falseD/AudioTrack(18782): correcting timestamp time for pause, currentTimeNanos: 4563963963773 < limitNs: 4573594802304 < mStartNs: 4573694802304W/AudioTrack(18782): getTimestamp() location moved from kernel to serverW/[Purchases] - WARN(18782): ⚠️ Unable to start a network connection due to a network configuration issue: https://api.revenuecat.com/v1/receiptsD/[Purchases] - DEBUG(18782): ℹ️ API
If I have an existing billing system and I import my user data (all iOS receipts) via the /receipts RevenueCat API how will that affect the months MTR? I’m assuming that RevenueCat calculate MTR based only on events that happen in the current month e.g. non-consumable purchases, subscription renewals etc and not things that have happened in the past before I opened my RevenueCat account. Just want to double check I don’t run up a bill somehow by importing existing transactions :)
I'm testing on a physical android device, and have behavior I can not explain:I purchase a subscription The subscription is automatically stopped after 5 minutes I then try to purchase it again but I get errorcode ITEM_ALREADY_OWNEDI can close the app and try again, but still get the error codeIf I refresh with the login method, the problem is still present, I am no longer entitledIs there some kind of server - timing issue going on here?After some (?) time I am able to purchase a subscription again, unsure when things are matching up again.Or maybe there is there a problem with me checking the validity? C# code:ExpirationDate = ToDateTime(entitlement.ExpirationDate);private DateTime ToDateTime(Java.Util.Date date) { var baseValue = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); return baseValue.AddMilliseconds(date.Time); }
Not having receipts is a valid situation (If I use a blank account / device)To me it seems like this situation should not throw an exception. The fact that RC throws this error caught me a little off guard becausethe getting started code samples do not handle this error as I was testing on a physical device that had previously been used for testing (and thus did not throw this error) and did not see this error until later.
Following the docs and starter project for iOS-SwiftUI its fairly straightforward in implementing purchases in apps.However in StoreKit v1 you are able to switch on the SKPaymentTransaction to get the transactionState:case .purchasing: case .purchased: case .restored: case .failed: case .deferred:This is great as for each product we can get the status when a user is attempting to buy a product.When I was using StoreKit v1, I was able to add an animation to the product when it was in the purchasing state (like the App Store spinner), and then once it had been purchased I was able to disable the button and mark it as “Purchased” instead of the price.I’ve been trying to replicate this with RevenueCat API but cant seem to be able to figure out how to do it - so I’m looking to the community for some help 😅 Code that I have:// -- MainView...if let availablePackages = subscriptionManager.offerings?.current?.availablePackages { ForEach(availablePackages) { package in PackageCell(package:
As shown in the image, the time that I captured the photos has already passed the `expireationDate`However the `isActive` still returns true Can somebody help? I’m using Xcode 14 Beta 3, iOS 16.1, latest version of RevenueCat
Hello, when I’m trying to buy the product this error is showing up: E/flutter (18749): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: PlatformException(5, The product is not available for purchase., {code: 5, message: The product is not available for purchase., readableErrorCode: ProductNotAvailableForPurchaseError, readable_error_code: ProductNotAvailableForPurchaseError, underlyingErrorMessage: Couldn't find product.}, null) Everything is set and should work.
I purchase a package with flutter and its done in google play, but failed to sync data with revenuecat after this.purchases_flutter: ^4.3.0 CustomerInfo customerInfo = await Purchases .purchasePackage(package); W/[Purchases] - WARN(24709): ⚠️ Unable to start a network connection due to a network configuration issue: https://api.revenuecat.com/v1/receiptsD/[Purchases] - DEBUG(24709): ℹ️ API request started: POST /receiptsD/[Purchases] - DEBUG(24709): ℹ️ API request completed with status: POST /receipts 503E/[Purchases] - ERROR(24709): 🤖‼️ There was a credentials issue. Check the underlying error for more details.
I have a vanilla monthly/annual subscription plan on my app. In Stripe it’s 2 products, each with one price.I’m configuring the Stripe customer portal, where I will send customers to cancel their plans. Stripe allows me to let them “Switch plans”.Is this supported in RC or should I only let users cancel and start a new subscription?Thanks!
Om building a Flutter app and using the “purchases_flutter” package to integrate with RevenueCatI can’t see a method within this package to refund a prior purchase. Please advise whether this is supported.
Hi,I’ve recently launched my app with subscriptions and I’ve received a couple of ‘trial start’ events and I’ve noticed a strange thing. If I go to the customer profile I can see a ‘Converted from trial’ event 8 hours before the actual event. Is this intended? If so, how does RC knows that the customer will convert, what if there is a billing issue?RegardsErol
Test user: I get correct data right after the purchase until the first renewal, after that, my monthly subscription is missing in purchaserInfo.entitlements.active even though it is still active in Play Store. Please anyone help me
I am trying to port a RevenueCat v3 project to v4 but these messages appear during compilation:/Users/ham/Desktop/Development/Mac/Libraries/revenuecat/Build/iOS/RevenueCat.framework/Headers/RevenueCat-Swift.h/Users/ham/Desktop/Development/Mac/Libraries/revenuecat/Build/iOS/RevenueCat.framework/Headers/RevenueCat-Swift.h:4308:63: error build: Cannot find protocol declaration for 'SKPaymentQueueDelegate'/Users/ham/Desktop/Development/Mac/Libraries/revenuecat/Build/iOS/RevenueCat.framework/Headers/RevenueCat-Swift.h:4365:62: error build: Cannot find protocol declaration for 'SKProductsRequestDelegate'/Users/ham/Desktop/Development/Mac/Libraries/revenuecat/Build/iOS/RevenueCat.framework/Headers/RevenueCat-Swift.h:5748:41: error build: No type or protocol named 'SKPaymentTransactionObserver'/Users/ham/Desktop/Development/Mac/Libraries/revenuecat/Build/iOS/RevenueCat.framework/Headers/RevenueCat-Swift.h:5758:60: error build: Cannot find protocol declaration for 'SKPaymentQueueDelegate'/User
Hi - if a users subscription expired (Apple App Store) and could not renew but we have grace period turned on, will the entitlement still have isActive as true during the duration of the grace period (desired outcome), or do we need to do some extra checks for the grace period when isActive == false. Thanks
Hey.We have defined 3 consumables, each one with it’s own price. There are multiple items to purchase in our app and because we want them to be dynamic, they’re all linked to one of the specified consumables, based on their price. The problem I'm seeing is the following. I start the app and buy one of the items (Item 1) that is linked with one of the consumables. The purchase goes through and I verify the purchase with our backend and set the item to “purchased”. If I then find another item (Item 2) that is linked to the same consumable. When calling Purchases.shared.purchase(), the SDK automatically returns the transaction I made before for the item 1, instead of going through the purchase flow. This fails the verification on our backend and the user is unable to buy the Item 2.This only occurs if the app session stays the same. If I close the app and reopen it, I can buy Item 2 without a problem.Is there a way to clear the cache or somehow force the SDK to always try the purchase?All
We have an iOS account that is not able to restore purchase. This seems to be spurious where restoring isn’t broken for everyone, but we have had some other bug reports for iOS as well. This particular user restarted their account where their current appUserId is `IGw_6GzTANk5oN3yJWi5MXkCg4n1`, but it was a different appUserId when they originally purchased the subscription. We are using Flutter, and I’ve pasted the production `PurchaserInfo` object that we get. For some reason RevenueCat seems to believe the subscription expired 9/29/2022 but the user’s App Store shows it should expire 3/20/2023. final PurchaserInfo purchaserInfo = await Purchases.restoreTransactions();// PurchaserInfo we logged from testing in productionPurchaserInfo(entitlements: EntitlementInfos(all: { plus: EntitlementInfo(identifier: plus, isActive: false, willRenew: false, latestPurchaseDate: 2022 - 09 - 29 T12: 46: 56 Z, originalPurchaseDate: 2022 - 09 - 29 T02: 43: 03 Z, productIdentifier: finch_plus_yearly_1,
I am developing an iOS app and I am using .getCustomerInfo() to retrieve the current subscription state as suggested in the Documentation.The SDK will update the cache if it's older than 5 minutes, but only if you call getCustomerInfo(), make a purchase, or restore purchases, so it's a good idea to call getCustomerInfo() any time a user accesses premium content. However, the 5 minutes “delay” causes sometimes dubious experiences.If, for example, a user has just purchased something, it is possible that he will not be able to access the content he has just purchased for a while because he is still stored in the cache as a non-purchaser.Is there a way to force a network request and bypass the cache?I would only want to do this directly after a purchase, so that the data is up to date again.Probably there is a very simple way and I'm just on the fence?😅Thanks in advance!😊
I want to export all purchase transactions including past transactions.In RevenueCat GUI console, “Customer History” page shows every transactions.https://www.revenuecat.com/docs/customer-historyHow can I export such transactions ? Which plan? Thanks
When I look at a users detail in the customers tab (this URL: https://app.revenuecat.com/customers/) the entitlements section (in the top right of the page) always just shows “no current entitlements” even though the user I searched for has some active entitlements. I verify the user has some entitlements by manually calling the RevenueCat API via code with the same user ID and getting the CustomerInfo object that list all of the active entitlements. It makes testing a bit annoying that this data never seems to update. I’ve tried refreshing the page after multiple hours (over 12) and nothing still shows up. This is Sandbox data, does that make a difference? Thanks
Had some questions regarding iOS-specific empty product offerings:Is there anything specific we need to do within RevenueCat to let RevenueCat know that there is a newly renewed Paid Apps Agreement for App Store? How long does it take for RevenueCat to be able to register a newly renewed Paid Apps Agreement? We renewed the agreement in App Store Connect about an hour ago but we are still seeing errors. We haven’t created any new product offerings. Is there anything else we should consider to debug beyond what’s been mentioned in More context below:-------------------We’re using the Flutter version of RevenueCat and recently had a spike in iOS-specific errors where RevenueCat couldn’t fetch our products. The error isn’t specific to our latest app version.Non-fatal Exception: FlutterErrorPlatformException(23, None of the products registered in the RevenueCat dashboard could be fetched from App Store Connect (or the StoreKit Configuration file if one is being used). This could be due
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.