如何使websocket连接保持活动状态?

时间:2017-12-04 09:32:45

标签: android service websocket push

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

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

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

我已设置AlarmManager的重复任务,检查websocket连接状态,如果它未处于连接状态,则重新尝试连接以恢复正常接收推送消息。

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

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

编辑:我曾建议使用前台服务,但PM不喜欢通知托盘始终显示在状态栏中,他希望保持清洁。

任何建议都将不胜感激!

1 个答案:

答案 0 :(得分:0)

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

link