序言

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

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

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

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

如何判断设备是否真正连上互联网?而不是只有网络连接

[Reachability reachabilityWithHostName:]完全没用!

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

而苹果的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非常相似,大家可以无缝上手,非常方便。 开启网络监听:


[GLobalRealReachability startNotifier]; [[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(networkChanged:)
name:kRealReachabilityChangedNotification
object:nil];

回调代码示例:


- (void)networkChanged:(NSNotification *)notification
{
RealReachability *reachability = (RealReachability *)notification.object;
ReachabilityStatus status = [reachability currentReachabilityStatus];
NSLog(@"currentStatus:%@",@(status));
}

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


[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;
}
}];

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


ReachabilityStatus status = [reachability currentReachabilityStatus];

Demo:

我们在github的repository中已经包含了简单的Demo工程,直接下载运行即可。相关的Api调用也可以参考demo中的实现。 demo截图:

iOS下的实际网络连接状态检测(转)-LMLPHP

45.png

RealReachability的实现原理

RealReachability架构图:

iOS下的实际网络连接状态检测(转)-LMLPHP

111.png

PS:其中connection模块和ping模块也可独立使用,分别提供本地网络检测和ping的能力,感兴趣的读者也可以尝试(调用方式请参考RealReachability开源代码)。

结束语

希望这个框架能够帮助到大家的iOS开发! 遇到任何疑问或者使用上的问题,都可以联系我

对此框架我也会持续进行维护和优化,更希望感兴趣的朋友可以到github上pull request! 开源有你更精彩! https://github.com/dustturtle/RealReachability 觉得有用就点个star喔!

转自openglnewbee

04-07 03:10
查看更多