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

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

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

一:使用AFNetworking的AFNetworkReachabilityManager,在APP啟動(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類:
1.這個(gè)類用于檢測(cè)當(dāng)前網(wǎng)絡(luò)狀態(tài)撰洗,它不是SDK的一部分,可以在iOS Developer Library里找到這份代碼腐芍。
從蘋果網(wǎng)站上下載Reachability.zip文件差导,解壓。
2.重用Reachability類
(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)變化的信息名稱為kReachabilityChanged-Notification.如下:
    [[NSNotificationCenter defaultCenter] addObserver:self
    selector:@selector(reachabilityChanged:
    name:kReachabilityChangedNotification
    object:nil];
    (2)你需要?jiǎng)?chuàng)建一個(gè)Reachability對(duì)象實(shí)例并開始向外發(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)系作者
  • 序言:七十年代末我抠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子袜茧,更是在濱河造成了極大的恐慌菜拓,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件笛厦,死亡現(xiàn)場(chǎng)離奇詭異纳鼎,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)裳凸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門贱鄙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人登舞,你說(shuō)我怎么就攤上這事贰逾。” “怎么了菠秒?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵疙剑,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我践叠,道長(zhǎng)言缤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任禁灼,我火速辦了婚禮管挟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘弄捕。我一直安慰自己僻孝,他們只是感情好导帝,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著穿铆,像睡著了一般您单。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上荞雏,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天虐秦,我揣著相機(jī)與錄音,去河邊找鬼凤优。 笑死悦陋,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的筑辨。 我是一名探鬼主播俺驶,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼棍辕!你這毒婦竟也來(lái)了痒钝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤痢毒,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后蚕甥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哪替,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年菇怀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凭舶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡爱沟,死狀恐怖帅霜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情呼伸,我是刑警寧澤身冀,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站括享,受9級(jí)特大地震影響搂根,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜铃辖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一剩愧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧娇斩,春花似錦仁卷、人聲如沸穴翩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)芒帕。三九已至,卻和暖如春充包,著一層夾襖步出監(jiān)牢的瞬間副签,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工基矮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留淆储,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓家浇,卻偏偏與公主長(zhǎng)得像本砰,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钢悲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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