我正在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
}
}
如果我错过了任何一步,请告诉我。
发布于 2018-09-24 04:38:20
您应该检查register()
函数的结果。如果它返回的是false
,那么某些东西可能配置得不正确。请参阅下面配置说明的完整列表。
另外,在您提供的屏幕截图中,您为Hotspot配置启用了权限,但是您调用的API是针对Hotspot Helper的。这两项功能要求的权利非常不同。您需要确保为Hotspot Helper配置了所有东西,以调用该API。同样,有关详细信息,请参阅下面。有关这些类似名称的API的差异的更多细节,请参见Hotspot Helper与Hotspot配置。
要使用NEHotspotHelper:
Edit
靠近你的个人资料。在上面写着Entitlements
的底部,选择一个包含网络扩展权限的。com.apple.developer.networking.HotspotHelper
设置为其应享权利之一。应享权利的值是布尔值设置为true。Info.plist
必须包括一个包含network-authentication
的UIBackgroundModes
数组。请注意,与转换为人类可读字符串的所有其他背景模式不同,此模式将保持为network-authentication
。
NEHotspotHelper.register()
调用函数.
此方法应在应用程序启动时调用一次。再次调用它将不会产生任何效果,并导致返回false。您应该确保函数返回true
。否则,上述步骤之一可能没有正确配置。
print()
。Swift实例
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)
资料来源:
https://stackoverflow.com/questions/46767138
复制相似问题