iOS 网络监测

通常移动端的网络情况有WWAN,WiFi及无网,可以用reachability来进行监测(通过apple的 SCNetworkReachability实现的,这里需要注意的是当处于WiFi或者蜂窝状态下,其只验证当前是否处于此种状态下,不验证网络是否通畅,打个比方:当前仅处于WiFi环境下无蜂窝,但是WiFi不能访问远程网络,此时的状态依旧是ReachableViaWiFi)。
而iPhone应用在第一次启动及在设置里修改无线数据都会弹出网络授权弹框,网络授权状态可以通过CTCellularData查看。

reachability分为三种状态:

1.NotReachable
2.ReachableViaWiFi
3.ReachableViaWWAN。

网络授权也有三种状态:

1.kCTCellularDataRestrictedStateUnknown(还未授权,就是还没选择任何一种选项) 2.kCTCellularDataRestricted(拒绝,这种情况可能是选择了允许无线网络,也可能是选择了不允许网络连接)
3.kCTCellularDataNotRestricted(不拒绝,这种情况选择了允许无线网络和蜂窝网络)

虽然网络授权第2种状态不好判断,但是还是能结合reachability来解决这个问题。

网络监听结果及对应状态:

1.网络授权选择不允许网络连接(此时不管你是连着WiFi或蜂窝网络,还是两个都连着)-> NotReachable,手机没有无线网络且没有蜂窝网络(飞行模式,此时不管你授权哪个选项)-> NotReachable,蜂窝网络下选择允许无线网络 -> NotReachable。

2.手机处于WiFi网络下选择允许无线网络 -> ReachableViaWiFi,处于WiFi网络下选择允许无线网络和蜂窝网络 -> ReachableViaWiFi,处于WiFi和蜂窝网络下选择允许无线网络或者选择允许无线网络和蜂窝网络 -> ReachableViaWiFi。

3.手机处于蜂窝网络下选择允许无线网络和蜂窝网络 -> ReachableViaWWAN。

根据以上的状态,我们可以通过reachability监听当前网络状态给予用户相应的提示:

1.ReachableViaWWAN情况下用户肯定选择的是授权允许无线网络和蜂窝网络,此时用户网络肯定处于蜂窝网络下,如果网络不通,肯定是手机信号不好或者手机欠费等导致的网络问题。

2.ReachableViaWiFi情况下用户可能是授权允许无线网络或者允许无线网络和蜂窝网络,此时用户的一肯定处于连接WiFi的情况下,至于有没有蜂窝网络不讨论,此时若网络不通:

  1. WiFi信号不好,距离太远导致的超时等问题。
  2. 连接的WiFi无法访问远程网络,建议查看手机的无线网络列表中的对应网络是不是有黄色字体提示无法访问远程网络,或者查看提供此WiFi网络的工具,可能是路由器,也可能是电脑热点等。

3.NotReachable情况下:

  1. 用户手机既没有连接WiFi也没有SIM卡,飞行模式,或者连接WiFi和有SIM卡但是它们都无法访问远程网络,或者连着WiFi(无法访问远程网络)无SIM卡,或者没有连接WiFi但有SIM卡(无法访问远程网络),还有开发者模式也是有可能的。
  2. 网络授权选择了关闭,就是选择不允许。
  3. 发现自己的WWAN是可用的,唯独目标app不能上网,这很有可能是勾选了只允许无线网络。

情况1和2我们无须提示用户,只需在网络请求失败后showhud即可,但是情况3用户可能是关闭授权了,有些用户发现自己WiFi连着手机又能上网,结果发现app怎么请求都是提示一直在请求中,没有数据返回,他们可能以为是服务器故障等问题,其实是因为没有打开授权,这个时候最好还是提示下以免不必要的麻烦,可以弹出一个alert告诉用户哪些问题会导致这样的情况。

猜你喜欢

转载自juejin.im/post/7123609343798771726