Установить интервал ожидания сеанса URLSession

Я пытаюсь установить интервал тайм-аута URLSession, скажем, 5 секунд. Веб-страница является локальной страницей, поэтому она должна быть загружена за это время. Если веб-страница не загружается в течение 5 секунд, я хочу, чтобы всплыло предупреждающее сообщение и попросило пользователя подключиться к сети. У меня вопрос, как я могу реализовать это с рабочим кодом, который у меня уже есть? Я попытался использовать несколько разных примеров (один закомментирован), но не повезло. Любая помощь приветствуется 🙂

func loadINFO(){

let urlString = "mytestPHP.php"
let url = URL(string: urlString)

//Try To Set Timout Interval...
//let urlconfig = URLSessionConfiguration.default
//urlconfig.timeoutIntervalForRequest = 5
//urlconfig.timeoutIntervalForResource = 5
//let session = URLSession(configuration: urlconfig)URLSession.shared.dataTask(with:url!) { (data, response, error ) in
if error != nil {

//Alert User That They Are Not Connected To The Device
self.CreateAlert(title: "Error!", message: "Please Connect To Network and Try Again")
print(error as Any)

} else {do {
let parsedData = try JSONSerialization.jsonObject(with: data!, options: []) as! [String:Any]
if let ssid = parsedData["SSID"] as? String,
let pass = parsedData["PASS"] as? String {
DispatchQueue.main.async {
// Update UI
self.SSID_INPUT.text = (ssid)
self.PASS_INPUT.text = (pass)

}

}
}

catch let error as NSError {

print(error)
}
}

}.resume()

}

Я до сих пор не получил ответа на этот вопрос … если у кого-то есть лучшее решение, я весь в ушах.

Изменить: просто чтобы уточнить немного дальше. Веб-сервер php работает на устройстве, на котором я меняю ssid и psk. Поэтому, если пользователь не находится в правильной сети, я бы хотел, чтобы он получил мое предупреждение. Дело в том, что ssid не является статическим, поэтому я не могу проверить, связаны ли они с определенным строковым значением. Вот почему я хотел посмотреть, смогу ли я уменьшить интервал ожидания сеанса по умолчанию и сказать (через несколько секунд), находятся ли они в сети, посмотрев, могут ли они перейти на веб-страницу php.

0

Решение

Три мысли:

  • Вы можете проверить, находится ли пользователь в правильной сети Wi-Fi, используя CNCopyCurrentNetworkInfo функция в основном фундаменте. Нет необходимости ждать сбоя запроса, если пользователь не в той сети.
  • Я предполагаю, что у вас есть сбои, вызванные сотовой сетью, принимающей запрос, который должен быть отправлен (возможно, отключен) в сеть Wi-Fi. Попробуйте отключить сотовую сеть на уровне запроса или сеанса, и многие вещи, вероятно, начнут работать волшебным образом.
  • Вместо того, чтобы сделать тайм-аут сетевого запроса (который убивает соединение, которое все еще может быть успешным, если сеть изворотливая), вы должны использовать обычный таймер (NSTimer) сделать видимым какой-то пассивный индикатор пользовательского интерфейса, который говорит «Ошибка сетевого подключения» (без принуждения пользователя взаимодействовать с этим индикатором). Это говорит пользователю, что что-то может быть не так, не вызывая сбоев, если сеть просто по какой-то причине работает медленно (большие потери пакетов из-за помех многолучевого распространения, микроволновой печи и т. Д.)

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]