Phonegap websocket插件与Android版> 4.0.3无法正常工作

时间:2013-06-12 11:53:52

标签: android websocket cordova

我目前正在使用HTML5和Javascript实施带有 Phonegap 的跨平台移动应用。我决定使用 Websockets 建立与后端服务器的连接,以进行通信和交换数据。默认情况下,Blackberry和iOs浏览器支持Websockets。对于 Android ,有一些有前途的插件可以将websockets集成到Android java代码中,并使用Javascript在Phonegap中执行它。 我选择了这个:

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上的testet),我的问题就出现了。如果我使用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插件!

2 个答案:

答案 0 :(得分:1)

这里可能有两个问题:库没有更新很长时间,只实现了WebSocket协议的过时版本。其次,最近的Android版本不允许在主/ UI线程上进行任何网络活动。

AutobahnAndroid实现RFC6455 WebSocket并在后台线程上执行所有网络活动。但是没有与Phonegap集成。

免责声明:我是Autobahn的原创作者并为Tavendo工作。

答案 1 :(得分:0)

我也面临类似的问题,这可以通过两种方式解决:

  • 如果长轮询可以回退,它将正常工作。试试吧。不推荐在我这边,因为它将是技术降级。

  • 在拥有Android版本4.1和4.2的三星和LG设备上有一个有缺陷的webSockets实现。这是从我的最终测试,如果您可以使用相同的版本检查谷歌设备(Nexus),它应该工作。为了消除此错误,您需要在通过webSocket连接时设置超时。

您可以参考以下链接以供参考:

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