Я пытаюсь установить интервал тайм-аута 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.
Три мысли:
CNCopyCurrentNetworkInfo
функция в основном фундаменте. Нет необходимости ждать сбоя запроса, если пользователь не в той сети.NSTimer
) сделать видимым какой-то пассивный индикатор пользовательского интерфейса, который говорит «Ошибка сетевого подключения» (без принуждения пользователя взаимодействовать с этим индикатором). Это говорит пользователю, что что-то может быть не так, не вызывая сбоев, если сеть просто по какой-то причине работает медленно (большие потери пакетов из-за помех многолучевого распространения, микроволновой печи и т. Д.)В вашем случае, поскольку сеть может меняться, вам, вероятно, следует периодически запускать дополнительные сетевые запросы параллельно с первыми и отменять исходные запросы после выполнения более двух или трех из них. Вы также можете использовать CNCopyCurrentNetworkInfo
Или, еще лучше, достижимость — чтобы определить, когда сеть изменится, и подождать, чтобы запланировать первый запрос, пока вы не подключитесь к сети.
Других решений пока нет …