ios - URLSession dataTask返回无错误无数据,导致SwiftyStoreKit.ReceiptError错误1

标签 ios swift nsurlsession urlsession swiftystorekit

为什么以下代码会导致 URLSessiondataerror 返回 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 行。

根据 Apple 在 URLSession.dataTask 上的文档:

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 应始终为非零。但这似乎并没有发生在这里。 在什么情况下两者都为零?

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

最佳答案

这可能取决于您在 dataTask 的完成处理程序中忽略的 HTTPURLResponse(documentation 对于 URLSession.dataTask指示响应虽然是 URLResponse 类型,但实际上是 HTTPURLResponse 类型 - 因此它会有一个 statusCode 属性,有助于理解您请求的结果..

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

关于ios - URLSession dataTask返回无错误无数据,导致SwiftyStoreKit.ReceiptError错误1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57330730/

相关文章:

ios - 困惑 : Non-nil value unwrapped nil, if-let 子句在 nil 值上执行 block

objective-c - 将数据添加到 SCNNode 并归档

ios - 如何使用 UIPageViewController 在第一个和最后一个索引处停止 UIScrollView 的弹跳?

swift - 使用 contentsOfFile 参数创建 NSData 时指定文件偏移量

Swift 4 - 如何在不重复代码的情况下调用从多个函数中的函数返回的一段代码?

swift - 如何从 NSURLSession.sharedSession().dataTaskWithRequest 获取数据

iOS:无法在 CallKit 中获取拨出电话事件

php - 查询通过 phpMyAdmin 工作,但不能通过从 viewController 调用的 php 脚本工作

ios - 在 ARKit 水平面上绘制填充多边形

ios - 在 ViewController 上获取初始化程序错误