飞行模式下的 iOS 13 wifi ssid

Posted

技术标签:

【中文标题】飞行模式下的 iOS 13 wifi ssid【英文标题】:iOS 13 wifi ssid in airplane mode 【发布时间】: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 啊,我真傻!我真的没有想到这一点。差不多就是这样。它确实改变了我的结果。谢谢!你可以继续发布这个作为答案! 我很高兴这是一个简单的修复。即使我很困惑,因此一旦我观察到这种行为,我就删除了评论。干杯! 【参考方案1】:

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

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

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

【讨论】:

以上是关于飞行模式下的 iOS 13 wifi ssid的主要内容,如果未能解决你的问题,请参考以下文章

飞行模式开启时 CLLocationManager 是如何获取位置的

果冻豆中的飞行模式

飞行模式开启时,iOS 7 无法播放本地视频流

IOS unregisterForRemoteNotifications 在飞行模式下不起作用

如何通过 ios 11.0.2 以编程方式打开/关闭 Iphone 8 plus 的飞行模式

[pixhawk笔记]2-飞行模式