网络权限管理
一、iOS网络情况分类:
- 通过App应用设置网络使用权限(关闭、WLAN、WLAN与蜂窝移动网)
- 直接设置手机网络情况(飞行模式、无线局域网络、蜂窝移动网络)
二、iOS开发使用到的网络判断类:
-
AFNetworkReachability或者Reachability来判断网络的可达性,这两个类可以判断网络是否可达,以及可达时网络的类型(WLAN还是蜂窝移动网络);
-
CTCellularData来判断网络数据是否受限,只有应用网络权限设置为WLAN与蜂窝移动网时,网络数据才会返回不受限;
三、组合关系:
权限 | 飞行模式/关闭网络 | 局域网 | 蜂窝移动网络 |
---|---|---|---|
关闭 | 不可达-数据受限 | 不可达-数据受限 | 不可达-数据受限 |
WLAN | 不可达-数据受限 | WLAN-数据受限 | 不可达-数据受限 |
WLAN和蜂窝移动网 | 不可达-数据受限 | WLAN-数据不受限 | WLAN-数据不受限 |
注:关闭网络,及关闭无线局域网和蜂窝移动网络。
四、特殊说明:
-
第一次安装应用(之前从未安装过),第一次启动App时,会提示选择网络,选择之后就不会提示选择网络;但有时第一次安装时不出现选择网络,需要在设置中修改任意一个应用的网络权限,然后重启App,就会提示网络(目前没有找到不出现选择网络的原因);
-
当网络由可达状态切换到不可达状态后,第一进入App时,系统会提示一次网络权限改变的提示;
-
修改网络权限时,App不会重启,这个地方与相册授权不同。相册、相机、麦克风等修改权限后返回时,App会重新启动。
五、代码:
CTCellularData *cellularData = [[CTCellularData alloc] init];
cellularData.cellularDataRestrictionDidUpdateNotifier = ^(CTCellularDataRestrictedState state) {//获取联网权限状态switch (state) {case kCTCellularDataRestricted:NSLog(@"Restricrted");break;case kCTCellularDataNotRestricted:NSLog(@"Not Restricted");break;//未知,第一次请求case kCTCellularDataRestrictedStateUnknown:NSLog(@"Unknown");break;default:break;};};AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];
[mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {//获取联网可达状态switch (status) {case AFNetworkReachabilityStatusUnknown:NSLog(@"NetworkingTypeUnknown");break;case AFNetworkReachabilityStatusNotReachable:NSLog(@"NetworkingTypeNotReachable");break;case AFNetworkReachabilityStatusReachableViaWWAN:NSLog(@"NetworkingTypeReachableViaWWAN");break;case AFNetworkReachabilityStatusReachableViaWiFi:NSLog(@"NetworkingTypeReachableViaWiFi");break;default:NSLog(@"NetworkingTypeUnknown");break;}
转载链接:https://www.jianshu.com/p/2d3ef8b72986