【问题标题】:How to keep a websocket connection alive?如何保持 websocket 连接处于活动状态?
【发布时间】:2017-12-04 09:32:44
【问题描述】:

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

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

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

我用AlarmManager设置了repeat任务,检查websocket的连接状态,如果不是连接状态,则重新尝试连接,恢复正常接收推送消息。

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

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

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

任何建议将不胜感激!

【问题讨论】:

  • 也许你需要注册一个前台服务。上一个问题可能会对您有所帮助:stackoverflow.com/q/46780547/2012017
  • @JustinHeath,感谢您的评论。我曾建议 PM 使用前台服务但被拒绝,因为他不喜欢通知托盘来保持状态栏清洁。 (我将编辑我的问题以避免使用前景)
  • @LiuWenbin_NO.你找到解决方案了吗?
  • @SilviaH,抱歉,我没有找到在 Android N / O 上运行的解决方案。切换到 FCM 但问题仍然存在。

标签: android service websocket push


【解决方案1】:

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

link

【讨论】:

  • 谢谢。但是,您提到的似乎更多的是关于服务器端的实现?
猜你喜欢
  • 2012-01-03
  • 2021-06-11
  • 2017-05-03
  • 2018-11-19
  • 2014-08-19
  • 1970-01-01
  • 2021-09-13
  • 2013-08-27
  • 2019-09-01
相关资源
最近更新 更多