1. ホーム
  2. ios

[解決済み] iOSでインターネット接続を検出する最も簡単な方法とは?

2022-04-28 11:30:43

質問

この質問は他の多くの質問と重複しているように見えると思いますが、ここでは単純なケースをうまく説明できていないように感じます。AndroidとBlackBerryのバックグラウンドを持つ私は HTTPUrlConnection は、接続できない場合、即座に失敗します。これは全くまともな動作のように思えるので、意外に思ったのですが NSURLConnection はそれをエミュレートしていない。

アップル(とそれを拡張した他社)が提供するのは理解しています。 Reachability クラスは、ネットワークの状態を決定するのを支援するために使用されます。これを最初に見たときは嬉しかったし、次のようなものが出てくることを十分期待していました。 bool isNetworkAvailable() しかし、驚いたことに、通知登録やコールバックが必要な複雑なシステムで、不必要と思われる細部がたくさんありました。もっといい方法があるはずだ。

私のアプリはすでに、接続不能を含む接続障害を優雅に処理しています。ユーザーには障害が発生したことが通知され、アプリは次に進みます。

したがって、私の要求は単純である。すべてのHTTPリクエストの前に呼び出すことができる単一の同期関数で、実際にリクエストを送信するかどうかを判断します。理想的には、セットアップが不要で、ブール値を返すだけでよいのです。

これは本当にiOSではできないのでしょうか?

解決方法は?

もう少し調べて、より最新の解決策で私の答えを更新しています。すでにご覧になったかどうかわかりませんが、Appleから提供された素敵なサンプルコードがあります。

サンプルコードのダウンロード こちら

Reachability.h と Reachability.m をプロジェクトにインクルードしてください。ReachabilityAppDelegate.m を見て、ホストの到達性、WiFiによる到達性、WWANによる到達性などを判断する例を見てください。ネットワークの到達性を簡単に調べるには、次のようにします。

Reachability *networkReachability = [Reachability reachabilityForInternetConnection];   
NetworkStatus networkStatus = [networkReachability currentReachabilityStatus];    
if (networkStatus == NotReachable) {        
    NSLog(@"There IS NO internet connection");        
} else {        
     NSLog(@"There IS internet connection");        
}

@BenjaminPiette のものです。SystemConfiguration.framework をプロジェクトに追加することを忘れないでください。