如何检测 iOS 用户是否连接到蜂窝网络或 Wi-Fi?

Men*_*ndo 4 reachability ios swift

我需要区分连接到蜂窝网络和 WiFi 的 iPhone/iPad 用户。在SCNetworkReachabilityFlag .isWWAN下,Apple 表示:

The absence of this flag does not necessarily mean that a connection will never pass over a cellular network. If you need to robustly prevent cellular networking, read Avoiding Common Networking Mistakes in Networking Overview.

这意味着,如果启用此标志,则用户很可能通过蜂窝网络进行连接,但不能保证。我读过《避免常见的网络错误》,但这没有帮助。

我如何才能 100% 确定用户在(或不在)蜂窝网络上?

我的代码如下所示:

let reachability = SCNetworkReachabilityCreateWithName(nil, "localhost")
var flags = SCNetworkReachabilityFlags()
if let reachability = reachability {
    SCNetworkReachabilityGetFlags(reachability, &flags)
}
let isConnectedToCellular = flags.contains(.isWWAN)
Run Code Online (Sandbox Code Playgroud)

编辑:

如果您使用此代码,请确保在后台线程而不是主线程上调用它。

Gle*_*enn 5

您可以使用Reachability.swift要么使用它,要么了解某些特定流程是如何制作和工作的。

它有一个Connection枚举,如下所示:

public enum Connection: CustomStringConvertible {
        case none, wifi, cellular
        public var description: String {
            switch self {
            case .cellular: return "Cellular"
            case .wifi: return "WiFi"
            case .none: return "No Connection"
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

网络状态

public enum NetworkStatus: CustomStringConvertible {
    case notReachable, reachableViaWiFi, reachableViaWWAN
    public var description: String {
        switch self {
        case .reachableViaWWAN: return "Cellular"
        case .reachableViaWiFi: return "WiFi"
        case .notReachable: return "No Connection"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

从那里您可以执行以下操作:

  1. 检查设备是否已连接到移动数据/蜂窝网络或 Wifi。
  2. 观察可达性/互联网连接。