服务器端即时通讯APP远程通知最佳实践

Best practice for remote notification of instant messaging app on the server side

假设有 2 个人 A 和 B,他们正在使用我的即时消息应用程序聊天,当对方发送消息时,A 或 B 可能会切换到其他应用程序或锁屏。大家知道,A的消息先发给服务器,然后由服务器发给B。如果B的app不在前台,是不会第一时间收到消息的,所以我应该使用远程通知。

我想知道我的服务器端是如何实现Remote Notification功能的。我有两个选择。

  1. 每次服务器收到消息时,我都会向 APNS 发送消息。
  2. 我保留了A和B的应用状态(前台或后台),当有消息进来时,如果对端在前台,则不向APNS发送通知,否则发送通知。

第一种方法比较简单,但可能会增加APNS服务器的压力。

第二个比较复杂,要保存每个用户的应用状态,可能不准确。假设当"A"的app进入后台,此时网络很差,"A"没有通知服务器进入后台,服务器认为"A"在前台,所以当 "B" 向 "A" 发送消息时,服务器不会向 APNS 发送远程通知。

任何有这方面经验的人请分享您的解决方案,在此先感谢。

尽管推送(远程)通知几乎是即时传送的(APNS 是按比例缩放以承受负载),但我建议您探索第三方库。这里有个不错的tutorial on this. It would be worth exploring XMPPFramework. This也可能有用

I send message to APNS every time when the server gets a message.

没错!只需为每条消息发送推送通知。如果应用程序在前台,则无论如何都不会显示通知。

The first one is a easy way but it may increase the pressure of APNS server.

APNS 可以处理,不用担心。

如果您尝试将应用程序状态与服务器同步,您迟早会运行陷入竞争条件和其他问题,所以不要让事情变得不必要的复杂...