Apple推送通知可以用作消息队列吗?

时间:2017-08-24 22:05:34

标签: ios sockets apple-push-notifications chat

假设我有一个聊天应用程序而且我正在向另一个用户(用户B)发送消息,我们正在使用套接字正常接收消息,但是当用户B离线时,他与套接字服务器断开连接,但是用户A继续给他发短信,以便我的服务器向用户B发送用户A发送的每条消息的推送通知。我的问题是,APNS会充当消息代理并将所有消息排队,直到用户B重新登录并接收它们为止?或者我是否必须将未接收的消息存储在其他地方

1 个答案:

答案 0 :(得分:3)

答案很容易找到Apple's documentation

  

Apple推送通知服务包括执行存储转发功能的服务质量(QoS)组件。如果APN尝试发送通知并且目标设备处于脱机状态,则APN会将通知存储一段有限的时间,并在设备再次可用时将其发送。此组件仅存储每个设备和每个应用程序的最新通知。如果设备处于脱机状态,则发送针对该设备的通知请求会导致先前的请求被丢弃。如果设备长时间保持脱机状态,则会丢弃其在APN中存储的所有通知。

所以,不,你不能将APN用作消息代理。

您可以使用推送通知作为唤醒信号并与服务器端消息队列同步。 RabbitMQ或Kafka可能是候选经纪人,MQTT看起来很有前途。您需要确定如何以及何时丢弃未成功传送到设备的消息队列的内容。