2

我想知道 Wi-Fi 是否有互联网连接。有时我们的设备与 Wi-Fi 连接,但 Wi-Fi 没有互联网连接。

NWPathMonitor 或第三方连接。我试过了,但它不是万无一失的。

我知道我可以编写一个 ping 服务器的方法,但这是一件非常无效且成本高昂的事情。

有任何想法吗?

4

1 回答 1

5

确定网络是否有 Internet 连接的唯一方法是尝试连接到 Internet。设备上没有任何内容可以查询以获得答案。

即使有它也必须求助于轮询/ping,因为连接可能随时发生变化。

当用户完成热点登录表单时,WiFi 连接可以从无互联网过渡到互联网。如果上游 Internet 连接以某种方式失败,WiFi 连接可以从 Internet 转换为无 Internet。WiFi 连接可能已连接到 Internet,但由于路由故障或其他问题,无法与您的应用所需的特定主机通信。

由于所有这些原因,Apple 积极劝阻“飞行前”检查。即使检查通过,网络操作仍然可能由于一微秒后发生的网络状态变化而失败。这也是不必要的开销,因为通常可以安全地假设大多数设备大部分时间都具有某种 Internet 连接,特别是如果设备是 iPhone。

无论如何,您都需要处理错误。只需尝试操作,看看会发生什么。如果没有网络连接,它将很快失败。

如果您想向用户提供更多反馈,那么您可以开始主动检查 Internet 连接,并使用指数回退来响应连接错误。

这样您的应用程序就不会一直“ping”。

您还可以使用该错误来启动 SCNetworkReachability用于为您检查连接性的进程。与其直接使用该框架,特别是如果您使用 Swift 编写,您可能更喜欢使用包装它并使其更易于访问的东西,例如 Ashley Mills 的Reachability.swift

于 2021-09-19T22:35:40.770 回答