URLSession dataTask возвращается без ошибок и данных, вызывая ошибку SwiftyStoreKit.ReceiptError 1

Почему следующий код заставляет URLSession возвращать nil как для data, так и для error?

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:

Если запрос завершается успешно, параметр данных блока обработчика завершения содержит данные ресурса, а параметр ошибки равен нулю. Если запрос не выполняется, параметр данных равен нулю, а параметр ошибки содержит информацию об ошибке.

Я прочитал это так: либо data, либо error всегда должны быть отличными от нуля. Но, похоже, здесь этого не происходит. В какой ситуации оба значения равны нулю?

(Если помогает - рассматриваемый URL-адрес - это API проверки квитанции iTunes по адресу https://buy.itunes.apple.com/verifyReceipt, а затронутые пользователи - обозреватели в Apple, которые обычно не хотят помогать в отладке. Этот код на самом деле является частью SwiftyStoreKit и вызывает ошибку SwiftyStoreKit.ReceiptError error 1 для проверяющего, но никогда для кого-либо еще. .)


person HughHughTeotl    schedule 02.08.2019    source источник


Ответы (1)


Это может зависеть от HTTPURLResponse, которое вы игнорируете в обработчике завершения dataTask (документация для URLSession.dataTask указывает, что ответ, хотя и имеет тип URLResponse, на самом деле имеет тип HTTPURLResponse, поэтому у него будет свойство statusCode, которое поможет понять результат вашего запроса.

Запрос вполне мог быть успешным, но без возврата данных (т. Е. 204 Нет содержимого или ответ 300 Перенаправить ответ). У них не будет ответа с данными, но также не будет ответа с ошибкой, поскольку запрос не завершился ошибкой.

person Jon Jones    schedule 02.08.2019