问题描述
对于我的聊天应用程序,我正在寻找一种在后台运行时同步消息的好方法。
目前,我有一个网络套接字。当应用程序进入前台时,消息将同步。这使应用看起来很懒。像WhatsApp一样,我需要一种在应用程序进入前台之前使所有消息同步的方法。
我考虑了以下解决方案: 我设置了一个SyncAdapter,它由推送通知(“聊天xy的新消息”)触发。然后在SyncAdapter内获取新消息。
现在的问题是我不想为已写的每一行都连接(例如通过REST)。而且我也不想等待x分钟来捆绑新邮件。
正如我之前说过的,我已经有一个websocket,当应用程序进入前台时就可以建立它。将此代码移至SyncAadapter是个好主意吗?我可以在此处保持连接打开吗?如果我在X分钟内未收到任何消息,应该关闭它吗?我看到的唯一问题是用户是否无法接收推送消息。
如果有人知道著名的聊天应用程序,请告诉我这个方向。
解决方法
Signal (secure messaging app)是opensource。您可以看看他们如何实现现实世界的解决方案,以实现非常安全的聊天。
根据您的主要目标,您可以选择一个比较简单的实施方案。但是我认为您仍然需要几块:
- 当有新消息出现时,用于推送应用程序的推送系统
- 当应用程序处于后台时检索消息的方法
- 监视网络并在网络恢复正常后重试发送消息的系统
第一项可以用Firebase Cloud Messaging (FCM)解决,第二和第三项可以用WorkManager实现。
出于两个主要原因,我会避免在设备上保持开放连接的状态检查新消息:
- 电池消耗
- 背景限制