iOS 11.0 - 定期扫描附近的 SSID (WiFi)

iOS 11.0 - Periodically scan for SSIDs (WiFi) nearby

我想定期扫描附近 Wi-Fi 网络的 SSID(无需连接)并实施 SSID 过滤器(一个或多个)。找到匹配项后,将启动后端 API 调用。

我对 iOS 10 中的 Hotspot Helper 框架进行了快速研究。我发现,这些 API 并不是为我确定的用途而设计的。

好像,iOS11 现在允许应用程序以编程方式管理 Wi-Fi 配置。 Apple 为热点配置方法和属性添加了网络扩展。请 click here 查看更改。

我的问题是,我可以通过新的 iOS 11 热点配置 class 实现我的目标吗?或者这是否提供已知网络或当前连接的网络的 SSID?

非常感谢对此的任何帮助。

很遗憾,我们无法在 iOS 中实现此目的。

当我了解到 NEHotspotConfiguration, I was initially excited, because I was hoping we could automate this process. However, it doesn't look like there's a way to retrieve a list of currently available SSIDs, which makes NEHotspotConfiguration 对我们的用例来说用处不大。

据我了解,您可以使用以下代码实现此目的

      let targetSsid = getCurrentSSID()
    let targetAnnotation: String = targetSsid!

    //let options: [String: NSObject] = [kNEHotspotHelperOptionDisplayName : targetAnnotation as NSObject]
    //let queue: DispatchQueue = DispatchQueue(label: "com.myapp.appname", attributes: DispatchQueue.Attributes.concurrent)

    NSLog("Started wifi list scanning.")


    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
        }
    }

唯一的问题是您必须在 wifi 设置页面才能获取所有可用 SSID 的列表及其信号强度。

不可能。

我启用了 NEHotspotHelper 权限并尝试了一个演示应用程序。尽管 Apple 确实允许您配置 wifi 连接,但为了获取可用网络列表,您需要打开“设置”>“WiFi”页面来获取列表。 API 不能 提供在后台扫描 WiFi 列表的功能,更不用说定期扫描了。

这对开​​发者来说是一种遗憾,但我认为这对 iOS 用户有好处,通过严格限制 API 的使用来保护隐私和安全。