2012-03-07 84 views
6

我有一個問題。我正在使用Reachability的reachabilityForInternetConnection方法來檢測互聯網的可用性,但我並沒有獲得連接狀態而不是互聯網狀態。我的意思是,如果我打開我的Wifi連接,該方法給了我正確的指示,我沒有連接,但如果無線網絡連接和互聯網連接無法正常工作,它似乎不工作。任何想法?無法檢測互聯網連接與可達性reachabilityForInternetConnection

問候

+0

我也遇到這種問題,我想知道爲什麼人們通常不會解決這個問題,只是使用可達性。我的意思是如果它連接到無線網絡和互聯網實際上不工作,那裏發生的應用程序。他們如何處理這種情況 – 2012-10-05 02:57:22

回答

3

可達只能用來檢測iPhone是否有到互聯網網關的連接。網關背後是什麼,它不會告訴你。如果局域網可以到達,但是您無法退出Internet? iPhone如何猜測它所看到的(局域網)不是整個互聯網?

你應該向真實的網站提出一些真實的請求。如果失敗,連接到互聯網時會出現一些問題,通過Reachability的結果,您甚至可以瞭解問題所在。最簡單的方法是用NSUrlRequest提出請求,例如http://www.google.com。 (如果谷歌死了,你可以假設有更大的問題在那裏,然後你的應用程序的連接:)

+0

如果我的應用程序被全球數百萬人使用,該怎麼辦?我是否應該將這些網絡狀態檢查請求從我的應用程序發送到谷歌或蘋果的一大羣(如果數千用戶一次使用我的應用程序)?可以這樣做嗎? – Aqueel 2012-03-07 09:03:53

+0

這取決於您需要多久檢查一次應用的可達性 - 儘量減少次數儘可能少。否則,我猜是的,沒關係 - http://www.google.com正在被_Billions_的人在每分鐘查詢.... – MrTJ 2012-03-07 09:37:29

+0

@Aqueel - 大概你有一個實際的請求?你應該做到。這是知道它是否可行的唯一方法。如果你想要的實際請求是foobar.org/users?1213321321312&images=med,那麼知道谷歌是否可到達的意義何在? – hooleyhoop 2012-03-07 10:03:34

2

我在我的應用程序使用此:

// Check for internet connection 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil]; 

internetReachable = [Reachability reachabilityForInternetConnection]; 
[internetReachable startNotifier]; 

// Check if a pathway to a random host exists 
hostReachable = [Reachability reachabilityWithHostName: @"www.apple.com"]; 
[hostReachable startNotifier]; 

和:

- (void) checkNetworkStatus:(NSNotification *)notice 
{ 
    // Called after network status changes 
    NetworkStatus internetStatus = [internetReachable currentReachabilityStatus]; 
    switch (internetStatus) 
    { 
      // Case: No internet 
     case NotReachable: 
     { 
      internetActive = NO; 

      // Switch to the NoConnection page 
      NoConnectionViewController *notConnected = [[NoConnectionViewController alloc] initWithNibName:@"NoConnectionViewController" bundle:[NSBundle mainBundle]]; 

      notConnected.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
      [self presentModalViewController:notConnected animated:NO]; 

      break; 
     } 
     case ReachableViaWiFi: 
     { 
      internetActive = YES; 
      break; 
     } 
     case ReachableViaWWAN: 
     { 
      internetActive = YES; 
      break; 
     } 
    } 

    // Check if the host site is online 
    NetworkStatus hostStatus = [hostReachable currentReachabilityStatus]; 
    switch (hostStatus) 
    { 
     case NotReachable: 
     { 
      hostActive = NO; 
      break; 
     } 
     case ReachableViaWiFi: 
     { 
      hostActive = YES; 
      break; 
     } 
     case ReachableViaWWAN: 
     { 
      hostActive = YES; 
      break; 
     } 
    } 
} 
+5

如果我的應用程序正被全球數百萬人使用,該怎麼辦?我是否應該將這些網絡狀態檢查請求從我的應用程序發送到谷歌或蘋果的一大羣(如果數千用戶一次使用我的應用程序)?可以這樣做嗎? – Aqueel 2012-03-07 09:06:45