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