Get help with your SDK implementation.
Recently active
Hi,I don’t know why I am getting this error. It was working well before on iOS, except on catalyst.Then I’ve broken all this!Purchase failed. Error Domain=RevenueCat.ErrorCode Code=0 "Unknown error." UserInfo={source_function=purchase(sk2Product:promotionalOffer:completion:), NSUnderlyingError=0x600001be9080 {Error Domain=RevenueCat.ErrorCode Code=8 “The receipt is not valid." UserInfo={source_function=convertUnsuccessfulResponseToError(), Note that after purchasing the product I see a message saying: “You’re all set, your purchase was successful.” Do you have an idea where to look at?I triple checked all keys & config. (bundle id, shared secret, ...) Thanks
I'm trying to make a purchase using the method below, it prompts me to enter the password, it works fine but the completion block is never called. It seems to be a bug in iOS 16, because in iOS 15 everything works as expected.I'm using this code to make the purchase: [[RCPurchases sharedPurchases] purchasePackage:obj withCompletion:^(RCStoreTransaction *transaction, RCCustomerInfo *customerInfo, NSError *error, BOOL cancelled) { }]; How do I enable the StoreKit 2 in Objective-C? Maybe it will work using StoreKit 2. Thank you!
I have configured the revenue cat react native SDK. The products are configured in the offerings sections and they are getting fetched properly. All good until this moment. Once I clicked Buy now, The popup of Apple login opens up and after adding sandbox user credentials It says “purchase success-full” with “tick” sound on physical Iphone.Once that’s done, I get new popup saying “You are all set mode:[sandbox””. After dismissing this popup my app freezes. Nothing happens. Even I am not getting the `custmer_info` or `puchase_info` after the successful purchase.Please help try { Purchases.setDebugLogsEnabled(true); console.log("initiated purchase") // this will execute const purchaseData = await Purchases.purchasePackage(incomingPackage); console.log("purchaseData", purchaseData); // not getting this line console.log("done puchase") // not getting this line } } catch (e) { console.log(JSON.stringify(e, null, 4)) // this also doesn't execute
I’m currently unable to create builds in Unity for Android because RC/Gradle fails to resolve its dependencies from jcenter. As jcenter becomes unreliable the more time passes and should not be used anymore, it would be great when you could replace these dependencies as quickly as possible.
Hi there! I'm having an issue with RevenueCat + CocoaPods when trying to build my Flutter app in Android Studio. In Android Studio, I get the following error message: Xcode build done. 18.0sFailed to build iOS appError output from Xcode build:↳ ** BUILD FAILED **Xcode's output:↳ Writing result bundle at path: /var/folders/s3/ghl3km215r790k4zktzbs0n00000gn/T/flutter_tools.CdsWMe/flutter_ios_build_temp_diricNjPw/temporary_xcresult_bundle /Users/javiernanni/StudioProjects/Respirar/ios/Pods/RevenueCat/Sources/LocalReceiptParsing/BasicTypes/AppleReceipt.swift:68:46: error: value of optional type 'String?' must be unwrapped to a value of type 'String' return (try? self.prettyPrintedJSON) ?? "<null>" ^ /Users/javiernanni/StudioProjects/Respirar/ios/Pods/RevenueCat/Sources/LocalReceiptParsing/BasicTypes/AppleReceipt.swift:68:46: note: coalesce using '??' to provide a de
Good morning Our product fully integrate with RC to handle subscription. We’ve been very happy so far with everything but this rejection yesterday from our Mac Catalyst build from the App Store review team. Is there something we have missed in our implementation? Is there a special check to see if the receipt is available at launch time and then exit 173 if it doesn't? Would love your expert point of view..
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!😊
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.