如何獲取iOS應(yīng)用網(wǎng)絡(luò)權(quán)限?

瘋狂

問題描述

  • 在iOS 10下 ,首次進(jìn)入應(yīng)用時(shí),會(huì)有詢問是否允許網(wǎng)絡(luò)連接權(quán)限的的彈窗,為更好進(jìn)行用戶交互,需要在打開應(yīng)用時(shí)獲取應(yīng)用禁用網(wǎng)絡(luò)權(quán)限狀態(tài)(狀態(tài)分為:未知、限制網(wǎng)絡(luò)、未限制網(wǎng)絡(luò)),客戶端根據(jù)不同的權(quán)限狀態(tài)定制相應(yīng)的人機(jī)交互。

問題調(diào)研

  • 針對(duì)請(qǐng)求應(yīng)用網(wǎng)絡(luò)權(quán)限可能存在的幾種情形,操作與對(duì)應(yīng)的狀態(tài)都是筆者測(cè)試得到的,具體如下所示:

可能操作 | 關(guān)閉| 無線局域網(wǎng)|無線局域網(wǎng)&蜂窩|不進(jìn)行操作|鎖屏|解鎖|按Home鍵
------------ | ------------- | ------------
權(quán)限狀態(tài) | Restricted | NotRestricted | NotRestricted | Unknown|Unknown|恢復(fù)原始狀態(tài)|保持原有狀態(tài)

解決問題

  • 使用CoreTelephony.framework框架下的CTCellularData類中的方法和屬性進(jìn)行解決,具體如下:
  • 當(dāng)聯(lián)網(wǎng)權(quán)限的狀態(tài)發(fā)生改變時(shí),會(huì)在上述方法中捕捉到改變后的狀態(tài),可根據(jù)更新后的狀態(tài)執(zhí)行相應(yīng)的操作。
CTCellularData *cellularData = [[CTCellularData alloc]init];
cellularData.cellularDataRestrictionDidUpdateNotifier =  ^(CTCellularDataRestrictedState state){
        //狀態(tài)改變時(shí)進(jìn)行相關(guān)操作
    };

  • 當(dāng)查詢應(yīng)用聯(lián)網(wǎng)權(quán)限時(shí)可以使用下面的方法:
CTCellularData *cellularData = [[CTCellularData alloc]init];
CTCellularDataRestrictedState state = cellularData.restrictedState;
    switch (state) {
        case kCTCellularDataRestricted:
            NSLog(@"Restricrted");
            break;
        case kCTCellularDataNotRestricted:
            NSLog(@"Not Restricted");
            break;
        case kCTCellularDataRestrictedStateUnknown:
            NSLog(@"Unknown");
            break;
        default:
            break;
}

補(bǔ)充一下

  • CoreTelephony.frameworkiOS7之前還是私有框架,框架內(nèi)部提供還是私有API,但在iOS7之后該框架就成為公開的框架,大家可以盡情的使用了。

  • 寫這篇博客一方面是為了彌補(bǔ)前些日子寫的博客iOS開發(fā)中的這些權(quán)限,你搞懂了嗎?中的不足之處,另一方面是為了解決部分讀者的疑惑,希望讀者大人們多多支持!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容