iOS下的实际网络连接状态检测

Posted 成成先生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS下的实际网络连接状态检测相关的知识,希望对你有一定的参考价值。

网络连接状态检测对于我们的ios app开发来说是一个非常通用的需求。为了更好的用户体验,我们会在无网络时展现本地或者缓存的内容,并对用户进行合适的提示。对绝大部分iOS开发者来说,从苹果示例代码改变而来的各种Reachablity框架是实现这个需求的普遍选择,比如这个库。但事实上,基于此方案的所有实现,都无法帮助我们检测真正的网络连接状态,它们能检测的只是本地连接状态;这种情况包括但不限于如下场景:

1.现在很流行的公用wifi,需要网页鉴权,鉴权之前无法上网,但本地连接已经建立;

2.存在了本地网络连接,但信号很差,实际无法连接到服务器;

3.iOS连接的路由设备本身没有连接外网。

CocoaChina上已有很多网友对此进行提问和吐槽,比如:

苹果的Reachability示例中有如下说明,告诉我们其能力受限于此:

"Reachability cannot tell your application if you can connect to a particular host, only that an interface is available that might allow a connection, and whether that interface is the WWAN."

而苹果的SCNetworkReachability API则告诉了我们更多: "Reachability does not guarantee that the data packet will actually be received by the host. "

Reachability相关的框架在底层都是通过SCNetworkReachability来实现网络检测的,所以无法检测实际网络连接情况。

有鉴于此,笔者希望打造一个通用、简单、可靠的实际网络连接状态检测框架,于是RealReachability诞生了。

RealReachability集成和使用介绍

  • 集成

最简便的集成方法当属pod: pod 'RealReachability'。

手动集成:将RealReachability文件夹加入到工程即可。

依赖:Xcode5.0+,支持ARC, iOS6+.项目需要引入SystemConfiguration.framework. 

  • 使用介绍

其接口的设计和调用方法和Reachability非常相似,大家可以无缝上手,非常方便。 开启网络监听:

1 2 3 4 5     [GLobalRealReachability startNotifier];      [[NSNotificationCenter defaultCenter] addObserver:self                                               selector:@selector(networkChanged:)                                                   name:kRealReachabilityChangedNotification                                                 object:nil];

回调代码示例:

1 2 3 4 5 6 - (void)networkChanged:(NSNotification *)notification      RealReachability *reachability = (RealReachability *)notification.object;      ReachabilityStatus status = [reachability currentReachabilityStatus];      NSLog(@ "currentStatus:%@" ,@(status));

触发实时网络状态查询代码示例:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [GLobalRealReachability reachabilityWithBlock:^(ReachabilityStatus status)           switch  (status)                       case  NotReachable:                           //  case NotReachable handler                  break ;                                         case  ReachableViaWiFi:                           //  case ReachableViaWiFi handler                  break ;                                         case  ReachableViaWWAN:                           //  case ReachableViaWWAN handler                  break ;                           default :                  break ;               ];

查询当前实际网络连接状态:

iOS下的实际网络连接状态检测

iOS下的实际网络连接状态检测:RealReachability

ios检测终止状态下的蓝牙状态变化

为啥网络库无法检测到何时在 Swift Ios 中重新连接了互联网

ios检测终止状态下的蓝牙状态变化

:iOS网络应用编程

(c)2006-2024 SYSTEM All Rights Reserved IT常识