是否可以通过捕获二维码自动连接到 WiFi?
Is it possible to connect to WiFi automatically by capturing QR-Code?
我是 iOS 开发的新手(SwiftUI)。
最近遇到了一个抓二维码连接wifi的问题。
我想知道是否有任何可能的解决方案可以通过使用 QR-Code 直接连接到 WiFi。
在我做了很多研究之后,我仍然找不到关于这个问题的任何参考资料。
我的关键词是:SwiftUI, Swift, QR-Code, 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(参考:Paul Hudson 的文章)
我想建造什么:
我想使用这个应用程序,通过捕获二维码自动连接到特定的WiFi(它包含WiFi的SSID和密码)。
我的问题是什么:
我找不到使用二维码自动连接到特定 WiFi 的方法。好像没人讨论过这个问题
请问有人知道如何解决上述问题吗?
感谢评论和回答。
我们有四个步骤来处理这个问题。
1.Capture包含特定WiFi热点信息的二维码(SSID、密码、加密类型)。
2.Convert JSON QR 码的数据 到字典.
3.Get 上述字典中的 SSID、密码和加密类型值。
4.Use NEHotspotConfiguration Apple API 设置我们的 SSID、密码和加密类型并连接到特定的 WiFi 热点。
p.s。您的应用程序需要签名证书才能激活您的项目和 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!"
}
}
完成后,我终于可以扫描自己的二维码并连接到特定的WiFi热点了。
我是 iOS 开发的新手(SwiftUI)。
最近遇到了一个抓二维码连接wifi的问题。 我想知道是否有任何可能的解决方案可以通过使用 QR-Code 直接连接到 WiFi。 在我做了很多研究之后,我仍然找不到关于这个问题的任何参考资料。 我的关键词是:SwiftUI, Swift, QR-Code, 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(参考:Paul Hudson 的文章)
我想建造什么: 我想使用这个应用程序,通过捕获二维码自动连接到特定的WiFi(它包含WiFi的SSID和密码)。
我的问题是什么: 我找不到使用二维码自动连接到特定 WiFi 的方法。好像没人讨论过这个问题
请问有人知道如何解决上述问题吗?
感谢评论和回答。
我们有四个步骤来处理这个问题。
1.Capture包含特定WiFi热点信息的二维码(SSID、密码、加密类型)。
2.Convert JSON QR 码的数据 到字典.
3.Get 上述字典中的 SSID、密码和加密类型值。
4.Use NEHotspotConfiguration Apple API 设置我们的 SSID、密码和加密类型并连接到特定的 WiFi 热点。
p.s。您的应用程序需要签名证书才能激活您的项目和 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!"
}
}
完成后,我终于可以扫描自己的二维码并连接到特定的WiFi热点了。