APP首次安裝時(shí),會(huì)提示用戶進(jìn)行網(wǎng)絡(luò)授權(quán)蟹瘾,APP只有在授權(quán)后粉怕,拿到網(wǎng)絡(luò)權(quán)限才去做與網(wǎng)絡(luò)有關(guān)的初始化動(dòng)作。否則會(huì)出現(xiàn)初始化失敗狮荔,APP無法使用的情況
WechatIMG83.jpg
一. 監(jiān)聽用戶授權(quán)選擇
#import <CoreTelephony/CTCellularData.h>
@property (nonatomic, strong) CTCellularData *cellularData;
- (CTCellularData *)cellularData {
if (!_cellularData) {
_cellularData = [[CTCellularData alloc] init];
}
return _cellularData;
}
必須持有CTCellularData對(duì)象胎撇,要不然會(huì)被提前釋放,無法監(jiān)測
@weakify(self)
self.cellularData.cellularDataRestrictionDidUpdateNotifier = ^(CTCellularDataRestrictedState state) {
@strongify(self)
switch (state) {
case kCTCellularDataRestricted:
case kCTCellularDataNotRestricted:
[self cellularDataNotRestricted];
break;
case kCTCellularDataRestrictedStateUnknown:
break;
default:
break;
}
};
kCTCellularDataRestricted: 網(wǎng)絡(luò)受限【用戶還未授權(quán)殖氏、用戶選擇僅限無線局域網(wǎng)】
kCTCellularDataNotRestricted:網(wǎng)絡(luò)不受限【用戶選擇了無線局域網(wǎng)與蜂窩移動(dòng)網(wǎng)絡(luò)】
二. 用戶授權(quán)后晚树,檢測當(dāng)前網(wǎng)絡(luò)是否有效
#import <Reachability/Reachability.h>
+ (void)cellularDataNotRestricted {
///在當(dāng)前線程延時(shí)1.5s以便網(wǎng)絡(luò)可以用
[NSThread sleepForTimeInterval:1.5];
Reachability *reachability = [Reachability reachabilityForInternetConnection];
NetworkStatus status = [reachability currentReachabilityStatus];
if (status != NotReachable) {
[self netWorkReachability];
}
}
使用第三方開源庫Reachability,獲取當(dāng)前網(wǎng)絡(luò)類型雅采,用戶授權(quán)后爵憎,沒辦法立即獲取當(dāng)前網(wǎng)絡(luò)類型慨亲,需要延時(shí)1.5s,在netWorkReachability中去處理初始化的后續(xù)操作
三. 后續(xù)移除該監(jiān)聽纲堵,不然用戶去修改網(wǎng)絡(luò)權(quán)限還會(huì)觸發(fā)該監(jiān)聽
self.cellularData.cellularDataRestrictionDidUpdateNotifier = nil