2015-12-07 21 views
5

私はAndroidとiOSプラットフォーム用にビルドしたUnityプロジェクトを持っています。デスクトップ、Android、iOSデバイスのインターネット接続を確認したい - 私は完全にそのような決定を嫌い、と私はAndroid上のミスについて読んだUnityからのインターネット接続を確認してください。

  1. pingの何か(例えばグーグル):私は約3さまざまなソリューションを読みました。

  2. Application.internetReachability - この機能では、インターネットに接続する可能性があると判断します(実際の接続を保証するものではありません)。

  3. Network.TestConnection() - インターネットに接続できない場合、アプリケーションが失敗します。だからこれも正しいわけではない。

Unityからインターネットに接続できるかどうかを確認するにはどうすればよいですか?

+4

なぜ 'Network.TestConnection()'アプリケーションが失敗する原因でしょうか?少しのエラー処理が簡単にそれをキャッチするように思えます。 –

+1

上記の「間違い」にpingのアプローチでリンクしてください。ネットワークを使用している場合、 – SimpleVar

+0

@RonBeyer。TestConnection()を実行し、インターネット接続がない場合、アプリケーションは次の例外を除いて失敗します。 '接続テスターアドレスを解決できません。これを実行する前にインターネットに接続するか、アドレスをアクセス可能なものに設定する必要があります。私はcopeをhttp://docs.unity3d.com/ScriptReference/Network.TestConnection.htmlからコピーしました –

答えて

4

私は実際にNetwork.TestConnection()がこの仕事のための適切なツールであるとは思わない。 the documentationによると、NATが動作していて、クライアントがIPで公開されているかどうかをテストするためのものだと思われますが、一般的なインターネット接続があるかどうかを確認してください。

solution that I found on Unity Answers(ユーザーpixel_fiend)は、Webサイトをテストして、ユーザーが接続しているかどうかを確認するだけです。

IEnumerator checkInternetConnection(Action<bool> action){ 
    WWW www = new WWW("http://google.com"); 
    yield return www; 
    if (www.error != null) { 
     action (false); 
    } else { 
     action (true); 
    } 
} 
void Start(){ 
    StartCoroutine(checkInternetConnection((isConnected)=>{ 
     // handle connection status here 
    })); 
} 

あなたが好きにウェブサイトを変更、あるいは変更することができます。このコードの1つの利点は、非同期操作のためIEnumeratorを使用するため、接続テストは、あなたのアプリケーションの残りの部分を保持していないということですいくつかのサイトのいずれかに到達可能な場合に成功を返すコード。 AFAIKは、インターネット上の特定のサイトに接続しようとすることなく真のインターネット接続をチェックする方法がないため、このような1つ以上のWebサイトを「ping」すると接続性を判断する上で最善の策になる可能性があります。

+0

アクションアクションの呼び出し方法?何を使って? –

+0

@HahaTTpro 'StartCoroutine(checkInternetConnection(isConnected)=> {/ *ここで接続状態を処理する* /}))););' –

+0

ありがとうございます@Maximillian。しかし、それは私が望んでいない。私は "何がアクションの名前空間です"を意味します。これはSystem.Action です。 –

1

「保証された」インターネット接続をテストする適切な方法は、既知の内容の場所へのhttp(s)要求を使用してキャプティブポータルの検出を行うことです。これは、オペレーティングシステム自体が、ユーザーにwifiログイン画面を表示するかどうかをテストする方法です。

www要求のエラー/成功ステータスの単純なpingまたは確認は、十分ではありません。ホテル/空港のWiFiログインページは、(あなたが望むページの代わりに)エラーコードなしで返すことができます。

iOSでは新しい追加の制限があります(明示的にホワイトリストに登録されている場合のみhttpを許可するアプリ転送セキュリティ)。

私の資産は、無料ではありませんが、簡単な解決策です。資産保管の Internet Reachability Verifierです。

0

あなたはこれを試すことができます:

if(Application.internetReachability == NetworkReachability.NotReachable) 
    { 
     // There is no internet connection 
     Debug.Log("Error. Check internet connection!"); 
    } 
    else {// there is internet connection , do stuff here} 
関連する問題