URLSession dataTask returns 没有错误也没有数据,导致 SwiftyStoreKit.ReceiptError 错误 1

URLSession dataTask returns with no error and no data, causing SwiftyStoreKit.ReceiptError error 1

为什么对于 dataerror,以下代码会导致 URLSession 到 return nil

let task = URLSession.shared.dataTask(with: storeRequest as URLRequest) { data, _, error -> Void in

    // there is an error
    if let networkError = error {
        print("There was a network error")
        return
    }

    // there is no data
    guard let safeData = data else {
        print("No network error, but no data either")
        return
    }
...

在 运行 这段代码中,一位用户点击了 No network error, but no data either 行。

根据 URLSession.dataTask 上的 Apple 文档:

If the request completes successfully, the data parameter of the completion handler block contains the resource data, and the error parameter is nil. If the request fails, the data parameter is nil and the error parameter contain information about the failure.

我读作:dataerror 应始终为非零。但这似乎并没有发生在这里。 什么情况下两者都是nil?

(如果有帮助 - 问题中的 URL 是 https://buy.itunes.apple.com/verifyReceipt 处的 iTunes 收据验证 API 并且受影响的用户是 Apple 的审阅者,他们通常不愿意协助在调试中。此代码实际上是 SwiftyStoreKit 的一部分,它会导致审阅者出现错误 SwiftyStoreKit.ReceiptError error 1 - 但不会导致其他任何人出现错误。)

这可能取决于您在 dataTask 的完成处理程序中忽略的 HTTPURLResponsedocumentation 对于 URLSession.dataTask 表示响应,而类型 URLResponse,实际上是类型 HTTPURLResponse - 所以它会有一个 statusCode 属性 这将有助于理解您的请求结果..

请求很可能已成功,但没有返回任何数据(即 204 No Content response or a 300 Redirect 响应)。这些不会有数据响应,但也不会有错误响应,因为请求没有失败。