Question

Purchase not working on watchOS (Errors: Unable to load receipt & The receipt is missing)

  • 21 April 2022
  • 2 replies
  • 104 views

Userlevel 1
Badge +2

Hi,

I’m currently trying to let users purchase an IAP on watchOS, but with the exact same code as on iOS (which works), I’m getting some errors (SDK version 4.2.1):

 

2022-04-21 14:05:00.526782+0200 Anime Manga Tracker Watch App WatchKit Extension[338:26944] [Purchases] - DEBUG: ℹ️ Make purchase called: purchase(sk1Product:payment:package:completion:)

2022-04-21 14:05:00.532433+0200 Anime Manga Tracker Watch App WatchKit Extension[338:26944] [Purchases] - DEBUG: 💰 Purchasing product from package  - com.xxxxx.xxxxx.xxxx in Offering XXXXX

2022-04-21 14:05:00.534097+0200 Anime Manga Tracker Watch App WatchKit Extension[338:27113] [Purchases] - DEBUG: ℹ️ PaymentQueue updatedTransaction: com.xxxxx.xxxxx.xxxx 2000000012345678 () 2000000012345678 - 1

2022-04-21 14:05:00.553831+0200 Anime Manga Tracker Watch App WatchKit Extension[338:27113] [Purchases] - DEBUG: ℹ️ Unable to load receipt, ensure you are logged in to a valid Apple account.

2022-04-21 14:05:00.554048+0200 Anime Manga Tracker Watch App WatchKit Extension[338:27113] [Purchases] - DEBUG: ℹ️ Receipt empty, refreshing

2022-04-21 14:05:02.185744+0200 Anime Manga Tracker Watch App WatchKit Extension[338:27112] [Purchases] - DEBUG: ℹ️ Unable to load receipt, ensure you are logged in to a valid Apple account.

2022-04-21 14:05:02.185908+0200 Anime Manga Tracker Watch App WatchKit Extension[338:27112] [Purchases] - WARN: 🍎‼️ Unable to load receipt, ensure you are logged in to a valid Apple account.

2022-04-21 14:05:02.186114+0200 Anime Manga Tracker Watch App WatchKit Extension[338:27112] [Purchases] - ERROR: 🍎‼️ The receipt is missing.

2022-04-21 14:05:02.186737+0200 Anime Manga Tracker Watch App WatchKit Extension[338:26944] [Purchases] - ERROR: 😿‼️ Unexpected backend error when posting receipt. Make sure you are on latest SDK version and let us know if problem persists.

 

The watchOS app is able to receive product info (I can see the price being fetched):

DEBUG: 😻 SKProductsRequest request received response

DEBUG: 😻 SKProductsRequest did finish

DEBUG: 😻 CustomerInfo updated from network.

 

I can’t find a lot of docs on watchOS implementation, is there anything different to the iOS side that needs to be done on my end? Thanks!


2 replies

Badge +4

Hi Joost, did you manage to get anywhere with this?

We have a customer who is experiencing this and it’s hard to know how to support them.

Here’s some snippets from their logs

