美文网首页
iOS 网络状态判断工具

iOS 网络状态判断工具

作者: MMOTE | 来源:发表于2016-09-23 11:38 被阅读0次

大多数App都严重依赖于网络,一款用户体验良好的的app是必须要考虑网络状态变化的.iOS 开发一般使用Reachability这个类来检测网络的变化.

Reachability

这个是苹果开发文档里面的一个类,官方写的,用来判断网络的变化,包括无网络,wifi,和蜂窝三种情况.Reachability类实际上是苹果公司对SCNetworkReachability API的封装。

优点

使用简单,只有一个类,官方还有Demo,容易上手

灵敏度高,基本网络一有变化,基本马上就能判断出来

能够判断有网状态的切换比如2G/3G/4G切换

缺点

不能判断路由器本身是否能联网

能否连接到指定服务器,比如国内访问墙外的服务器

有网,但是信号很差,网速很慢,跟没网一样.这时候应该认为无网.

解决方案

事实上Reachability已经很好了,但是实际上客户端到达服务器需要很多道"关卡",例如路由器,电信服务器,防火墙等.其实说白了就是解决一个问题:客户端是否能够成功访问服务器.这里介绍另外一个官方的类:SimplePing

SimplePing:

也是官方文档的一个类,目的是ping服务器,可以判断客户端是否可以连接到指定服务器.ping

类似于心跳包功能,隔一段时间就ping下服务器,看是否畅通无阻.因此ping不可能做到及时判断网络变化,会有一定的延迟.可能大家已经猜到了我的思

路,没错,把他们两个合在一起.下面说说我的思路:

首先利用Reachability判断设备是否联网,至于能不能连接到服务器用ping来检查

如果Reachability判断为有网,并且ping也判断为有网,那么表示真的有网,否则就是没网.

ping 虽然能够判断客户端到服务器是否畅通,但是由于网络抖动或者网络很弱等原因,可能出现ping失败的情况,解决方案就是加上失败次数限制,超过限制就认为断网了.

2/3/4G切换的时候,Reachability虽然检测到了网络变化,但是类型还是蜂窝移动,不能给出具体的网络类型.这里可以通过获取状态栏上的属性来判断.

代码块


- (SGNetworkStatus)netWorkDetailStatus{

UIApplication *app = [UIApplication sharedApplication];

UIView *statusBar = [app valueForKeyPath:@"statusBar"];

UIView *foregroundView = [statusBar valueForKeyPath:@"foregroundView"];

UIView *networkView = nil;

for(UIView *childView in foregroundView.subviews) {

if([childView isKindOfClass:NSClassFromString(@"UIStatusBarDataNetworkItemView")]) {

networkView = childView;

}

}

SGNetworkStatus status = SGNetworkStatusNone;

if(networkView) {

intnetType = [[networkView valueForKeyPath:@"dataNetworkType"]intValue];

switch(netType) {

case0:

status = SGNetworkStatusNone;

break;

case1://实际上是2G

status = SGNetworkStatusUkonow;

break;

case2:

status = SGNetworkStatus3G;

break;

case3:

status = SGNetworkStatus4G;

break;

case5:

status = SGNetworkStatusWifi;

break;

default:

status = SGNetworkStatusUkonow;

break;

}

}

returnstatus;

}

相关文章

  • iOS 网络状态判断工具

    大多数App都严重依赖于网络,一款用户体验良好的的app是必须要考虑网络状态变化的.iOS 开发一般使用Reach...

  • iOS完美的网络状态判断工具

    大多数App都严重依赖于网络,一款用户体验良好的的app是必须要考虑网络状态变化的.iOS下一般使用Reachab...

  • iOS判断网络状态

    问题:在用Reachability和AFNetwork检测网络可达性时,只能检测到设备目前是否连上WiFi,使用数...

  • iOS网络状态判断

    1.使用AFNetworking判断 2.通过Reachability框架Reachability是一个在iOS系...

  • iOS 判断网络状态

    //创建网络状态监测管理者 AFNetworkReachabilityManager *manager = [AF...

  • iOS判断网络状态

    在很多时候我们都是需要检测当前手机网络状态的,最常见的地方就是视频、音频或下载界面。当处于非Wi-Fi状态时,提示...

  • Android开发工具类之NetworkUtils

    常用判断网络状态及类型的工具集合 NetworkUtils

  • 监测网络变化方法

    *******摘自网络-----未经测试******** iOS 判断网络连接状态的几种方法(一).Reachab...

  • 判断当前网络状态 - iOS

    在目前项目中,为了更好的用户体验,有些场景下首先需要进行当前网络状态的判断后,再执行后续流程。 例如:下载、音频、...

  • iOS---网络状态判断

    在日常使用的app中有很多都有根据网络状态设置相关操作的功能,比如网易可以设置只在wifi时加载图片、大部分音乐播...

网友评论

      本文标题:iOS 网络状态判断工具

      本文链接:https://www.haomeiwen.com/subject/xjetyttx.html