デバイス間での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...");