3:03:17.4430 📄: [💵🐱] ℹ️ GetCustomerInfoOperation: Finished
13:03:17.4430 📄: [💵🐱] ℹ️ Serial request done: GET subscribers/$RCAnonymousID%3A61554ec05530479b903077d5eff6f2d0, 0 requests left in the queue
13:03:17.4430 📄: [💵🐱] ℹ️ GetOfferingsOperation: Started
13:03:17.4430 📄: [💵🐱] ℹ️ There are no requests currently running, starting request GET subscribers/$RCAnonymousID%3A61554ec05530479b903077d5eff6f2d0/offerings
13:03:17.4450 📄: [💵🐱] ℹ️ API request started: GET /v1/subscribers/$RCAnonymousID:61554ec05530479b903077d5eff6f2d0/offerings
13:03:17.5940 📄: [💵🐱] ℹ️ API request completed: GET /v1/subscribers/$RCAnonymousID:61554ec05530479b903077d5eff6f2d0/offerings (200)
13:03:17.5950 📄: [💵🐱] ℹ️ No existing products cached, starting store products request for: ["edition.sixmonthly", "pro_one_time", "edition", "edition.monthly"]
13:03:17.5950 📄: [💵🐱] ℹ️ Found an existing request for products: ["edition.monthly", "pro_one_time", "edition.sixmonthly", "edition"], appending to completion
13:03:17.5950 📄: [💵🐱] ℹ️ GetOfferingsOperation: Finished
13:03:17.5960 📄: [💵🐱] ℹ️ Serial request done: GET subscribers/$RCAnonymousID%3A61554ec05530479b903077d5eff6f2d0/offerings, 0 requests left in the queue
13:03:17.5960 📄: [💵🐱] ℹ️ No existing products cached, starting store products request for: ["edition.sixmonthly", "pro_one_time", "edition", "edition.monthly"]
13:03:17.6360 📄: [💵🐱] 😻 Store products request finished
13:03:17.6360 📄: [💵🐱] 😻 Store products request received response
13:03:17.6370 📄: [💵🐱] 😻 Offerings updated from network.
13:03:17.6370 📄: [💵🐱] 😻 Offerings updated from network.
13:03:17.6370 📄: [💵] Offerings: <Offerings {
13:03:53.2150 📄: [💵] restore
13:03:53.2190 📄: [💵🐱] ℹ️ Found 0 unsynced attributes for App User ID: $RCAnonymousID:61554ec05530479b903077d5eff6f2d0
13:03:53.2200 📄: [💵🐱] ℹ️ Force refreshing the receipt to get latest transactions from Apple.
13:03:53.2240 📄: [💵🐱] ℹ️ SKReceiptRefreshRequest started
13:04:05.4250 🔴: [💵🐱] 🍎‼️ SKRequest failed: An unknown error occurred
13:04:05.4370 ⚠️: [💵🐱] 🍎‼️ Unable to load receipt, ensure you are logged in to a valid Apple account.
13:04:05.4370 🔴: [💵🐱] 🍎‼️ The receipt is missing.
13:04:05.4400 📄: [💵] restore callback nil, The receipt is missing.
13:04:23.8350 📄: [💵] restore
13:04:23.8390 📄: [💵🐱] ℹ️ Found 0 unsynced attributes for App User ID: $RCAnonymousID:61554ec05530479b903077d5eff6f2d0
13:04:23.8390 📄: [💵🐱] ℹ️ Force refreshing the receipt to get latest transactions from Apple.
13:04:23.8430 📄: [💵🐱] ℹ️ SKReceiptRefreshRequest started
13:04:24.3340 🔴: [💵🐱] 🍎‼️ SKRequest failed: An unknown error occurred
13:04:24.3550 ⚠️: [💵🐱] 🍎‼️ Unable to load receipt, ensure you are logged in to a valid Apple account.
13:04:24.3550 🔴: [💵🐱] 🍎‼️ The receipt is missing.
13:04:24.3590 📄: [💵] restore callback nil, The receipt is missing.
13:04:29.7100 📄: [💵] purchase(Period(rawValue: 1))
13:04:29.7100 📄: [💵🐱] 💰 Purchasing Product 'edition' from package in Offering 'pro'
13:04:29.7130 📄: [💵🐱] ℹ️ Adding payment for product 'edition'. 0 transactions already in the queue.
13:04:29.7180 📄: [💵🐱] ℹ️ StoreKit1Wrapper (0x17da2f60) updatedTransaction: edition 0
13:04:36.0860 📄: [💵🐱] ℹ️ StoreKit1Wrapper (0x17da2f60) updatedTransaction: edition (An unknown error occurred) 2
13:04:36.0890 🔴: [💵🐱] 🍎‼️ This product is already active for the user.
13:04:36.0910 📄: [💵🐱] 💰 Finishing transaction 'D18C9AAB-3FBC-4173-A750-281EB63665AD' for product 'edition'
13:04:36.0920 🔴: [💵🐱] 💰 Product purchase for 'edition' failed with error: Error Domain=RevenueCat.ErrorCode Code=6 "This product is already active for the user." UserInfo={NSUnderlyingError=0x17d29910 {Error Domain=SKErrorDomain Code=0 "An unknown error occurred" UserInfo={NSUnderlyingError=0x17dc7e50 {Error Domain=ASDServerErrorDomain Code=3532 "You’re currently subscribed to this." UserInfo={NSLocalizedFailureReason=You’re currently subscribed to this.}}, NSLocalizedDescription=An unknown error occurred}}, source_function=productAlreadyPurchasedError(error:fileName:functionName:line:), source_file=RevenueCat/ErrorUtils.swift:399, readable_error_code=PRODUCT_ALREADY_PURCHASED, NSLocalizedDescription=This product is already active for the user.}
13:04:36.0920 📄: [💵🐱] ℹ️ StoreKit1Wrapper (0x17da2f60) removedTransaction: edition (An unknown error occurred) ["NSLocalizedDescription": An unknown error occurred, "NSUnderlyingError": Error Domain=ASDServerErrorDomain Code=3532 "You’re currently subscribed to this." UserInfo={NSLocalizedFailureReason=You’re currently subscribed to this.}] 2
13:04:36.0930 📄: [💵] fetchUser(thenFetchOfferings: false)
13:04:36.0950 📄: [💵🐱] ℹ️ Vending CustomerInfo from cache.
13:04:36.1080 📄: [💵] Purchaser info: <CustomerInfo:
13:04:36.1080 📄: [💵] Cache: free Date: nil
13:04:36.1080 📄: [💵] OG Version: -- OG Date: --
13:04:36.1080 📄: [💵] Subscriber Level: free Date: nil
13:04:47.3970 📄: [💵] purchase(Period(rawValue: 1))
13:04:47.3970 📄: [💵🐱] 💰 Purchasing Product 'edition' from package in Offering 'pro'
13:04:47.3990 📄: [💵🐱] ℹ️ Adding payment for product 'edition'. 0 transactions already in the queue.
13:04:47.4000 📄: [💵🐱] ℹ️ StoreKit1Wrapper (0x17da2f60) updatedTransaction: edition 0
13:04:49.9700 📄: [💵🐱] ℹ️ StoreKit1Wrapper (0x17da2f60) updatedTransaction: edition (An unknown error occurred) 2
13:04:49.9700 🔴: [💵🐱] 🍎‼️ This product is already active for the user.
13:04:49.9730 📄: [💵🐱] 💰 Finishing transaction '55A90E01-A27D-44E6-A91B-1F1F9C040315' for product 'edition'
13:04:49.9740 🔴: [💵🐱] 💰 Product purchase for 'edition' failed with error: Error Domain=RevenueCat.ErrorCode Code=6 "This product is already active for the user." UserInfo={NSUnderlyingError=0x17e15580 {Error Domain=SKErrorDomain Code=0 "An unknown error occurred" UserInfo={NSUnderlyingError=0x17e17a00 {Error Domain=ASDServerErrorDomain Code=3532 "You’re currently subscribed to this." UserInfo={NSLocalizedFailureReason=You’re currently subscribed to this.}}, NSLocalizedDescription=An unknown error occurred}}, NSLocalizedDescription=This product is already active for the user., readable_error_code=PRODUCT_ALREADY_PURCHASED, source_file=RevenueCat/ErrorUtils.swift:399, source_function=productAlreadyPurchasedError(error:fileName:functionName:line:)}
13:04:49.9750 📄: [💵🐱] ℹ️ StoreKit1Wrapper (0x17da2f60) removedTransaction: edition (An unknown error occurred) ["NSLocalizedDescription": An unknown error occurred, "NSUnderlyingError": Error Domain=ASDServerErrorDomain Code=3532 "You’re currently subscribed to this." UserInfo={NSLocalizedFailureReason=You’re currently subscribed to this.}] 2
13:04:49.9760 📄: [💵] fetchUser(thenFetchOfferings: false)
13:04:49.9780 📄: [💵🐱] ℹ️ Vending CustomerInfo from cache.
13:04:49.9910 📄: [💵] Purchaser info: <CustomerInfo:
13:04:49.9910 📄: [💵] Cache: free Date: nil
13:04:49.9910 📄: [💵] OG Version: -- OG Date: --
13:04:49.9910 📄: [💵] Subscriber Level: free Date: nil
20:27:20.5970 📄: [💵] restore
20:27:20.6180 📄: [💵🐱] ℹ️ Found 0 unsynced attributes for App User ID: $RCAnonymousID:61554ec05530479b903077d5eff6f2d0
20:27:20.6180 📄: [💵🐱] ℹ️ Force refreshing the receipt to get latest transactions from Apple.
20:27:20.6210 📄: [💵🐱] ℹ️ SKReceiptRefreshRequest started
20:27:22.2010 🔴: [💵🐱] 🍎‼️ SKRequest failed: An unknown error occurred
20:27:22.2200 ⚠️: [💵🐱] 🍎‼️ Unable to load receipt, ensure you are logged in to a valid Apple account.
20:27:22.2210 🔴: [💵🐱] 🍎‼️ The receipt is missing.
20:27:22.2250 📄: [💵] restore callback nil, The receipt is missing.
20:27:25.0020 📄: [💵] purchase(Period(rawValue: 1))

 

Userlevel 1
Badge +2

Hi @Lewis 

Nope, I decided just not to let people purchase from the Watch. I don’t remember things I tried or if I got it working in the end. Sorry!

Reply