iOS 實時監聽app的網絡連接狀態


     實際iOS開發中,在網絡通信中我們大部分使用第三方(只談短鏈),譬如 AFNetworking、ASIHttpRequest(這個停更了,想必現在沒多少人用),swift的 Alamofire 等。

     樓主有簡單的耍了下主流的app,發現絕大部分都沒有對 網絡狀態做實時的監聽,QQ 和 微信 有做,但是這2個用的都是socket,所以第一時間偵聽到了網絡狀態。在無網絡情況下,重新連接到網絡的過程中,目前看了 ,也只有 QQ 和 微信 做了 實時連接(app做了實時響應)。其他,支付寶,淘寶,京東,餓了么,等等 (BOSS直聘只能WIFI下可以使用,3G/4G下用不了,什么鬼?) 都需要用戶主觀的刷新頁面。 個人感覺 體驗不是很好。

     不要求所有的頁面做到頁面的及時刷新,但主要頁面,或是 首頁 你能給個響應吧。我重連了網絡,app就不能自己刷新下么。

     APPLE 有給我們提供api,當然我們可以用現成的 RealReachability 、AFNetworkReachabilityManager(這貨AFNetworking提供的)。有的可能需要判別2G/3G/4G 以及WIFI,給個傳送門:http://www.jianshu.com/p/efcfa3c87306   。

     我們就拿 AFNetworkReachabilityManager 做個示例:

AFNetworkReachabilityManager *afNetworkReachabilityManager = [AFNetworkReachabilityManager sharedManager];
    
    //    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(afNetworkStatusChanged:) name:AFNetworkingReachabilityDidChangeNotification object:nil];//這個可以放在需要偵聽的頁面
    [afNetworkReachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        
        switch (status) {
            case AFNetworkReachabilityStatusNotReachable:{
                NSLog(@"網絡不通:%@",@(status) );
                break;
            }
            case AFNetworkReachabilityStatusReachableViaWiFi:{
                NSLog(@"網絡通過WIFI連接:%@",@(status));
                break;
            }
                
            case AFNetworkReachabilityStatusReachableViaWWAN:{
                NSLog(@"網絡通過無線連接:%@",@(status) );
                break;
            }
            default:
                break;
        }
        
        NSLog(@"網絡狀態數字返回:%@",@(status));
        NSLog(@"網絡狀態返回: %@", AFStringFromNetworkReachabilityStatus(status));
        
        NSLog(@"isReachable: %@",@([AFNetworkReachabilityManager sharedManager].isReachable));
        NSLog(@"isReachableViaWWAN: %@",@([AFNetworkReachabilityManager sharedManager].isReachableViaWWAN));
        NSLog(@"isReachableViaWiFi: %@",@([AFNetworkReachabilityManager sharedManager].isReachableViaWiFi));
        
    }];
  [afNetworkReachabilityManager startMonitoring];  //開啟網絡監視器;

 我們只要在AppDelegate 里面 調用一下就好。


免責聲明!

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



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