Можно ли автоматически подключиться к WiFi, захватив QR-код? - PullRequest
0 голосов
/ 06 марта 2020

Я новичок ie в iOS разработке (SwiftUI).

Недавно я столкнулся с проблемой подключения к WiFi с помощью захвата QR-кода. Интересно, если есть какое-либо возможное решение для подключения к WiFi напрямую с помощью QR-кода. После того, как я провел много исследований, я все еще не могу найти никаких ссылок по этому вопросу. Вот мои ключевые слова: SwiftUI, Swift, QR-код, Wi-Fi, iOS.

Что у меня сейчас:

ContentView

struct ContentView: View {
    @State private var isShowingScanner = false
    @State private var resultOfScanning: String = "Result will be shown here..."
    var body: some View {
        VStack {
            Button(action: { self.isShowingScanner = true }, label: { Text("Scan Button") })
                .sheet(isPresented: self.$isShowingScanner) {
                    CodeScannerView(codeTypes: [.qr], simulatedData: "www.opgg.com", completion: self.handleScan)
            }
            Text("\(resultOfScanning)")
        }
    }

    func handleScan(result: Result<String, CodeScannerView.ScanError>) {
        self.isShowingScanner = false
        switch result {
        case .success(let code):
            let codeStr = code as! String
            self.resultOfScanning = codeStr
        case .failure(let error):
            print("Scanning failed")
        }
    }
}

CodeScannerView (Ссылка: статья Пола Хадсона)

Что я хочу построить: Я хочу использовать это Приложение, автоматически подключающееся к указанному c WiFi с помощью захвата QR-кода (содержит SSID и пароль WiFi).

В чем моя проблема: Я не могу найти способ подключения для указания c WiFi автоматически с помощью QR-кода. Похоже, что никто не говорил об этой проблеме.

Может кто-нибудь знает, что, как решить вышеупомянутые проблемы?

Спасибо за комментарии и ответы.

1 Ответ

0 голосов
/ 11 марта 2020

У нас есть четыре шага для решения этой проблемы.

1.Сохраните QR-код, который содержит указанную c информацию о точке доступа WiFi ( SSID, пароль, тип шифрования ) .

2.Конвертировать JSON данные QR-кода в Словарь .

3.Получить значение типа SSID, Пароль и Шифрование из вышеупомянутого словаря.

4.Используйте NEHotspotConfiguration Apple API, чтобы установить наш SSID, пароль и тип шифрования и подключиться к указанной c WiFi Hotspot .

ps Вашему приложению необходим сертификат подписи, чтобы активировать некоторые функции вашего проекта и Apple API.

Давайте посмотрим, что я здесь сделал:

func handleScan(result: Result<String, CodeScannerView.ScanError>) {
switch result {
case .success(let code):
    let data_code = code.data(using: .utf8)
    do {
        let dict_code = try JSONSerialization.jsonObject(with: data_code!, options: .allowFragments) as! [String : Any]
        let wifi_ssid = dict_code["S"] as! String
        let wifi_pwd = dict_code["P"] as! String
        let wifi_type = dict_code["T"] as! String

        let configuration = NEHotspotConfiguration.init(ssid: wifi_ssid, passphrase: wifi_pwd, isWEP: self.checkWifiType(type: wifi_type))
        configuration.joinOnce = true
        NEHotspotConfigurationManager.shared.apply(configuration) {
            (error) in
            if error != nil {
                if let errorStr = error?.localizedDescription {
                    print("Error Information:\(errorStr)")
                }
                if (error?.localizedDescription == "already associated.") {
                    print("Connected!")
                } else {
                    print("No Connected!")
                }
            } else {
                print("Connected!")
            }
        }

        print("Dict_Code:\(dict_code)")
    } catch (let error) {
        print("JSONSerial... Convert Error:\(error.localizedDescription)")
    }

case .failure(let error):
    self.connectionStatus = "Scanning failed!"
}
}

После этого я наконец могу отсканировать свой собственный QR-код и подключиться к указанной c WiFi Hotspot.

...