我目前正在使用HTML5和Javascript实施带有 Phonegap 的跨平台移动应用。我决定使用 Websockets 建立与后端服务器的连接,以进行通信和交换数据。默认情况下,Blackberry和iOs浏览器支持Websockets。对于 Android ,有一些有前途的插件可以将websockets集成到Android java代码中,并使用Javascript在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上运行良好,在更高版本上都没有。
有没有人对这个特定主题有任何经验,可以给我一个提示,我可能忘记了什么或我必须考虑哪些要点?我无法想象没有适用于Android 4.0.4+的有效websocket插件!
答案 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