飞行模式下的iOS 13 wifi上网SSID

时间:2019-08-27 18:35:48

标签: swift core-location xcode10 ios13

我目前正在根据CNCopyCurrentNetworkInfo返回的内容更新我的应用程序。我了解Apple在iOS 13上针对此实施的隐私更改,因此我目前正在更新实施。

这很简单。但是,我遇到的问题在应用程序的这一部分内,用户可能处于飞行模式(飞行中的应用程序)。无论CLLocationManager.authorizationStatus()是什么,即使它是.notDetermined然后触发了requestWhenInUseAuthorization()方法,并且一旦用户选择“允许一次”或“在使用应用程序时允许”,我仍然无法获取Wi-Fi ssid。

static func fetchSSIDInfo() -> String? {
    if isSimulator() {
        return "wireless"
    } else {
        if let interfaces: CFArray = CNCopySupportedInterfaces() {
            for i in 0..<CFArrayGetCount(interfaces) {
                let interfaceName: UnsafeRawPointer = CFArrayGetValueAtIndex(interfaces, i)
                let rec = unsafeBitCast(interfaceName, to: AnyObject.self)
                // skips this in airplane mode
                if let unsafeInterfaceData = CNCopyCurrentNetworkInfo("\(rec)" as CFString) {
                    if let interfaceData = unsafeInterfaceData as Dictionary? {
                        let ssid = interfaceData["SSID" as NSObject] as? String
                        let bssid = interfaceData["BSSID" as NSObject] as? String

                        if ssid != "Wi-Fi" && bssid != "00:00:00:00:00:00" {
                            return ssid
                        } else {
                            return "invalid"
                        }
                    }
                }
            }
        }
    }

    return nil
}

在上面的代码中,当处于飞行模式时,它实际上跳过if let unsafeInterfaceData。当它不在飞行模式下时,它将按预期工作,并根据用户是否允许位置服务返回ssid或无效字符串。

我的问题是我如何才能在飞行模式下工作?也许我缺少了一些东西,但目前还不太确定。

1 个答案:

答案 0 :(得分:1)

在iOS13和可能的较早版本(我尚无法立即进行测试)中,一旦启用“飞行模式”,WiFi就会自动断开连接。

最终用户需要在仍启用飞行模式的情况下主动重新启用设备上的WiFi才能重新连接。

您的if语句未得到执行,可能是因为尚无网络信息。重新启用WiFi应该可以为您带来预期的效果。