36

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

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

Web を検索し、Apple の Reachability のサンプル コードを見た後でも、いくつかの基本的なことを理解していません。

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

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

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

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

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

4

3 に答える 3

48

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

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

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

ユーザーにメッセージを表示することが到達可能性の主な目的ですか?

いいえ、主な用途は、インターネット接続があるかどうかをテストするか、接続が変更された場合に通知を受けることです

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

はい、使用できます。たとえば、私のプロジェクトで通常行っていることは、リモート サーバーに対して行われたすべての要求を保存することです。

10個のファイルをダウンロードしたいとしましょう。インターネットに接続されていないためにファイルのダウンロード プロセスが失敗した場合は、それらを失敗したダウンロードの配列に保存します。

その後、インターネット接続が回復したことが Reachability から通知されたら、この配列を反復処理して、ダウンロード プロセスを再開します。

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

それは、パターンとニーズによって異なります。

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

はい、それが私がすることです。私のプロジェクトでは、ダウンロード マネージャー クラスのインスタンスが 1 つしかなく、このクラスには Reachability の唯一の有効なインスタンスがあります。

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

Reachability クラスのインスタンスを複数持つことなく、これを行うことができます。私が通常行うことは、接続があるかどうかを到達可能性を使用して教えてくれるダウンロード マネージャー内のメソッドを持つことです。

使用するだけで十分ですか、それともreachabilityWithHostName必要 ですか?reachabilityForLocalWiFireachabilityForInternetConnection

これについてはよくわかりませんが、私が通常行っているのは、あらゆる手段で接続をテストすることです。3G と WiFi を区別しませんが、この情報 (WiFi または 3G) が役立つ実装がいくつかあります。

于 2012-06-24T11:43:02.817 に答える
12

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

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

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

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

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

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

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

于 2012-06-24T11:43:50.450 に答える