我正在为聊天应用程序使用sSck和Openfire。我能够很好地发送和接收消息。当收件人离线时,Openfire支持离线邮件传输,通过保留邮件直到他上线为止。
但是当发件人离线或他的互联网在通信之间掉线时该怎么办?
是否有任何api由aSmack / Smack提供,它会在互联网恢复之前保留消息?
或者我应该通过SQLite发送消息吗?
答案 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());
ions / xep-0199.html
答案 1 :(得分:2)
过了一会儿好好回答,但也许仍然会指向一个正确方向的人。
搜索了一段时间后,我发现aSmack没有提供任何离线存储空间。
要在发件人离线时发送邮件,我们需要离线存储来存储邮件,直到发件人重新联机。我使用了sqlite
,但如果我们必须在成功发送后删除邮件,SharedPreferences也是一个不错的选择。
我遵循的最佳解决方案是,在sqlite
中插入消息,将其ID存储在shared preferences
中,发送消息,然后从shared preferences
中删除ID。同时,如果因特网连接丢失或消息无法以任何原因发送,那么我们将其在共享首选项中的id作为备份。上线后,我们可以通过shared preferences
检查他们是否有待发送的消息。