Get help with your SDK implementation.
Recently active
Hi all,I’ve implemented readyForPromotedProduct (former shouldPurchasePromoProduct) method of PurchasesDelegate so that the user can select a promoted subscription straight from the App Store and be redirected to in-app payment sheet.I’m trying to test the implementation using the link as per the documentation:itms-services://?action=purchaseIntent&bundleId=<BUNDLE_ID>&productIdentifier=<SKPRODUCT_ID>The link redirects me to the app, but no payment sheet appears. The console shows me an error:Tried to send purchase intent: <SKPRODUCT_ID> to delegate, delegate does not respond to method paymentQueue:shouldAddStorePayment:forProductBy the way, Purchases.configure has already been called and Purchases.shared.delegate = self set before, I’m basically opening the link with the app already being active. Another method of PurchaseDelegate func purchases(_ purchases: Purchases, receivedUpdated purchaserInfo: RevenueCat.CustomerInfo) is working with no issues. Any idea
So we just got an e-mail from a client that states he has a subscription in our app, but when I look into our database, and in RevenueCat, this user does not.However, his wife, who didn’t purchase a subscription, does have a subscription now, both in our database and in RevenueCat.It turns out, that they both have an own Android device, but they share the same PlayStore account.When this person wants to purchase a new subscription, he gets the error message “you already have a subscription”. Which makes sense, as the subscription is tight to the Play Store account.However, I would expect that in this case either:his wife gets the entitlements removed, and he gains it or, they now both have the entitlementsHow could it happen that his wife has a subscription?And how can I make sure he gets the subscription, and his wife not?And, even better, is it even possible to give them both a subscription, using the same Play Store account?Thank you!
Device A- Logged in Google play account (Aplaystoreaccount@gmail.com)- Logged in APP ID (Aappid@gmail.com)Device B- Logged in Google play account (Bplaystoreaccount@gmail.com)- Logged in APP ID (Aappid@gmail.com) I saw this "await Purchases.syncPurchases();" on the docs and I used it after the subscription renewed, but this method just worked with Device A, I call this method with Device A this it gets the purchase info on google play and then renewing the subscription on Revenuecat.When i call this method "await Purchases.syncPurchases();" with Device B nothing happened, because the entitlement is not active.Why Device A worked perfect but Device B not worked this method "await Purchases.syncPurchases();"?
Why google play purchase working fine but at the revenuecat user subscription does not renew? i asked this question on the community revenuecat, the answer was this: "In that case, I would check with a longer subscription (sometimes, RevenueCat does not catch up with the accelerated schedule of short sandbox subscriptions). This won’t happen in production."But how can I be sure without testing?
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. Google play purchase working fine but at the revenuecat user subscription not renewing user can use just 5 minute(Test user). Google play renewing but revenuecat not renewing and also nothing happening in the sandbox. I have a consideration about this, I think this is about credential, i check out my credential and In my google play console API ACCESS - under the Credentials, there is info like on the picture. I created Credentials but I can't use them, Is it because of this info, should I configure OAuth consent screen? Please please please help me, i dont know what to do 😢
I using Flutter SDK and have some problems with Google play.for example I have 2 device A and B using the same google play accountI install app and purchase subscription on device A when I install app on device B, Google Play automatically restores purchases (appUserId on device A and B is not the same)So how can I prevent device B automatically restores purchases. I setup with revenuecat with appUserId like that: Purchases.setup(Constants.googleApiKey, appUserId: userId)When running on device B, I have a log like that: “WARN: ⚠️ 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: https://errors.rev.cat/allowsSharingPlayStoreAccount”
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
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
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.
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
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.
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
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’ve submitted my app to the Apple App Store and keep getting rejected for the error “Receipt is missing”.How can I simulate the exact method Apple uses to test apps? Whenever I test using either:Xcode + a physical device + sandbox account or TestFlight + non-sandbox App IDthe subscriptions go through successfully. Hence I have a few questions: How do I replicate the error the app review team get so I can debug? In my scheme settings through Xcode before I submit my app, do I need to set the field StoreKit Configuration to “None”? Or can I leave this selected on my StoreKit config file when I submit my app? How do I use this receipt validation link? https://www.revenuecat.com/apple-receipt-validation/. There are no directions for use on the website. What do I need to enter in the first field which states “Paste your receipt”? I’ve been given this link by the App Review team. https://developer.apple.com/library/archive/technotes/tn2413/_index.html#//apple_ref/doc/uid/DTS40016
I have seen that there is a DocC generated website for documentation. Is it possible to get the generated content also in the Documentation window of xcode(like when docs are generated inside the project, for the project)? Thanks!
Trying to purchase package in the Sandbox (with no products in Appstore, only in StoreKit), everything seems to be set up fine. It results in success message “Your purchase was successful”But after tapping okay an error happens which says “The receipt is not valid”2022-10-11 17:42:27.282308+0300 lumio[79672:5449989] [Purchases] - DEBUG: ℹ️ Vending Offerings from cache2022-10-11 17:42:27.282698+0300 lumio[79672:5449989] [Purchases] - INFO: 💰 Purchasing Product 'monthly_sub' from package in Offering 'default'2022-10-11 17:42:27.286050+0300 lumio[79672:5449989] [Purchases] - DEBUG: ℹ️ PaymentQueue updatedTransaction: monthly_sub 02022-10-11 17:42:27.286381+0300 lumio[79672:5449989] [Purchases] - WARN: 🍎‼️ There is a problem with the SKPaymentTransaction missing a transaction date - this is an issue with the App Store. Unix Epoch will be used instead.2022-10-11 17:42:27.286621+0300 lumio[79672:5449989] [Purchases] - WARN: 🍎‼️ There is a problem with the SKPaymentTransaction missing a tr
Hi I’m having issues upgrading to react-native-purchases version v5.1.0. When I build from command line, I get the following error: 2022-10-11 16:17:22.601 xcodebuild[26352:116860] Requested but did not find extension point with identifier Xcode.IDEKit.ExtensionPointIdentifierToBundleIdentifier for extension Xcode.DebuggerFoundation.AppExtensionToBundleIdentifierMap.watchOS of plug-in com.apple.dt.IDEWatchSupportCore Is this expected? Does this version require xcode 14?
From what I can tell, (here and here), `purchaseProduct` should execute a callback upon completion, but I can’t seem to get it to fire. The transaction goes through and the purchase is made with no issues/errors, but the callback i would expect - those console logs (in the example below) - never go through.I saw this post from a month ago where it was mentioned that there’s an issue with the purchaseProduct method, are these related?Thanks Purchases.purchaseProduct(plan.identifier, ({ productIdentifier, customerInfo }) => { console.log("productIdentifier:", productIdentifier); // does not call console.log("customerInfo:", customerInfo); // does not call }, ({ error, userCancelled }) => { console.log("error:", error); // does not call console.log("userCancelled:", userCancelled) // does not call }, null);
Hi there,I am working on testing my implementing of RC into my app but I am having issues with migration.The previous version of my app had a one time in-app purchase, while the new version of my app is going to have subscriptions.The problem occurs when migrating from the old version of app without RC to the new version of the app with RC: If I do a clean install of the new version of my app, everything works. but If I stall the new version over my old as my users would. It throws an error. My suspicion of the issue is that RC has no user id to check, but I expect it to create an anonymous id until the user signs in a later point, but I don’t know for sure because the error is not specific enough. Any advice or suggestion?
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.