NEHotspotConfigurationManager получает это предупреждение:"Невозможно подключиться к сети<имя сети>", пока ошибка равна нулю

Поэтому я пытаюсь контролировать состояние соединения с помощью доводчиков:

 func reconnect(success: @escaping () -> Void, failure: @escaping () -> Void) {
    let manager = NEHotspotConfigurationManager.shared
    let ssid = CameraManager.camera.uuid
    let password = "password"
    let isWEP = false
    let hotspotConfiguration = NEHotspotConfiguration(ssid: ssid, passphrase: password, isWEP: isWEP)
    hotspotConfiguration.joinOnce = true
    manager.apply(hotspotConfiguration) { (error) in
        if (error != nil) {

          if let error = error {
                switch error._code {
                case 8:
                    print("internal error")
                    failure()
                case 7:
                    NotificationCenter.default.post(name: Notification.Name(rawValue: "cancelFromHotSpot"), object: nil)
                    failure()
                    self.stopSession()
                case 13:
                    success()
                    DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
                        self.startSession()
                    }
                default:
                    break
                }
        }

        if error == nil {
            print("success connecting wifi")
            success()
            DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
                self.startSession()
            }
        }
    }
}

И все же есть сценарий, что я получаю это предупреждение "Невозможно подключиться к сети", пока ошибка равна нулю, есть идеи?

3 ответа

Решение

Я думаю, что это поведение iOS ошибка, и мы не можем избежать.

Эта проблема также обсуждалась на форуме разработчиков Apple, и ответ сотрудников Apple был ниже

"Мне нечего сказать здесь, кроме того, что я сказал 13 февраля. Тот факт, что ошибки из подсистемы Wi-Fi не сообщаются через обработчик завершения, является ожидаемым поведением. Если вам не нравится это поведение - и Чтобы быть ясным, я лично согласен с вами об этом - лучший способ продвинуться - подать отчет об ошибке с просьбой изменить его. Пожалуйста, напишите свой номер ошибки, просто для записи. "

Это обсуждалось здесь

Так что у меня нет прекрасных идей, к сожалению. Все идеи у меня есть две ниже (они не решают эту проблему идеально.)

  1. Ждите исправления ошибки в будущем выпуске.
  2. Отдельный код "Применение конфигурации" и код связи, как показано ниже.
@IBAction func setConfigurationButtonTapped(_ sender : Any) {
    manager.apply(hotspotConfiguration) { (error) in
    if(error != nil){
        // Do error handling
    }else{
        // Wait a few seconds for the case of showing "Unable to join the..." dialog.
        // Check reachability to the device because "error == nil" does not means success.
    }
}
@IBAction func sendButtonTapped(_ sender : Any) {
    self.startSession()
}

iOS 13 - Патч

У меня была такая же проблема, но я решил ее, удалив сначала все существующие записи конфигурации:

NEHotspotConfigurationManager.shared.getConfiguredSSIDs { (wifiList) in
    wifiList.forEach { NEHotspotConfigurationManager.shared.removeConfiguration(forSSID: $0) }
    // ... from here you can use your usual approach to autoconnect to your network
}

Возможно, это не всегда возможное решение, поскольку оно немного радикально, но для меня сработало как шарм.

PS: Я использую это в приложении, работающем под управлением iOS 13. Насколько я знаю, он должен работать также на iOS 11 и 12, но я не тестировал его.

Удалять hotspotConfiguration.joinOnce = trueработай на меня

Другие вопросы по тегам