nir*_*i21 3 swift nehotspothelper ios11
我正在使用 NEHotspotHelper 并尝试注册但未收到回电。首先,
然后添加了以下代码,
let options: [String: NSObject] = [kNEHotspotHelperOptionDisplayName : "ABC" as NSObject]
let queue: DispatchQueue = DispatchQueue(label: "com.ABC", attributes: DispatchQueue.Attributes.concurrent)
NSLog("Started wifi scanning.")
NEHotspotHelper.register(options: options, queue: queue) { (cmd: NEHotspotHelperCommand) in
NSLog("Received command: \(cmd.commandType.rawValue)")
if cmd.commandType == NEHotspotHelperCommandType.filterScanList {
//Get all available hotspots
let list: [NEHotspotNetwork] = cmd.networkList!
//Figure out the hotspot you wish to connect to
print(list)
} else if cmd.commandType == NEHotspotHelperCommandType.evaluate {
if let network = cmd.network {
//Set high confidence for the network
network.setConfidence(NEHotspotHelperConfidence.high)
let response = cmd.createResponse(NEHotspotHelperResult.success)
response.setNetwork(network)
response.deliver() //Respond back
}
} else if cmd.commandType == NEHotspotHelperCommandType.authenticate {
//Perform custom authentication and respond back with success
// if all is OK
let response = cmd.createResponse(NEHotspotHelperResult.success)
response.deliver() //Respond back
}
}
Run Code Online (Sandbox Code Playgroud)
如果我遗漏了任何步骤,请告诉我。
您应该检查register()函数的结果。如果它正在返回false,则可能未正确配置某些内容。请参阅下面的配置说明的完整列表。
同样在您提供的屏幕截图中,您为Hotspot Configuration启用了权利,但您调用的 API 是用于Hotspot Helper 的。这两个功能需要非常不同的权利。您需要确保为 Hotspot Helper 调用该 API 配置了所有内容。再次,请参阅下文以了解详细信息。有关这些类似命名的 API 的差异的更多详细信息,请参阅Hotspot Helper 与 Hotspot Configuration。
申请网络扩展权限。
这需要在Apple 的网站上完成。
修改您的配置文件。
转到http://developer.apple.com。Edit在您的个人资料附近点击。在底部显示Entitlements,选择包含网络扩展权利的那个。
更新您的应用程序的权利文件。
应用程序必须设置
com.apple.developer.networking.HotspotHelper为其权利之一。权利的值是设置为 true 的布尔值。
添加背景模式
应用程序
Info.plist必须包含一个UIBackgroundModes包含network-authentication.
请注意,与转换为人类可读字符串的所有其他背景模式不同,此模式将保留为network-authentication.
调用NEHotspotHelper.register()函数。
这个方法应该在应用程序启动时调用一次。再次调用它将无效并导致返回 false。
您应该确保函数返回true. 否则,上述步骤之一可能没有正确配置。
了解何时调用此回调。
从文档中,不完全清楚何时会调用此回调。例如,人们可能假设 NEHotspotHelper 可用于监视网络连接。但是,当用户导航到“设置”应用程序并转到 Wi-Fi 页面时,将(仅?)调用回调。
由于您的回调只会在用户在“设置”应用程序中时调用,因此您应该附加到调试器并使用print().
let targetSsid = "SFO WiFi"
let targetPassword = "12345678"
let targetAnnotation: String = "Acme Wireless"
let options: [String: NSObject] = [
kNEHotspotHelperOptionDisplayName: targetAnnotation as NSString
]
let queue = DispatchQueue(label: "com.example.test")
let isAvailable = NEHotspotHelper.register(options: options, queue: queue) { (command) in
switch command.commandType {
case .evaluate,
.filterScanList:
let originalNetworklist = command.networkList ?? []
let networkList = originalNetworklist.compactMap { network -> NEHotspotNetwork? in
print("networkName: \(network.ssid); strength: \(network.signalStrength)")
if network.ssid == targetSsid {
network.setConfidence(.high)
network.setPassword(targetPassword)
return network
}
return nil
}
let response = command.createResponse(.success)
response.setNetworkList(networkList)
response.deliver()
default:
break
}
}
assert(isAvailable)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3945 次 |
| 最近记录: |