2

デバイス間でのWebSocketサポートにweb-socket-jsを使用しています。ネイティブのWebSocketをサポートしているため、すべてのIOSデバイスでうまく機能し、フラッシュがインストールされている場合はAndroidデバイスでかなり一貫して機能します。現在、Android ICS 4.03以降は、ネイティブWebソケットをサポートしていると主張しています。Window.WebSocketが定義されていますが、ソケットを開くことができません。誰かが理由を知っていますか?ICSネイティブWebSocketの問題は何ですか?彼らはどのプロトコルを使用していますか?誰かがより良い解決策を思いついたことがありますか?

=更新=

WebSocketが実際に機能するかどうかを判断し、フラッシュにフォールバックするためのハッキーな方法があります。これを行うには、web-socket-jsコードを変更して、Androidクライアントであるかどうかを確認する必要があります。次に、Webソケットを使用する前に、ローカルマシンのポートに接続してみてください。次に、WebSocketのプロトコルプロパティを確認します。これが定義されている場合は、ネイティブを使用することをお勧めします。それ以外の場合は、フラッシュにフォールバックします。まだより良い方法を探していますが、これが私が今使っているハックです:

例えば:

   var isAndroid = navigator.userAgent.match(/Android/i) != null;
   var isChrome = navigator.userAgent.match(/Chrome/i) != null;

   // assume if its safari, that they use normal websockets.
   if ( isChrome || (!isAndroid && window.WebSocket)) {
          logger.log("Will attempt to use Websockets natively. 1");
          return;
   }


   // check if we need a websocket fallback
   //if (window.WebSocket && !window.WEB_SOCKET_FORCE_FLASH) {
   if ( isAndroid ) {
          try {
                 var testSock = new window.WebSocket("ws://localhost:1474");
                 if (testSock.protocol != undefined) {
                       testSock.close();
                       logger.log("Will attempt to use Websockets natively. 2");
                       return;
                 } else {
                       // use flash
                 }
          } catch (e) {
                 // if there was an error we need to use the flash fallback.
          }
   }

   logger.log("Native Websockets unavailable, trying Flash fallback...");
4

4 に答える 4

4

したがって、結局のところ、私の質問で言及されているハックは実際には常に機能するとは限りません。4.0.3を搭載した一部のAndroidデバイスは、ネイティブWebソケットをサポートしているように見えますが、サポートしていないものもあります。この違いが、4.0.3に付属のデバイスとアップグレードされたデバイスの間にある可能性があるかどうかを判断しようとしています。Flash Playerが最初にサポートされているかどうかを確認し、サポートされている場合はそれを使用します。そうでない場合は、Androidのバージョンを確認します。4.0より大きい場合は、ユーザーがChromeでサイトを読み込もうとすることをお勧めします。それ以外の場合、window.WebSocketが定義されている場合は、それを使用しようとします。

于 2012-10-29T14:31:47.987 に答える
2

Chrome for AndroidはWS(RFC6455)をサポートしています。ICS以降で利用できますが、標準のブラウザでは利用できません。

WS(RFC6455)は、少なくともARMv7を搭載したAndroidデバイス上のFirefoxMobileでサポートされています。

WS(Hixie76)は、ほとんどのAndroidデバイスのOperaMobileでサポートされています。

Googleをプッシュする:

  • ChromeforAndroidをサブICSデバイスで利用できるようにする
  • ChromeforAndroidをデフォルトのブラウザにする
于 2012-06-29T09:48:16.823 に答える
1

皆さん、デバイスをエミュレートするときは忘れないでください。ローカルで実行されているWS-Serverにアクセスするために、Androidプロジェクトのconfig.xmlで「localhost」を定義することは避けてください。127.0.0.1に変換される定義済みの10.0.2.2アドレスを使用します(そして、WS-Serverがそれに応答することを確認してください)。http://developer.android.com/tools/devices/emulator.html#emulatornetworking

于 2013-03-15T12:05:28.050 に答える
0

4.XまでのAndroidリリースは、 web-socket-jsなどのFlashエミュレーターを介したWebSocketのみをサポートします。4.1 (ICS)がネイティブWebSocketサポートを導入することを願っています。

エミュレーターをロードしているため、おそらくwindow.WebSocketが定義されていますか?

于 2012-06-28T20:32:25.883 に答える