web-dev-qa-db-ja.com

iOS Reachabilityの使用方法

ネットワークを使用するiPhoneアプリを開発しています。 iPhoneはHTTPリクエストを介してサーバーと通信し、WiFiと3Gで動作するはずです。
現在NSURLConnection initWithRequest非同期リクエストをサーバーに送信して応答を取得します(ただし、すぐにASIHTTPRequestライブラリを使用するようになります)

この種のアプリ(インターネット接続が必要なアプリ)では、Reachabilityを使用する必要があることを理解しました(必要ですか?)。

Webを検索してAppleのReachabilityのサンプルコードを見ても、基本的なことはまだわかりません。

到達可能性の主な目的は何ですか?

Appleの例では、ホスト、WiFi、3Gのネットワークの問題を検出し、適切なメッセージをユーザーに提示します。
これは、ユーザーにメッセージを表示するための到達可能性の主な目的ですか?または、他のより実用的なシナリオに使用する必要がありますか?たとえば、NSURLConnactionリクエストが失敗した場合、何らかの方法でReachabilityを使用してリクエストを再送信する必要がありますか?

到達可能性の適切な使用方法は何ですか?

アプリの起動時にoneインスタンスのみを使用し、ネットワークの変更をリッスンするのは一般的ですか?または、すべてのネットワーク要求の前に到達可能性ステータスを確認する必要がありますか?
reachabilityWithHostNameを使用するだけで十分ですか、それともreachabilityForLocalWiFireachabilityForInternetConnectionも必要ですか?

もう1つ、私はAppleはネットワークを使用し、到達可能性を使用しないアプリを拒否できます。
must」で実装すべきメソッドは何ですか?
現在インターネットがないことをユーザーに通知するだけで十分ですか?

34
Eyal

Reachabilityはネットワークヘルパーユーティリティクラスで、接続ステータスに関するさまざまな情報を取得するために使用されます

到達可能性の主な目的は何ですか?

  • 到達可能性は、ネットワークステータスのクエリに使用されます
  • 接続が変更されたときに通知を受けるためにリスナーを登録する

これは、ユーザーにメッセージを表示するためのReachabilityの主な目的ですか?

もちろん、その主な使用法は、インターネット接続があるかどうかをテストするか、接続が変更された場合に通知を受けることです。

たとえば、NSURLConnactionリクエストが失敗した場合、Reachabilityを使用してリクエストを再送信する必要がありますか?

はい、あなたはそれを使用することができます、例えば、私のプロジェクトで私が通常行うことは、リモートサーバーに行われたすべてのリクエストを保存することです、10個のファイルをダウンロードしたいとしましょう

インターネットに接続していないためにファイルがダウンロードプロセスに失敗した場合、失敗したダウンロードの配列に保存し、

到達可能性からインターネット接続が復元されたことが通知されたら、このアレイを反復処理してダウンロードプロセスを再度開始します

到達可能性の適切な使用とは何ですか?

それはあなたのパターンとニーズに依存します。

アプリの起動時に1つのインスタンスのみを使用し、ネットワークの変更をリッスンするのは一般的ですか?

はい、それは私がやっていることです、私のプロジェクトではダウンロードマネージャークラスのインスタンスは1つしかありません、そしてこのクラスにはReachabilityの唯一の生きているインスタンスがあります

または、すべてのネットワーク要求の前に到達可能性ステータスを確認する必要がありますか?

Reachabilityクラスの複数のインスタンスを持たずにそれを行うことができます。私が通常行うことは、接続があるかどうかにかかわらず、Reachabilityを使用して通知するメソッドをダウンロードマネージャー内に保持することです。

ReachabilityWithHostNameを使用するだけで十分ですか、またはreachabilityForLocalWiFiとreachabilityForInternetConnectionも必要ですか?

これについてはわかりませんが、私が通常行うことはすべての手段で接続をテストすることです、私は3gまたはwifiを区別しませんが、この情報(wifiまたは3g)が役立つ可能性のある実装があります

47

Reachability はAppleが作成したプロジェクトの例です。人々はこれをSystemConfigurationフレームワーク上のAPIとして使用します。すでに見たように、ホストが到達可能などです。

Reachabiltyプロジェクトの使用方法は、データを要求しているホストが利用可能な場合にブール値を返すクラスメソッドでクラスを作成したことです。その場合、メソッドはYESを返し、そうでない場合はNOを返します(明らかに)。

さて、接続を利用しているアプリケーションでは、Appleドキュメンテーションの状態。単純なifがあるので、接続を開始できるかどうかを確認する必要があります。リクエストを現時点で完了できなかったことを示す適切なアラートメッセージを表示します。

最初にリクエストを実行できなかった場合に自動的に再試行する必要がある要件はありません。これの主な目的は、アプリケーションがクラッシュしないようにし、同時にユーザーにそれができなかったというメッセージを与えることです。

私は自分で通知を使用しませんが、それは接続を実行できるかどうかを監視することに興味がないためです。これは、アプリケーションの要求によって決定する必要があるものです。

Reachablitiyクラスのすべてのメソッドを使用する必要はありません。そのうちの1つを使用するだけで十分です。さまざまなメソッドが提供するものと、それらがヘッダーファイルで使用される時期について文書化されています。

SystemConfigurationフレームワークを含めることを忘れないでください。

12
Andreas

到達可能性は、インターネットが到達可能かどうかを最もよく推測します。 WiFi経由でアクセスできるのか、Mobile Data経由でのみアクセスできるのかがわかります。それが正しいという保証はありません。 WiFi接続があると表示されている場合、その接続は1秒後に失われる可能性があります。 URLへのアクセスが機能するかどうかを確認する唯一の方法は、そのアクセスを行い、何が起こるかを確認することです。 Reachabilityがアクセスできないと言ったときにアクセスが機能する場合と、その逆の場合があります。

Reachibilityの使用目的は次のとおりです。インターネット接続がなかったためにダウンロードが失敗した後、Reachabilityが変更を検出すると再試行を開始します(実際には数秒後、ReachabilityがWiFiが戻ったとすぐにURLアクセスが失敗することがよくあります)。モバイルデータが許可されていない場所でダウンロードが失敗した後、モバイルデータが利用可能かどうかを確認し、モバイルデータの使用を許可するようユーザーに依頼します。

0
gnasher729