iOS10的首次網(wǎng)絡(luò)判斷出錯(cuò)問題

問題以及背景

升級(jí)iOS10之后,絕大多數(shù)應(yīng)用第一次進(jìn)入都會(huì)提示無(wú)網(wǎng)絡(luò),首頁(yè)是無(wú)網(wǎng)絡(luò)狀態(tài)。具體原因是iOS10新出現(xiàn)的網(wǎng)絡(luò)鑒權(quán)授權(quán)機(jī)制,在網(wǎng)絡(luò)訪問未獲得授權(quán)情況下,使用Reachability判斷出的結(jié)果是:NotReachable.是屬于無(wú)網(wǎng)絡(luò)狀況(此時(shí)非常有可能是有網(wǎng)絡(luò)的)。如圖

ScreenShot_20160929110221.png

問題分析

  1. 思路一:根據(jù)以往經(jīng)驗(yàn),iOS7之后出現(xiàn)的相機(jī)、通知等鑒權(quán)。有對(duì)應(yīng)的API來(lái)判斷,如果沒有權(quán)限可以讓程序自動(dòng)跳轉(zhuǎn)到設(shè)置頁(yè)面,讓用戶去設(shè)置。例如:
- (BOOL)isCameraValid
{
    double version = [[UIDevice currentDevice].systemVersion doubleValue];

    if(version>=7.0f){

        // 判斷程序的隱私設(shè)置是否授予權(quán)限
        AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];

        if (authStatus != AVAuthorizationStatusAuthorized)

        {
            return NO;
        }

    }
    return YES;
}

在XCode Dcouments里邊,以及https://developer.apple.com/search里搜索AuthorizationStatus

AuthorizationStatus_-_Search_-_Apple_Developer.png

沒有發(fā)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)相關(guān)的api,應(yīng)該是目前沒有開放出來(lái)。此路不通

  1. 思路二:去看那些其他軟件怎么做的,打開微信,設(shè)置->微信關(guān)閉無(wú)線數(shù)據(jù)
ScreenShot_20160929115344.png

再次打開微信

ScreenShot_20160929115404.png

根據(jù)思路一,google,github未發(fā)現(xiàn)對(duì)應(yīng)API。自己做個(gè)Demo試驗(yàn)一下
關(guān)閉無(wú)線數(shù)據(jù)之后,第一次進(jìn)入程序

ScreenShot_20160929115904.png
  • 結(jié)論
  1. iOS10系統(tǒng)做了判斷處理,用戶無(wú)法干涉。
  2. 當(dāng)點(diǎn)擊允許或者不允許,均無(wú)直接回掉。所以用戶并不能根據(jù)當(dāng)前網(wǎng)絡(luò)狀態(tài),正確處理當(dāng)前網(wǎng)絡(luò)請(qǐng)求。

解決方案

但是Reachability會(huì)在授權(quán)界面點(diǎn)擊允許之后,有回掉??梢酝ㄟ^此回掉來(lái)正確處理當(dāng)前網(wǎng)絡(luò)請(qǐng)求。也就是在首頁(yè)或者其他需要相關(guān)請(qǐng)求注冊(cè)通知kReachabilityChangedNotification

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];

在回掉函數(shù)里進(jìn)行重新請(qǐng)求

- (void) reachabilityChanged:(NSNotification *)note
{
//
    Reachability* curReach = [note object];
    NetworkStatus netStatus = [curReach currentReachabilityStatus];
    //發(fā)送請(qǐng)求
    if(netStatus!=NotReachable)
    {
    
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,030評(píng)論 25 709
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,293評(píng)論 4 61
  • 2016年.秋,我還在原地,用放肆與溫情織一張愛情的網(wǎng),等你。 我要你知道,這個(gè)世界上總有一個(gè)人在等你,...
    0121af403f65閱讀 343評(píng)論 0 0
  • 2. 交互(Interaction) 2.1 3D 觸摸(3D Touch) 2.1.1 主屏幕交互(Home S...
    Kemr閱讀 498評(píng)論 0 1
  • 記得高中的時(shí) 候我對(duì)地理這門課只是抱著一種不溫不火的態(tài)度,對(duì)于幅員遼闊的中國(guó),僅僅停留在地形形似“雄雞”這一基礎(chǔ)上...
    婉遇閱讀 674評(píng)論 0 1

友情鏈接更多精彩內(nèi)容