項(xiàng)目收尾疑難問(wèn)題解決二:判斷網(wǎng)絡(luò)連接狀態(tài)

二:判斷網(wǎng)絡(luò)連接狀態(tài)

問(wèn)題描述:開(kāi)始的時(shí)候使用AFNetworking的AFNetworkReachabilityManager判斷網(wǎng)絡(luò)卻發(fā)現(xiàn)一直都是unKnow,總結(jié)一下現(xiàn)在我知道的幾種判斷網(wǎng)絡(luò)的方法

一:使用AFNetworking的AFNetworkReachabilityManager,在A(yíng)PP啟動(dòng)的時(shí)候掉用方法,之后每次手機(jī)網(wǎng)絡(luò)發(fā)生變化就會(huì)走block,PREFERENCES_INSTANCE.netStatus是我設(shè)置的一個(gè)手機(jī)全局變量,此方法與下面說(shuō)的Reachability的異步監(jiān)聽(tīng)一樣的,個(gè)人感覺(jué)AFN的這個(gè)方法適用block使代碼更緊湊會(huì)比較好用一些
+ (void)reachabilityNetStatus {
    BOOL isFirst = YES;
    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
    // 提示:要監(jiān)控網(wǎng)絡(luò)連接狀態(tài),必須要先調(diào)用單例的startMonitoring方法
    [manager startMonitoring];
    __block typeof(isFirst) blockIsFirst = isFirst;
    //檢測(cè)的結(jié)果
    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        CBCCNetStatus netStatus;
        if (status == AFNetworkReachabilityStatusNotReachable) {
            netStatus = CBCCNetStatus_None;
            NSLog(@"網(wǎng)絡(luò)連接有問(wèn)題");
            [[CBCCGlobalConfig shareInstance].globalHUD showToastWithText:@"網(wǎng)絡(luò)連接有問(wèn)題"];
        }else if (status == AFNetworkReachabilityStatusReachableViaWWAN) {
            netStatus = CBCCNetStatus_GPRS;
            NSLog(@"正在使用移動(dòng)網(wǎng)絡(luò)");
            [[CBCCGlobalConfig shareInstance].globalHUD showToastWithText:@"正在使用移動(dòng)網(wǎng)絡(luò)"];
        }else if (status == AFNetworkReachabilityStatusReachableViaWiFi) {
            netStatus = CBCCNetStatus_WiFi;
            if (!blockIsFirst) {
                NSLog(@"WIFI連接成功");
                [[CBCCGlobalConfig shareInstance].globalHUD showToastWithText:@"WIFI連接成功"];
            }
        }else {
            netStatus = CBCCNetStatus_UnKonw;
            NSLog(@"誰(shuí)知道用的什么網(wǎng)絡(luò)");
            [[CBCCGlobalConfig shareInstance].globalHUD showToastWithText:@"誰(shuí)知道用的什么網(wǎng)絡(luò)"];
        }
        PREFERENCES_INSTANCE.netStatus = netStatus;
        blockIsFirst = NO;
    }];
}
二:使用Reachability,

Reachability類(lèi):
1.這個(gè)類(lèi)用于檢測(cè)當(dāng)前網(wǎng)絡(luò)狀態(tài),它不是SDK的一部分,可以在iOS Developer Library里找到這份代碼。
從蘋(píng)果網(wǎng)站上下載Reachability.zip文件,解壓。
2.重用Reachability類(lèi)
(1)把Reachability.h和Reachability.m文件拖到項(xiàng)目中。
(2)添加框架:SystemConfiguration.framework。

3.監(jiān)測(cè)網(wǎng)絡(luò)變化

  • 同步監(jiān)測(cè)網(wǎng)絡(luò):什么時(shí)候用什么時(shí)候判斷不會(huì)實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)變化
    //方式一:
    Reachability *reach = [Reachability reachabilityForInternetConnection];
    NetworkStatus status = [reach currentReachabilityStatus];
    //方式二:
    Reachability *reach = [Reachability reachabilityWithHostName:@“www.apple.com”];
    NetworkStatus status = [reach currentReachabilityStatus];
  • 異步的Reachability
    (1)異步的方式稍微復(fù)雜,不過(guò)通過(guò)這種方式可以來(lái)訂閱實(shí)時(shí)的網(wǎng)絡(luò)狀態(tài)變化通知。導(dǎo)入Reachability.h頭文件,然后注冊(cè)一個(gè)對(duì)象來(lái)訂閱網(wǎng)絡(luò)狀態(tài)變化的信息,網(wǎng)絡(luò)狀態(tài)變化的信息名稱(chēng)為kReachabilityChanged-Notification.如下:
    [[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(reachabilityChanged:
    name:kReachabilityChangedNotification
    object:nil];
    (2)你需要?jiǎng)?chuàng)建一個(gè)Reachability對(duì)象實(shí)例并開(kāi)始向外發(fā)布網(wǎng)絡(luò)狀態(tài)變化的消息:
    Reachability *reach = [[Reachability reachabilityWithHostName:@“www.apple.com”] retain];
    [reach startNotifier];
    (3)當(dāng)網(wǎng)絡(luò)狀態(tài)發(fā)生變化的時(shí)候,Reachability對(duì)象將調(diào)用reachabilityChanged:方法,可以在這個(gè)方法里面獲取當(dāng)前的網(wǎng)絡(luò)狀態(tài),然后做相應(yīng)的處理。
    - (void)reachabilityChanged:(NSNotification *)notification{
    Reachability *reach = [notification object];
    if([reach isKindOfClass:[Reachability class]]){
    NetworkStatus status = [reach currentReachabilityStatus];
    //Insert your code here
    }
    }
三:?jiǎn)栴}

但事實(shí)上,基于此方案的所有實(shí)現(xiàn),都無(wú)法幫助我們檢測(cè)真正的網(wǎng)絡(luò)連接狀態(tài),它們能檢測(cè)的只是本地連接狀態(tài);這種情況包括但不限于如下場(chǎng)景: 1.現(xiàn)在很流行的公用wifi,需要網(wǎng)頁(yè)鑒權(quán),鑒權(quán)之前無(wú)法上網(wǎng),但本地連接已經(jīng)建立; 2.存在了本地網(wǎng)絡(luò)連接,但信號(hào)很差,實(shí)際無(wú)法連接到服務(wù)器; 3.iOS連接的路由設(shè)備本身沒(méi)有連接外網(wǎng)。
關(guān)于此問(wèn)題,個(gè)人還沒(méi)有具體看,應(yīng)該是要通過(guò)ping來(lái)判斷,具體的實(shí)現(xiàn)方式有一個(gè)RealReachability的第三方感覺(jué)應(yīng)該挺好用,有需要的可以去研究github地址: https://github.com/dustturtle/RealReachability

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,517評(píng)論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,087評(píng)論 3 423
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 177,521評(píng)論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,493評(píng)論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,207評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,603評(píng)論 1 325
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,624評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,813評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,364評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,110評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,305評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,874評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,532評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,953評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,209評(píng)論 1 291
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,033評(píng)論 3 396
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,268評(píng)論 2 375

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