Сетевое соединение было потеряно во время `application: openURL: options` - PullRequest
1 голос
/ 22 января 2020

Мы используем глубокие ссылки для полной проверки приложения, над которым мы работаем. Упомянутые глубокие ссылки приводят к вызову метода делегата приложения:

- (BOOL)application:(UIApplication *)application
   openURL:(NSURL *)url
   options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{

. Это приложение использует React Native, используя встроенный Linking API. Иногда отправка сетевого запроса, когда мы получаем Linking обратный вызов, работает, но иногда мы получаем сетевую ошибку:

Task <D47D1F90-E2D1-4AB7-8706-8737B68CC5E8>.<180> finished with error [-1005] Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={_kCFStreamErrorCodeKey=53, NSUnderlyingError=0x283352ac0 {Error Domain=kCFErrorDomainCFNetwork Code=-1005 "(null)" UserInfo={NSErrorPeerAddressKey=<CFData 0x281ed9130 [0x1e9babcb0]>{length = 16, capacity = 16, bytes = 0x100201bb34d2847e0000000000000000}, _kCFStreamErrorCodeKey=53, _kCFStreamErrorDomainKey=1}}, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <D47D1F90-E2D1-4AB7-8706-8737B68CC5E8>.<180>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "LocalDataTask <D47D1F90-E2D1-4AB7-8706-8737B68CC5E8>.<180>"

У меня был довольно обширный Google, и кажется, что это может быть вызвано тем, что сетевой запрос выполняется в фоновом режиме, однако Apple достаточно четко указывает в документах для этого метода:

Если URL-адрес приходит, когда ваше приложение приостановлено или работает в фоновом режиме, система перемещает ваше приложение на передний план перед вызовом этого метода.

Есть что-то, что мы не должны здесь делать? Кто-нибудь еще видел подобные проблемы?

Обновление

Кажется, это работает нормально при первом открытии ссылки после запуска приложения, но при последующих вызовах происходит сбой. Кажется, ничто не вызывается в другом порядке, поэтому очень странно, почему мы видим такой шаблон!

1 Ответ

1 голос
/ 25 февраля 2020

Это известная проблема, связанная с сохранением URLSession, но ОС использует основной сокет TCP, и Apple предлагает несколько решений, которые можно увидеть здесь .

В моем сценарии я не хотел go поиграться с внутренним использованием URLSession в React Native, поэтому мы просто сейчас повторяем запрос один раз, и он работает!

...