1.iOS 10下app網(wǎng)絡(luò)權(quán)限問題
ios10系統(tǒng)開始,首次下載并安裝應(yīng)用程序會提示"是否允許使用網(wǎng)絡(luò)"......ios9開始有一個(gè)系統(tǒng)的block可以實(shí)時(shí)的監(jiān)測到程序網(wǎng)絡(luò)權(quán)限的狀態(tài)
首先在AppDelegate中:
@import CoreTelephony;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 應(yīng)用啟動后,檢測應(yīng)用中是否有聯(lián)網(wǎng)權(quán)限
CTCellularData *cellularData = [[CTCellularData alloc]init];
cellularData.cellularDataRestrictionDidUpdateNotifier = ^(CTCellularDataRestrictedState state){
switch (state) {
case kCTCellularDataRestricted:
// app網(wǎng)絡(luò)權(quán)限受限
//各種操作
break;
case kCTCellularDataRestrictedStateUnknown:
// app網(wǎng)絡(luò)權(quán)限不確定
// 各種操作
break;
case kCTCellularDataNotRestricted:
// app網(wǎng)絡(luò)權(quán)限不受限
// 各種操作
break;
default:
break;
}
};
做了個(gè)小測驗(yàn),在設(shè)備沒有開啟網(wǎng)絡(luò)的情況下,程序執(zhí)行不會判斷有沒有網(wǎng)絡(luò),也就是說你的手機(jī)沒聯(lián)網(wǎng),但是程序還是認(rèn)為kCTCellularDataNotRestricted---所以上面的監(jiān)測的只是應(yīng)用程序的網(wǎng)絡(luò)權(quán)限,并不能監(jiān)測設(shè)備的網(wǎng)絡(luò)狀況(也是正常的,有點(diǎn)強(qiáng)迫癥了)
獲取app當(dāng)前的網(wǎng)絡(luò)權(quán)限用屬性cellularData.restrictedState
2.實(shí)時(shí)監(jiān)測手機(jī)的網(wǎng)絡(luò)情況
在蘋果官網(wǎng)搜reachability,下載reachability將Reachability.h 和 Reachability.m引入工程,導(dǎo)入SystemConfiguration.framework
開啟網(wǎng)絡(luò)監(jiān)聽
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkChanged:) name:kReachabilityChangedNotification object:nil];
self.reachability = [Reachability reachabilityWithHostName:@"www.baidu.com"];
[self.reachability startNotifier];
- (void)networkChanged:(NSNotification *)notification{
Reachability *currentReach = [notification object];
NSParameterAssert([currentReach isKindOfClass:[Reachability class]]);
// 對連接改變做出響應(yīng)處理動作
self.status = [currentReach currentReachabilityStatus];
self.isReachable = YES;
switch (self.status) {
case NotReachable:
{
//網(wǎng)絡(luò)不可用,
//各種操作
break;
}
case ReachableViaWiFi:
{
// 蜂窩
//各種操作
break;
}
case ReachableViaWWAN:
{
// 蜂窩,wifi
//各種操作
self.isReachable = YES;
break;
}
default:
break;
}
}
// 移除監(jiān)聽
- (void)dealloc{
[[NSNotificationCenter defaultCenter]removeObserver:self ];
}
總結(jié):
reachability不僅能判斷設(shè)備有沒有網(wǎng),也能在手機(jī)斷網(wǎng)而程序有聯(lián)網(wǎng)權(quán)限時(shí)判定為無網(wǎng)狀態(tài), CTCellularData即使手機(jī)斷網(wǎng),只要網(wǎng)絡(luò)權(quán)限開啟,它也認(rèn)為自己可以聯(lián)網(wǎng)(因?yàn)橛新?lián)網(wǎng)權(quán)限嘛),腦袋有點(diǎn)亂︿( ̄_ ̄)︿
這么一想,reachability已經(jīng)能滿足需求了,不過兩者結(jié)合使用就可以知道:程序不能加載時(shí),是網(wǎng)絡(luò)沒開啟?還是自己沒有網(wǎng)絡(luò)權(quán)限了呢...
挺全的有關(guān)Ios10 系統(tǒng)問題