iOS 處理應用第一次啟動無法聯網的情況


iOS應用在客戶第一次安裝的時,會請求網絡權限,此時就算用戶點擊了同意網絡權限,網絡請求此時可能也已經失敗,需要在客戶點擊了同意的時候,重新發起新的網絡請求
監聽網絡權限這里采用CoreTelephony/CTCellularData.h這個庫來監聽,具體操作流程
1、創建CTCellularData並監聽網絡狀態(監聽是在異步線程監聽,如果設計到顯示UI的需要到主線程刷新)
2、監聽到kCTCellularDataRestricted表示網絡權限關閉,此時可能是用戶第一次請求,所以在這里發起一次網絡請求,app會自動彈出網絡申請彈出,
3、用戶點擊了運行網絡會進入到kCTCellularDataNotRestricted這個狀態下,此時 發起正常的網絡請求,並且初始化系統(需要注意的是此時線程為異步線程)

#if TARGET_IPHONE_SIMULATOR  //模擬器
    [self performSelectorOnMainThread:@selector(fetchProtocolVersionReq) withObject:nil waitUntilDone:YES];
#elif TARGET_OS_IPHONE      //真機
   __block BOOL isNoNetToNet = NO;
    CTCellularData *cellularData = [[CTCellularData alloc] init];
    cellularData.cellularDataRestrictionDidUpdateNotifier=^(CTCellularDataRestrictedState state) {
        NSLog(@"%@",[NSThread currentThread]);
        switch(state){
            case kCTCellularDataRestricted:
            {
                NSLog(@"Restricted  權限關閉的情況下 再次請求網絡數據會彈出設置網絡提示");
                [self performSelectorOnMainThread:@selector(fetchProtocolVersionReq) withObject:nil waitUntilDone:YES];
                isNoNetToNet = YES;
            }
                break;
            case kCTCellularDataNotRestricted:{
                NSLog(@"NotRestricted 已經開啟網絡權限 監聽網絡狀態");
                dispatch_async(dispatch_get_main_queue(), ^{
                    [self performSelector:@selector(fetchProtocolVersionReq) withObject:nil afterDelay:isNoNetToNet ? 1.0f : 0.0];
                    isNoNetToNet = NO;
                });
            }
                break;
            case kCTCellularDataRestrictedStateUnknown:
                NSLog(@"Unknown 未知情況 (還沒有遇到推測是有網絡但是連接不正常的情況下)");
                break;
            default:
                break;
        }
    };
#endif


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM