android - 如何保持 websocket 连接?

标签 android service websocket push

我有一个 Android 应用程序,即时消息是主要功能之一。为了实现 IM 功能,我们使用基于 websocket 的推送服务器。

对于我的应用程序,我有一个 PushService,在这个服务中,我建立了一个连接到推送服务器并接收推送消息的 websocket 连接。

该代码在应用程序处于前台时运行良好(即:在用户使用应用程序时运行良好),但当应用程序不在前台时,它会在一段时间后(大约 1 分钟)停止接收推送消息。用户关闭屏幕时出现同样的问题。

我在AlarmManager设置了一个repeat task,它会检查websocket连接状态,如果不是connected状态,则重新尝试连接,以便恢复正常接收推送消息。

这在 Android M 以下运行良好,例如在 Android 5 手机上,它很少错过推送消息。但在 Android M/Android N 上,它不如在 Android 5.x 上运行得好。我可以确认服务本身正在继续运行,请从“正在运行的服务”中进行检查。

我注意到从 Android M 开始,Android 引入了 Doze 和 Standby 模式,不确定它们是否相关,如果是,我怎样才能让应用程序继续运行?在我的手机上,WeChat 和 Skype Android App 运行良好,背后的机制是什么?我知道 FCM 是最好的解决方案,但我不能为中国客户使用它,所以我需要一个解决方法。

编辑:我曾提议使用前台服务,但 PM 不喜欢通知托盘总是显示在状态栏中,他希望保持它干净。

任何建议将不胜感激!

最佳答案

我不知道微信或 Skype 通信,但我知道 WhatsApp 使用您自己的服务通知和与 FCM 相同的技术。 他们使用 Jaber 服务器实现 XMPP 通信协议(protocol)

link

关于android - 如何保持 websocket 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47630226/

相关文章:

c# - windows服务驱动的UI自动化测试

apache - websocket url 与 apache http 服务器抛出 404 错误

java - 如何创建嵌入式 WebSocket 服务器 Jetty 9?

android - Parse.com 登录参数无效

android - Webview 在每次调用时保留旧的 Url

android - 使用 VideoView 和 MediaPlayer 进行 Rtsp 流式传输

.net - 本地计算机上的服务启动然后停止,如果其他服务或程序未使用某些服务会自动停止

android - 时间和日期显示

json - 如何使用 PowerShell 在没有索引的情况下访问 JSON 文件中的数组对象

java - 使用 Netty 的 WebSockets 上的 MQTT?