如何在 IOS 应用程序上检查网络连接? [关闭]

Posted

技术标签:

【中文标题】如何在 IOS 应用程序上检查网络连接? [关闭]【英文标题】:How to check for connection on the network on IOS app? [closed] 【发布时间】:2021-09-29 01:59:17 【问题描述】:

我正在用 SWIFT 和 SWIFT UI 编写一个 ios 应用程序。我有一个购买按钮来完成交易,但是除非手机连接到网络,否则应用程序将崩溃。我想要做的是在购买过程开始之前检查手机是否连接到网络。如何检查 iPhone 是否连接到网络?谢谢。

【问题讨论】:

这能回答你的问题吗? How to check for an active Internet connection on iOS or macOS? 预检并不是真正的解决方案;网络可以随时关闭,包括在您完成网络连接检查后的纳秒内。虽然您可能希望检查连接性以为用户提供指导,但它不能替代正确的错误处理。您的应用不应因为网络中断而崩溃 【参考方案1】:

您可以使用NWPathMonitor 来监控您的网络连接,并为它提供一个更新状态变量的处理程序,然后您可以签入您的 Swift 或 SwiftUI 代码。

NWPathMonitor 有一些配置选项,比如需要 Wifi over 蜂窝选项,它触发的事件可以检查手机是否在低数据模式下运行等。但是一个非常基本和粗略的实现可能看起来像:

import Foundation
import Network

class NetworkChecker: ObservableObject 
  @Published var available = false

  private var pathMonitor: NWPathMonitor

  init() 
    pathMonitor = NWPathMonitor()
    pathMonitor.pathUpdateHandler =  path in
      DispatchQueue.main.async 
        self.available = path.status == .satisfied
      
    
    pathMonitor.start(queue: DispatchQueue.global(qos: .background))
  

通过将其设为ObservableObject,您可以将其添加为应用根级别的环境对象,以便在您需要的任何视图中使用它:

@main
struct MyApp: App 
  @StateObject var networkChecker = NetworkChecker()

  var body: some Scene 
    WindowGroup 
      ContentView()
        .environmentObject(networkChecker)
    
  


struct ContentView: View 
  @EnvironmentObject var networkChecker: NetworkChecker

  var body: some View 
    Text(networkChecker.available ? "Online" : "Offline")
      .padding()
  

【讨论】:

以上是关于如何在 IOS 应用程序上检查网络连接? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Objective C: iOS 14 如何做网络隐私权限检查

网络连接已关闭,但位置提供者是 NetworkProvider

如何在 iOS 设备上检查互联网连接? [复制]

在 iOS 应用中检查网络连接的位置

如何检查网络关闭

如何在android中检查网络是不是连接到wifi [重复]