2013-06-12 27 views
1

我目前正在實施一個跨平臺的移動應用程序與Phonegap,使用HTML5和Javascript。我決定使用網絡套接字與我們的後端服務器建立連接以進行通信和交換數據。默認情況下,Blackberry和iOs瀏覽器支持Websockets。對於Android有一些有前途的插件可以將websockets整合到Android java代碼中並使用Javascript在Phonegap中執行它。 我選擇了這一個:Phonegap websocket插件與Android版本> 4.0.3不起作用

websocket-android-phonegap

我集成該插件到我的Android項目,並遵循自述文件中的每一步。然後我使用Android 4.0.3在物理設備Samsung Galaxy Nexus上進行了測試。它運行良好,在那裏沒有可見的差異,黑莓和iOs的使用。我也部署了應用程序到三星Galaxy Tab 2

嗯,如果我將應用程序部署到OS版本高於4.0.3的Android設備(4.1.2和4.2.2上的測試),則會出現問題。如果我在Android 4.2.2上使用三星Galaxy Nexus,它甚至會出現問題!

多汁的是,我使用Phonegap 2.6.0,它會自動創建基於操作系統版本4.2.2的Android項目!

問題是,項目的本機Android部分內的Websocket服務器無法打開與請求客戶端的連接。通常,客戶端發送一個請求以打開連接,服務器通過回調通知客戶端連接已建立。

如果使用Android 4.0.4+,服務器連接將返回404 BAD REQUEST消息而不是打開連接。

由於這個問題,我嘗試了一些其他插件,實際上我可以找到每一個插件。他們都在Android 4.0.3上運行良好,在較高版本上都沒有。

tried websocket-plugin 2

tried websocket-plugin 3

tried websocket-plugin 4

tried websocket-plugin 5

有沒有人在那個特定主題的任何經驗,可以給我一個提示,我可能忘記或指向我要考慮?我無法想象沒有適用於Android 4.0.4+的websocket插件可用!

+0

上是否連接的WebSocket你的應用程序100%的回覆?換句話說,如果無法建立WebSocket連接,您的應用程序將按預期停止工作?如果是這樣,你應該選擇一個也提供HTTP後備的解決方案。 – leggetter

+0

我是https://github.com/mkuklis/phonegap-websocket背後的開發者,我在Android 4.0>以上使用它。在過去的兩個月裏有一些修復程序可以解決您的問題。如果您使用Phonegap 2.x.x請使用以下分支:https://github.com/mkuklis/phonegap-websocket/tree/phonegap-2.x.x –

回答

1

這裏可能有兩個問題:庫沒有更新很久,只實現了WebSocket協議的過時版本。其次,最近的Android版本不允許在主/ UI線程上的任何聯網活動。

AutobahnAndroid執行RFC6455 WebSocket並執行全部後臺線程的網絡活動。雖然與Phonegap沒有任何整合。

聲明:我是Autobahn的原創作者,併爲Tavendo工作。

+0

AutobahnAndroid是否支持WSS連接? – leggetter

+1

有一個支持WSS的實驗分支。尚未合併在主人身上。 – oberstet

0

我也遇到過類似的問題,這可能是固定在兩個方面:

  • 如果有可能長輪詢回退,這將正常工作。試試看。不推薦從我這邊來,因爲它會導致技術降級。

  • 在Android版本4.1和4.2的三星和LG設備上,有一個錯誤的webSockets實現。這是從我的最終測試,如果你可以使用相同的版本檢查谷歌設備(Nexus),它應該工作。爲了消除這個bug,你需要在通過webSocket進行連接時設置超時時間。

你可以參考參考以下鏈接:

鏈接1:https://github.com/zotonic/zotonic/issues/569 鏈接2:https://github.com/Modernizr/Modernizr/issues/1399