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

本文探讨了iOS应用中检测真实网络连接状态的重要性,指出常见Reachability框架的局限性,并介绍了RealReachability框架,一个旨在提供更准确网络状态检测的解决方案。集成与使用简单,支持实时监听和查询网络状态。文章还详细解释了RealReachability的实现原理,包括connection、ping和FSM三个模块,以及如何通过有限状态机优化业务逻辑。
摘要由CSDN通过智能技术生成

网络连接状态检测对于我们的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
                                               
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值