The receipt is not valid. The purchased product was missing in the receipt. This is typically due to a bug in StoreKit.
Hello,
`ERROR - The receipt is not valid. The purchased product was missing in the receipt. This is typically due to a bug in StoreKit`.
I was recently rejected from app store review due to this weird RevenueCat bug ("react-native-purchases": "5.13.0") that I sometimes experience.
I believe that I have set up all of my code correctly, but when clicking on a subscription purchase (using the purchaseProduct method - `const purchase = await Purchases.purchaseProduct(identifier, null, Purchases.PURCHASE_TYPE.SUBS);`) the request can fail and throw the following error. “The receipt is not valid. The purchased product was missing in the receipt. This is typically due to a bug in StoreKit.” It seems that this error will happen in patches 5-10 times in a row, then once I see one success, they are all successful from there forward (the purchase modal shows up with the product, and the user can subscribe to my subscription). Now when I go back into the app, I cannot reproduce the bug as it will be successful once I get one success (if that makes sense). Eventually I will return to my app later and the bug will show up again. I have seen the bug show up in sandbox testing only, and have been unable to pass app store review due to this issue. Also I am trying to get more verbose debug logging in react native on iOS, I tried adding Purchases.setLogLevel(Purchases.LOG_LEVEL.DEBUG) in the setup before `configure`. It seems that the docs surrounding this are outdated - how can I get debug logging on a dev client (expo) with the react native SDK?
Please help.
Thanks, Carl
Page 1 / 2
I hit this error today. FWIW, I got around it in the (React Native) dev client by using a different (Apple) sandbox user for the purchase. I think that after you use a sandbox user for enough purchases, Apple’s servers get confused after a while about which things that user has or hasn’t already purchased and they spit out errors. This might not be the fix for everyone, but maybe it will help a few of you.
I have been going crazy with this problem that suddenly caused my Flutter iOS app to be rejected by Apple for the first time in tens of versions over one year. I tried literally ALL the advice that helped people in ALL the many forums and pages on this darned error, and nothing helped until I saw this post. I created a new sandbox tester and the error went away immediately. Thank you Mike!
P.S. This is a disgraceful situation for Apple to put developers in. A server going down temporarily (like what happened a year ago according to many posts) is one thing. But, rejecting apps on review repeatedly for no reason other than a bug in their sandbox testing, that can be easily avoided by using a new tester account, is inexcusable.
I'm having the same problem in my Flutter iOS so I did this and deleted my sandbox user and created a new one (never used) and I'm still having the same issue and can't move forwards because of this error. Also, this is happening on my testing environment (on debug and on TestFlight), so it doesn't need apple's approve in this situation.
Using the flutter lib in version 8.1.1 and Apple's monitor service doesn't show anything down.
I have been going crazy with this problem that suddenly caused my Flutter iOS app to be rejected by Apple for the first time in tens of versions over one year. I tried literally ALL the advice that helped people in ALL the many forums and pages on this darned error, and nothing helped until I saw this post. I created a new sandbox tester and the error went away immediately. Thank you Mike!
Hey Talicom,
I’m so glad I was able to help out a fellow developer in need! I feel like In-App Purchases are almost like voodoo. Even with RevenueCat greatly simplifying the process, there are still a lot of stars that need to align and magic incantations to invoke in order to get it working.
I hit this error today. FWIW, I got around it in the (React Native) dev client by using a different (Apple) sandbox user for the purchase. I think that after you use a sandbox user for enough purchases, Apple’s servers get confused after a while about which things that user has or hasn’t already purchased and they spit out errors. This might not be the fix for everyone, but maybe it will help a few of you.
I have been going crazy with this problem that suddenly caused my Flutter iOS app to be rejected by Apple for the first time in tens of versions over one year. I tried literally ALL the advice that helped people in ALL the many forums and pages on this darned error, and nothing helped until I saw this post. I created a new sandbox tester and the error went away immediately. Thank you Mike!
P.S. This is a disgraceful situation for Apple to put developers in. A server going down temporarily (like what happened a year ago according to many posts) is one thing. But, rejecting apps on review repeatedly for no reason other than a bug in their sandbox testing, that can be easily avoided by using a new tester account, is inexcusable.
I hit this error today. FWIW, I got around it in the (React Native) dev client by using a different (Apple) sandbox user for the purchase. I think that after you use a sandbox user for enough purchases, Apple’s servers get confused after a while about which things that user has or hasn’t already purchased and they spit out errors. This might not be the fix for everyone, but maybe it will help a few of you.
Great! I did that and worked just fine. I was facing this issue only with an specific product that I bought more than 20x. I’ve created a new sandbox account and everything started to work again. Thank you!
I hit this error today. FWIW, I got around it in the (React Native) dev client by using a different (Apple) sandbox user for the purchase. I think that after you use a sandbox user for enough purchases, Apple’s servers get confused after a while about which things that user has or hasn’t already purchased and they spit out errors. This might not be the fix for everyone, but maybe it will help a few of you.
One thing I noticed is that when Apple rejects a build for this reason, if I take the build I submitted and try it in TestFlight, the same problem exists. (To be clear, I tested the build prior to uploading for submission and that one worked, but the “real” one for submission gets rejected)
So, now, I do one more quick validation of the App Store build’s paywall through TestFlight before submitting. That has helped a lot because I can keep generating TestFlight builds until they work, and then submit to Apple.
I am encountering an issue specifically with non-consumable products on iOS. Initially, when I create a new non-consumable product and attempt to purchase it, everything works fine for a few days. However, after this initial period, I start encountering the following error:
{ "code":"8", "message":"The receipt is not valid. The purchased product was missing in the receipt. This is typically due to a bug in StoreKit.", "domain":"RevenueCat.ErrorCode", "userInfo":{ "NSUnderlyingError":{ "code":"7712", "message":"underlying error", "domain":"RevenueCat.BackendErrorCode", "userInfo":{ "NSLocalizedDescription":"The purchased product was missing in the receipt. This is typically due to a bug in StoreKit.", "rc_backend_error_code":7712 }, "nativeStackIOS": "0 dod_stg 0x0000000102a9466c _ZN8facebook5react11JSIExecutor21defaultTimeoutInvokerERKNSt3__18functionIFvvEEENS3_IFNS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEvEEE + 235064", "1 dod_stg 0x0000000102a947f8 _ZN8facebook5react11JSIExecutor21defaultTimeoutInvokerERKNSt3__18functionIFvvEEENS3_IFNS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEvEEE + 235460", "2 dod_stg 0x0000000102a705d8 _ZN8facebook5react11JSIExecutor21defaultTimeoutInvokerERKNSt3__18functionIFvvEEENS3_IFNS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEvEEE + 87460", "3 dod_stg 0x00000001029c0eac _ZNK5folly3TryINS_4UnitEE16throwUnlessValueEv + 363856", "4 dod_stg 0x00000001029c0fe4 _ZNK5folly3TryINS_4UnitEE16throwUnlessValueEv + 364168", "5 dod_stg 0x000000010293c494 _ZZN4bssl4GRPC8internal11DeleterImplI13stack_st_X509vE4FreeEPS3_ENUlPFvPvES6_E_8__invokeES8_S6_ + 3123856", "6 dod_stg 0x000000010293d840 _ZZN4bssl4GRPC8internal11DeleterImplI13stack_st_X509vE4FreeEPS3_ENUlPFvPvES6_E_8__invokeES8_S6_ + 3128892", "7 dod_stg 0x0000000102942004 _ZZN4bssl4GRPC8internal11DeleterImplI13stack_st_X509vE4FreeEPS3_ENUlPFvPvES6_E_8__invokeES8_S6_ + 3147264", "8 dod_stg 0x000000010293ca88 _ZZN4bssl4GRPC8internal11DeleterImplI13stack_st_X509vE4FreeEPS3_ENUlPFvPvES6_E_8__invokeES8_S6_ + 3125380", "9 dod_stg 0x0000000102cf133c _ZN5folly17exception_wrapper7InPlaceIN8facebook6hermes9inspector32MultipleCommandsPendingExceptionEE18get_exception_ptr_EPKS0_ + 1754216", "10 dod_stg 0x0000000102b8b50c _ZN5folly17exception_wrapper7InPlaceIN8facebook6hermes9inspector32MultipleCommandsPendingExceptionEE18get_exception_ptr_EPKS0_ + 288312", "11 dod_stg 0x0000000102d24518 _ZN5folly17exception_wrapper7InPlaceIN8facebook6hermes9inspector32MultipleCommandsPendingExceptionEE18get_exception_ptr_EPKS0_ + 1963588", "12 dod_stg 0x0000000102cfc338 _ZN5folly17exception_wrapper7InPlaceIN8facebook6hermes9inspector32MultipleCommandsPendingExceptionEE18get_exception_ptr_EPKS0_ + 1799268", "13 dod_stg 0x0000000102c710dc _ZN5folly17exception_wrapper7InPlaceIN8facebook6hermes9inspector32MultipleCommandsPendingExceptionEE18get_exception_ptr_EPKS0_ + 1229320", "14 dod_stg 0x0000000102d35565 _ZN5folly17exception_wrapper7InPlaceIN8facebook6hermes9inspector32MultipleCommandsPendingExceptionEE18get_exception_ptr_EPKS0_ + 2033297", "15 dod_stg 0x0000000102d356e5 _ZN5folly17exception_wrapper7InPlaceIN8facebook6hermes9inspector32MultipleCommandsPendingExceptionEE18get_exception_ptr_EPKS0_ + 2033681", "16 dod_stg 0x0000000102ced131 _ZN5folly17exception_wrapper7InPlaceIN8facebook6hermes9inspector32MultipleCommandsPendingExceptionEE18get_exception_ptr_EPKS0_ + 1737309", "17 dod_stg 0x000000010293fa4d _ZZN4bssl4GRPC8internal11DeleterImplI13stack_st_X509vE4FreeEPS3_ENUlPFvPvES6_E_8__invokeES8_S6_ + 3137609", "18 dod_stg 0x0000000102943521 _ZZN4bssl4GRPC8internal11DeleterImplI13stack_st_X509vE4FreeEPS3_ENUlPFvPvES6_E_8__invokeES8_S6_ + 3152669", "19 libswift_Concurrency.dylib 0x0000000197342775 D32E2751-9E33-3795-9DCE-7087DEE58A22 + 350069" ] }, "source_file":"RevenueCat/HTTPClient.swift:756", "readable_error_code":"INVALID_RECEIPT", "readableErrorCode":"INVALID_RECEIPT", "rc_backend_error_code":7712, "source_function":"parseUnsuccessfulResponse()", "NSLocalizedDescription":"The receipt is not valid. The purchased product was missing in the receipt. This is typically due to a bug in StoreKit.", "rc_response_status_code":422 }, "nativeStackIOS":e "0 dod_stg 0x0000000102a9466c _ZN8facebook5react11JSIExecutor21defaultTimeoutInvokerERKNSt3__18functionIFvvEEENS3_IFNS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEvEEE + 235064", "1 dod_stg 0x0000000102a705d8 _ZN8facebook5react11JSIExecutor21defaultTimeoutInvokerERKNSt3__18functionIFvvEEENS3_IFNS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEvEEE + 87460", "2 dod_stg 0x00000001029c0eac _ZNK5folly3TryINS_4UnitEE16throwUnlessValueEv + 363856", "3 dod_stg 0x00000001029c0fe4 _ZNK5folly3TryINS_4UnitEE16throwUnlessValueEv + 364168", "4 dod_stg 0x000000010293c494 _ZZN4bssl4GRPC8internal11DeleterImplI13stack_st_X509vE4FreeEPS3_ENUlPFvPvES6_E_8__invokeES8_S6_ + 3123856", "5 dod_stg 0x000000010293d840 _ZZN4bssl4GRPC8internal11DeleterImplI13stack_st_X509vE4FreeEPS3_ENUlPFvPvES6_E_8__invokeES8_S6_ + 3128892", "6 dod_stg 0x0000000102942004 _ZZN4bssl4GRPC8internal11DeleterImplI13stack_st_X509vE4FreeEPS3_ENUlPFvPvES6_E_8__invokeES8_S6_ + 3147264", "7 dod_stg 0x000000010293ca88 _ZZN4bssl4GRPC8internal11DeleterImplI13stack_st_X509vE4FreeEPS3_ENUlPFvPvES6_E_8__invokeES8_S6_ + 3125380", "8 dod_stg 0x0000000102cf133c _ZN5folly17exception_wrapper7InPlaceIN8facebook6hermes9inspector32MultipleCommandsPendingExceptionEE18get_exception_ptr_EPKS0_ + 1754216", "9 dod_stg 0x0000000102b8b50c _ZN5folly17exception_wrapper7InPlaceIN8facebook6hermes9inspector32MultipleCommandsPendingExceptionEE18get_exception_ptr_EPKS0_ + 288312", "10 dod_stg 0x0000000102d24518 _ZN5folly17exception_wrapper7InPlaceIN8facebook6hermes9inspector32MultipleCommandsPendingExceptionEE18get_exception_ptr_EPKS0_ + 1963588", "11 dod_stg 0x0000000102cfc338 _ZN5folly17exception_wrapper7InPlaceIN8facebook6hermes9inspector32MultipleCommandsPendingExceptionEE18get_exception_ptr_EPKS0_ + 1799268", "12 dod_stg 0x0000000102c710dc _ZN5folly17exception_wrapper7InPlaceIN8facebook6hermes9inspector32MultipleCommandsPendingExceptionEE18get_exception_ptr_EPKS0_ + 1229320", "13 dod_stg 0x0000000102d35565 _ZN5folly17exception_wrapper7InPlaceIN8facebook6hermes9inspector32MultipleCommandsPendingExceptionEE18get_exception_ptr_EPKS0_ + 2033297", "14 dod_stg 0x0000000102d356e5 _ZN5folly17exception_wrapper7InPlaceIN8facebook6hermes9inspector32MultipleCommandsPendingExceptionEE18get_exception_ptr_EPKS0_ + 2033681", "15 dod_stg 0x0000000102ced131 _ZN5folly17exception_wrapper7InPlaceIN8facebook6hermes9inspector32MultipleCommandsPendingExceptionEE18get_exception_ptr_EPKS0_ + 1737309", "16 dod_stg 0x000000010293fa4d _ZZN4bssl4GRPC8internal11DeleterImplI13stack_st_X509vE4FreeEPS3_ENUlPFvPvES6_E_8__invokeES8_S6_ + 3137609", "17 dod_stg 0x0000000102943521 _ZZN4bssl4GRPC8internal11DeleterImplI13stack_st_X509vE4FreeEPS3_ENUlPFvPvES6_E_8__invokeES8_S6_ + 3152669", "18 libswift_Concurrency.dylib 0x0000000197342775 D32E2751-9E33-3795-9DCE-7087DEE58A22 + 350069" ], "userCancelled":false }
I got the same issue since a more than a week, but only the reviewer get it, I cannot reproduce, but this prevent my app to be approved, I guess the problem comes from Apple, but there’s no way they’ll change anything, is there a solution that could be done on the developer side, at least to pass the review ?
I am experiencing the same situation. Apple has been rejecting it for two weeks. Is there a solution that could be done on the developer side, at least to pass the review?
I got the same issue since a more than a week, but only the reviewer get it, I cannot reproduce, but this prevent my app to be approved, I guess the problem comes from Apple, but there’s no way they’ll change anything, is there a solution that could be done on the developer side, at least to pass the review ?
I have the same issue on flutter. As of today. I wonder why this issue is not fixed after one year. What can I do to get passed this issues?
I ran into this yesterday and my app was rejected. I was able to reproduce the error (using TestFlight directly [not in the debugger]). I thought it might be a temporary problem, but it recurred the next day. I rebuilt the app (with a small, unrelated bug fix). Then I uploaded to the store and downloaded the new TestFlight build. Worked just fine. Rather than a bug in StoreKit itself, I wonder if there is something about how the build is prepared for TestFlight, or something that is inserted in the build or preparation process. Just a thought.
I was testing on simulator and what it cause for me the issue is re-creating subscriptions I had to delete StoreKit and recreate on Xcode and then upload revenucat. Which was caused the error and I simple DETELE THE OLD App and the problem was gone
@kaitlin do you guys have an other information on this issue? It still seems to be ocurring on 7.0.0 and above per lucas’ comment. I do have the flag usesStoreKit2IfAvailable set to false when configuring the package. This results in our team getting randomly rejected from app store review for a poor purchase experience, and it would be great if this got resolved.
DEBUG: ℹ️ Skipping products request for these products because they were already cached: c"ji_99.99_1m_arbitrage"]
DEBUG: ℹ️ This StoreProduct represents an SK1 product, the type of product cannot be determined, the value will be undefined. Use `StoreProduct.productCategory` instead.
DEBUG: ℹ️ Skipping products request for these products because they were already cached: a"ji_99.99_1m_arbitrage"]
DEBUG: ℹ️ Loaded receipt from url file:///private/var/mobile/Containers/Data/Application/39947464-B13B-46B3-BB39-2B0369EF6F16/StoreKit/sandboxReceipt
DEBUG: ℹ️ Skipping products request for these products because they were already cached: p"ji_99.99_1m_arbitrage"]
DEBUG: ℹ️ PostReceiptDataOperation: Started
INFO: ℹ️ Parsing receipt
INFO: ℹ️ Receipt parsed successfully
DEBUG: ℹ️ PostReceiptDataOperation: Posting receipt (source: 'purchase') (note: the contents might not be up-to-date, but it will be refreshed with Apple's servers):
DEBUG: ℹ️ There are no requests currently running, starting request POST /v1/receipts
DEBUG: ℹ️ API request started: POST '/v1/receipts'
ERROR: 😿‼️ The receipt is not valid. The purchased product was missing in the receipt. This is typically due to a bug in StoreKit.
DEBUG: ℹ️ API request failed: POST '/v1/receipts' (422): The receipt is not valid. The purchased product was missing in the receipt. This is typically due to a bug in StoreKit.
DEBUG: ℹ️ PostReceiptDataOperation: Finished
DEBUG: ℹ️ Serial request done: POST /v1/receipts, 0 requests left in the queue
INFO: 💰 Finishing transaction '2000000305270533' for product 'ji_99.99_1m_arbitrage'
ERROR: 😿‼️ The receipt is not valid. The purchased product was missing in the receipt. This is typically due to a bug in StoreKit.
ERROR: 💰 Product purchase for 'ji_99.99_1m_arbitrage' failed with error: Error Domain=RevenueCat.ErrorCode Code=8 "The receipt is not valid. The purchased product was missing in the receipt. This is typically due to a bug in StoreKit." UserInfo={rc_response_status_code=422, source_function=parseUnsuccessfulResponse(), readable_error_code=INVALID_RECEIPT, source_file=RevenueCat/HTTPClient.swift:617, NSLocalizedDescription=The receipt is not valid. The purchased product was missing in the receipt. This is typically due to a bug in StoreKit., rc_backend_error_code=7712, NSUnderlyingError=0x28204fdb0 {Error Domain=RevenueCat.BackendErrorCode Code=7712 "The purchased product was missing in the receipt. This is typically due to a bug in StoreKit." UserInfo={NSLocalizedDescription=The purchased product was missing in the receipt. This is typically due to a bug in StoreKit., rc_backend_error_code=7712}}}
'ERROR: ', eError: The receipt is not valid. The purchased product was missing in the receipt. This is typically due to a bug in StoreKit.]
DEBUG: ℹ️ Skipping products request for these products because they were already cached: 9"ji_99.99_1m_arbitrage"]
DEBUG: ℹ️ This StoreProduct represents an SK1 product, the type of product cannot be determined, the value will be undefined. Use `StoreProduct.productCategory` instead.
Also this thread is a duplicate of
Thanks!
Got this error here running in Simulator on my Mac when open paywall:
Error: Error Domain=NSCocoaErrorDomain Code=260 "The file “receipt” couldn’t be opened because there is no such file."
UserInfo={NSFilePath=/Users/XPTO123/Library/Developer/CoreSimulator/Devices/1111111-123-123-ABC3-000000000/data/Containers/Data/Application/99999999999-9999-999-9999-111111111111/StoreKit/receipt, NSUnderlyingError=0x600000e73ea0 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}
WARN: 🍎‼️ App running on sandbox without a receipt file. Unable to determine into eligibility unless you've purchased before and there is a receipt available.
How do I “ try testing with StoreKit 1 and seeing if the bug persists?”
This was fine last night when i tried it (for the first time). Now this is occurring. Up until now I’ve only ever seen sk1product populated, so I assumed it was using StoreKit 1 (my app deploys back to iOS 13, although I’ve been running in a 16.4 simulator).
I thought maybe the testing certificate had changed, so I uploaded it again, but it made no difference.
FYI, iOS/Apple are approving these test purchases (in simulator using a synced storekit file), and I can see the transactions in Xcode.
Oh! And `Purchases.shared.getCustomerInfo` is returning a valid receipt, it’s only when I purchase a package that this fails for me.
Hi, the same issue in native iOS. StoreKit2 is turn off.
anyone know how I can set the storekit2 to false in a swiftui project???
I’m using flutter and it’s actually deprecated in the library and I’m not overriding that so I’m presuming that’s not where the problem is.
Looks like RevenueCat has realized that StoreKit 2 is unstable and have deprecated it for now. I think the problem is on the Apple server side. I did not change my code (other than forcing it to use StoreKit 1) and it finally passed Apple Review. Unfortunately, Apple Review will never admit that the problem is on their side.
Just to be clear:
I’m using flutter and it’s actually deprecated in the library and I’m not overriding that so I’m presuming that’s not where the problem is.
The thing that solved it for me, was to set this variable to false: usesStoreKit2IfAvailable
I’m getting this in TestFlight builds. The trouble I’ve had with iOS purchases in the last couple of weeks makes me wonder who is responsible for this and how can they be held to account. The process just screams of unprofessionalism. The whole caboodle is an absolute farce. No trouble at all with Google Play purchases.
Really this only happened on occasion in development. It seemed to happen once, when I clicked my subscription button like 6 or 7 times eventually it started working, and I didn’t see the error anymore on a dev client (so once I got past the fail state once, I was good for a while). I don’t know a ton about how the SDK works but I do see in the configure method (static configure({ apiKey, appUserID, observerMode, userDefaultsSuiteName, usesStoreKit2IfAvailable, useAmazon }: PurchasesConfiguration): void;). There’s a parameter usesStoreKit2IfAvailable that defaults to false, I think this feature is in beta - but my only guess is that this bug is somehow related to storeKit2? I didn’t end up ever setting this to true and don’t really know but that was going to be my next attempt if I failed review again. It seems that kaitlin suggested setting it to storeKit 1 and I assume that just means not supplying true to this parameter. To Kaitlins response, I saw this error without setting the usesStoreKit2IfAvailable parameter to true.
To pass review - I probably just got a reviewer who didn’t encounter the bug. And in production (which my app is now “Juice Reel”) you can click the purchase subscription in the store and it seems to work every time. So I hope that this is a bug that only exists on test purchases in iOS, so if you can pass review and get lucky you should be alright.
My app keeps getting rejected due to this problem as well. Can you please explain what you did to fix the issue. The symptoms are exactly as you described.
To anyone else looking here, I was able to get past app store review with revenue cat and 1. the clicking on IAPs and subscriptions load much faster on apples production servers (which was extremely slow on their dev ones). And 2. this bug doesn’t seem to exist anymore?? It’s very difficult to tell as I am not purchasing my own IAPs in my app, but I have had successful subscriptions and IAP purchases so I assume everything is OK. Again, pretty hard to tell without proper usage logging.