【问题标题】:iOS 13 wifi ssid in airplane mode飞行模式下的 iOS 13 wifi ssid
【发布时间】:2019-08-27 18:35:48
【问题描述】:

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

这很简单。但是我遇到的问题是在应用程序的这一部分中,用户可能会处于飞行模式(飞行中的应用程序)。不管 CLLocationManager.authorizationStatus() 是什么,即使它是 .notDetermined 会触发 requestWhenInUseAuthorization() 方法,并且一旦用户选择“允许一次”或“使用应用程序时允许”,我仍然无法获得无线网络连接。

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 或无效字符串,具体取决于用户是否允许定位服务。

我的问题是如何在飞行模式下让它工作?也许我错过了什么,但目前还不太确定。

【问题讨论】:

  • 所以,我刚刚在 iOS13 中做了一个测试(在删除了之前的评论之后)。进入飞行模式(可能在以前的 iOS 版本中也是如此)会立即断开手机与蜂窝网络和 WiFi 的连接。虽然您可以重新启用 WiFi,但它会在启用飞行模式后自动禁用(对我而言)。如果您主动重新启用 WiFi(但保持飞行模式开启),这会改变您的结果吗?
  • @gravity 啊,我真傻!我真的没有想到这一点。差不多就是这样。它确实改变了我的结果。谢谢!你可以继续发布这个作为答案!
  • 我很高兴这是一个简单的修复。即使我很困惑,因此一旦我观察到这种行为,我就删除了评论。干杯!

标签: swift core-location xcode10 ios13


【解决方案1】:

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

最终用户需要在其设备上主动重新启用 WiFi 以重新连接,同时仍启用飞行模式。

您的if 语句没有被执行,可能是因为还没有网络信息。重新启用 WiFi 应该可以获得预期的结果。

【讨论】:

    猜你喜欢
    • 2020-02-01
    • 2020-02-20
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    相关资源
    最近更新 更多