如何在iOS或macOS上检查活动的Internet连接?

我想检查一下我是否在使用Cocoa Touch库的iOS上或在使用Cocoa库的macOS上有Internet连接

我想出了一种使用NSURL实现这一点的方法。我这样做似乎有点不可靠(因为即使谷歌有一天也可能倒闭,依赖第三方似乎很糟糕),虽然如果谷歌没有回应,我可以查看其他一些网站的回应,但这似乎是浪费,而且对我的应用程序来说是不必要的开销

-(BOOL)connectedpointernet
{
NSString*URLString=[NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]];
返回(URLString!=NULL)?是:否;
}

是不是我做的不好(更不用说iOS 3.0和macOS 10.4中不推荐使用stringWithContentsOfURL),如果是这样,有什么更好的方法来实现这一点

重要:此检查应始终异步执行。下面的大多数答案都是同步的,所以要小心,否则你会冻结你的应用程序


迅捷的

  1. 通过CocoaPods或Carthage安装:https://github.com/ashleymills/Reachability.swift

  2. 通过闭包测试可达性

    让可达性=可达性()!
    可达性.whenReachable={中的可达性
    如果可达性.connection==.wifi{
    打印(“可通过WiFi访问”)
    }否则{
    打印(“可通过手机访问”)
    }
    }
    可达性.whenUnreachable={uuu}in
    打印(“无法访问”)
    }
    做{
    尝试可达性
    }抓住{
    打印(“无法启动通知程序”)
    }
    

目标-C

  1. SystemConfiguration框架添加到项目中,但不要担心将其包含在任何地方

  2. 将Tony Million版本的Reachability.hReachability.m添加到项目中(可在此处找到:https://github.com/tonymillion/Reachability)

  3. 更新接口部分

    “导入”;可达性;
    //将其添加到视图控制器的.m文件中的接口
    @接口MyViewController()
    {
    可达性*internetReachableFoo;
    }
    @结束
    
  4. 然后在视图控制器的.m文件中实现此方法,您可以调用该文件

    //检查我们是否有internet连接
    -(无效)testInternetConnection
    {
    internetReachableFoo=[Reachability reachabilityWithHostname:@"www.google.com"];
    //可以上网
    internetReachableFoo.reachableBlock=^(可达性*可达性)
    {
    //更新主线程上的UI
    dispatch\u async(dispatch\u get\u main\u queue()^{
    NSLog(“耶,我们有互联网络!”;
    });
    };
    //无法访问Internet
    internetReachableFoo.unreachableBlock=^(可达性*可达性)
    {
    //更新主线程上的UI
    dispatch\u async(dispatch\u get\u main\u queue()^{
    NSLog(“有人破坏了互联网”);
    });
    };
    [internetReachableFoo startNotifier];
    }
    

重要提示:类是项目中使用最多的类之一,因此您可能会与其他项目发生命名冲突。如果发生这种情况,您必须将可达性.h可达性.m文件对中的一个重命名为其他文件来解决此问题

注意:您使用的域并不重要。它只是测试任何域的网关

发表评论