2012-03-07 15 views
6

問題があります。 ReachabilityのreachabilityForInternetConnectionメソッドを使用してインターネットの可用性を検出していますが、その代わりに接続のステータスとインターネットのステータスが取得されていません。私は私のWifiの接続を回すと、方法は私に接続がありませんが私は正しい指示を与えるが、インターネット接続が動作していない場合、それは動作していないようです。何か案が?到達可能性reachabilityForInternetConnectionでインターネット接続を検出できません

よろしく

+0

この種の問題を抱えている私は、人々が通常これを解決せず、Reachabilityを使うのはなぜだろうかと思います。私はそれが無線LANに接続されていて、インターネットが実際に動作していない場合、アプリで何が起こるかを意味します。そして、彼らはこのケースをどのように処理しますか –

答えて

3

到達可能性は、iPhoneがインターネットへのゲートウェイへの接続を持っているかどうかを検出するためにのみ使用することができます。ゲートウェイの後ろにあるものは、あなたには言いません。 LANに接続できてもインターネットに接続できない場合はどうすればよいですか? iPhoneが見ていること(LAN)はインターネット全体ではないと、iPhoneはどのように推測できるだろうか?

実際のサイトに実際にリクエストする必要があります。失敗した場合は、インターネットに接続する際に問題があり、Reachabilityの結果でどこに問題があるかを理解することさえできます。最も簡単な方法は、例えばNSUrlRequestでリクエストをhttp://www.google.comにすることです。 Googleが死亡した場合(、あなたはそこに大きな問題があると仮定して、その後、アプリケーションの接続:)

+0

私のアプリが世界中の何百万人もの人々によって使用されている場合、どうなりますか?私のアプリからGoogleやアップルにこれらのネットワーク状況チェック要求の大規模な束(私のアプリを使用して一度に何千人ものユーザーが)を送信する必要がありますか?それはいいですか? – Aqueel

+0

これは、アプリケーションの到達可能性をチェックする頻度によって異なります。可能な限り少ない回数に減らしてください。そうでなければ私はそう思う、それは大丈夫だ - http://www.google.comは毎分人の_billions_によって照会されている.... – MrTJ

+0

@Aqueel - おそらく実際にリクエストをしている?あなたはそれを作るべきです。それがうまくいくかどうかを知る唯一の方法です。実際のリクエストがfoobar.org/users?1213321321312&images=medの場合、Googleに到達可能かどうかを知る上でのポイントは何ですか? – hooleyhoop

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

世界中の何百万人ものユーザーが自分のアプリを使用している場合はどうなりますか?私のアプリからGoogleやアップルにこれらのネットワーク状況チェック要求の大規模な束(私のアプリを使用して一度に何千人ものユーザーが)を送信する必要がありますか?それはいいですか? – Aqueel

関連する問題