发件人离线时如何发送XMPP消息?

时间:2015-03-29 05:36:43

标签: android xmpp offline asmack sender

我正在为聊天应用程序使用sSck和Openfire。我能够很好地发送和接收消息。当收件人离线时,Openfire支持离线邮件传输,通过保留邮件直到他上线为止。

但是当发件人离线或他的互联网在通信之间掉线时该怎么办?

是否有任何api由aSmack / Smack提供,它会在互联网恢复之前保留消息?

或者我应该通过SQLite发送消息吗?

2 个答案:

答案 0 :(得分:2)

如果您已连接到openfire并且互联网已关闭,那么您仍然可以在openfire上联机,因为如果互联网关闭,您无法更改状态。

对于这次开火使用http://xmpp.org/extensions/xep-0199.html

如果用户应用程序未回复ping请求,则openfire会使其脱机并启动脱机存储。

要在asmack中获取离线消息,您需要添加以下提供者。添加这些消息后,如果从服务器启用它们,您将收到离线消息

pm.addIQProvider("offline", "http://jabber.org/protocol/offline",
                new OfflineMessageRequest.Provider());
        // Offline Message Indicator
        pm.addExtensionProvider("offline",
                "http://jabber.org/protocol/offline",
                new OfflineMessageInfo.Provider());

enter image description here ions / xep-0199.html

答案 1 :(得分:2)

过了一会儿好好回答,但也许仍然会指向一个正确方向的人。

搜索了一段时间后,我发现aSmack没有提供任何离线存储空间。

要在发件人离线时发送邮件,我们需要离线存储来存储邮件,直到发件人重新联机。我使用了sqlite,但如果我们必须在成功发送后删除邮件,SharedPreferences也是一个不错的选择。

我遵循的最佳解决方案是,在sqlite中插入消息,将其ID存储在shared preferences中,发送消息,然后从shared preferences中删除ID。同时,如果因特网连接丢失或消息无法以任何原因发送,那么我们将其在共享首选项中的id作为备份。上线后,我们可以通过shared preferences检查他们是否有待发送的消息。