android - Android 版本 >4.0.3 的 Phonegap websocket 插件无法正常工作

标签 android websocket cordova

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

websocket-android-phonegap

我将该插件集成到我的 android 项目中,并按照自述文件中的每一步进行操作。然后我在 Android 4.0.3 的物理设备 Samsung Galaxy Nexus 上测试了它。它运行良好,与 Blackberry 和 iOs 的使用没有明显差异。我还将该应用程序部署到 Samsung Galaxy Tab 2

好吧,如果我将应用程序部署到操作系统版本高于 4.0.3 的 Android 设备(在 4.1.2 和 4.2.2 上进行测试),就会出现问题。如果我使用 Android 4.2.2 的 Samsung Galaxy Nexus 甚至会出现问题!

有趣的是,我使用 Phonegap 2.6.0,它会自动创建基于操作系统版本 4.2.2 的 Android 项目!!

问题是,项目的 native 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 个问题:该库很长时间没有更新,并且只实现了一个过时版本的 WebSocket 协议(protocol)。其次,最近的 Android 版本不允许在主/UI 线程上进行任何网络 Activity 。

AutobahnAndroid实现 RFC6455 WebSocket 并在后台线程上执行所有 网络 Activity 。虽然没有与 Phonegap 的任何集成。

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

关于android - Android 版本 >4.0.3 的 Phonegap websocket 插件无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17064815/

相关文章:

android - 安装错误 : INSTALL_FAILED_INSUFFICIENT_STORAGE Android phonegap

android - 如何在 Canvas 上绘制多个位图

Android Studio - 将 com.google.android.gms 的版本更新到 11.6.0

android - Appodeal 奖励视频的问题

asp.net-mvc - MVC 倾斜应用程序洞察中的 SignalR

javascript - 为什么JavaScript函数调用中没有(){括号}

cordova - 在cordova-plugin-media中未定义媒体

android - finishActivity() 的可能用例是什么

javascript - 使用 Socket.io 进行 React Native

javascript - Windows 上 JavaScript 和 C/C++ 之间的 TCP 连接