我正在使用ejabberd服务器为iOS和Android开发一个聊天应用程序。我还为ejabberd编写了一个模块,以将脱机消息发送到我自己的服务器api。
我自己的服务器api将使用FCM将通知发送到IOS / Android平台。
在客户端,如果应用程序在前台或后台,它将保持与ejabberd的连接,并且如果客户端收到消息,则ejabberd将发送消息传递状态。
该应用程序终止(服务未运行)时遇到问题,这意味着它未连接到ejabberd(离线)。如果我在未终止的情况下向此应用发送消息,它将收到通知,但消息仍未发送。在应用终止时,如何在收到通知时将邮件标记为已送达。
进一步说明,whatsapp可以正常使用相同功能:
如何使用ejabberd实施此方案?
答案 0 :(得分:0)
对于一个简单的堆栈溢出问题来说,它可能太复杂了,因为您需要在客户端和服务器上集成多个活动部件:
在现实世界中,如果要考虑到APNS队列中只能进行1次推送的事实,这还不够。如果在设备不在网络上时发送了多个消息,则需要使设备在服务器处于脱机状态时检查所有收到的消息,否则将丢失消息。 您需要依靠XMPP邮件存档管理(MAM)来处理该历史记录。
如您所见,这不是几十行代码,而是需要真实的设计和相关工作。
答案 1 :(得分:0)
万一有人遇到这个问题,这是我在@MickaëlRémond的帮助下实现的解决方案。
请同时注意以下注意事项: