2015-09-06 83 views
4

這裏有大量關於在應用程序中找到活動的互聯網連接的問題,但如果您在3g連接並且沒有數據信用,或者如果您是在酒店的WiFi網絡上自動重定向到登錄頁面,但您尚未輸入密碼。那種情況。檢查iOS設備的互聯網連接是否正常工作

什麼是檢查互聯網連接是否實際運行的最快方法?

+0

@danpeters嗨,你可以實現它使用可達性類到iOS。 –

+0

Apple Reachability代碼僅檢查是否存在WiFi/3G連接或根本沒有連接,而不是上述情況。 –

+0

@Danpeters也可以使用Reachability類。也可以使用SCNetworkReachability類。 –

回答

-1

完成此操作的最佳方式是不使用Reachability或任何其他API,方法是創建一個NSURL並嘗試從中接收數據。對於不好的連接,我添加了一個超時 20秒。

像:

- (void)checkConnection //Run this on a side queue, never on a main queue 
{ NSURL *checkURL = [NSURL URLWithString:@"http://www.apple.com"]; 

    NSURLRequest *lRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:checkURL] 
               cachePolicy:NSURLRequestUseProtocolCachePolicy 
              timeoutInterval:20.0]; 

    NSData *data = [NSData dataWithContentsOfURL:lRequest]; 

    if (data) 
    { 
     connected = YES; 
    } 
    else 
    { 
     connected = NO; 
    } 
} 

這將檢查是否有特定的網站訪問,並設置超時,這表明網絡連接速度慢。

此代碼可能有錯誤,因爲我還沒有使用/嘗試過它!如果有任何評論,請回答此問題。

+0

爲什麼可達性不是最好的方式?你應該用一些深刻的證據支持這個評論。 'apple.com'不再有有效的服務器/主機時會發生什麼。有兩個星期等待更新被批准 – soulshined

+0

@soulshined我並不是說這是最好的方法。如果你不使用任何API,這可能是最好的方法。此外,Apple.com的正常運行時間高達97%。我建議使用Google.com,因爲它們幾乎可以隨時獲得99.9%的正常運行時間。 – MasterRazer

+1

問題是,當可達性觸手可及時,您不應該像這樣硬編碼地址。即使您不使用Apple.com,地址也會發生變化,服務器故障等等,也許說'最簡單的方法'更準確,但這個解決方案並不是最好的。可達性還包含在網絡更改時更新委託的通知,而不是手動查看網絡是否更改 – soulshined

0

可以在AFNetworking使用AFNetworkReachabilityManager類。

https://github.com/AFNetworking/AFNetworking

上面的鏈接會幫助你在設置的東西。這將根據您的要求爲您提供連續的網絡檢查。這裏有幾行代碼:

[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { 
    NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status)); 
}]; 

[[AFNetworkReachabilityManager sharedManager] startMonitoring];