发件人离线时如何发送XMPP消息?
How to send XMPP message when sender is offline?
我正在为我的聊天应用程序使用 aSmack 和 Openfire。我能够很好地发送和接收消息。 Openfire 支持在收件人离线时进行离线消息传输,方法是在收件人上线之前保留消息。
但是当发件人离线或他的网络在通信之间掉线时怎么办?
是否有 aSmack/Smack 提供的 api 可以在互联网恢复之前保留消息?
或者我应该通过 SQLite 发送消息吗?
如果您连接到 openfire 并且互联网关闭,那么您仍然在 openfire 上在线,因为如果互联网关闭,您将无法更改在线状态。
对于这个 openfire 使用 http://xmpp.org/extensions/xep-0199.html
如果用户应用程序没有回复 ping 请求,openfire 会使其离线并开始离线存储。
要在 asmack 中获取离线消息,您需要添加以下内容 providers.After 添加这些内容,如果服务器启用了它们,您将获得离线消息
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
好吧,过一会儿再回答,但也许它仍然会给某人指明正确的方向。
找了一段时间才知道aSmack不提供离线存储。
要在发件人离线时发送消息,我们需要离线存储来存储消息,直到发件人重新在线。我为此使用了 sqlite
,但如果我们必须在成功发送后删除消息,SharedPreferences 也是一个不错的选择。
我遵循的最佳解决方案是,在 sqlite
中插入消息,将其 ID 存储在 shared preferences
中,发送消息,然后从 shared preferences
中删除 ID。同时,如果互联网连接断开或消息因任何原因无法发送,那么我们会将它的 ID 作为备份共享首选项。上线后,我们可以通过shared preferences
查看他们是否有待发送的消息。
我正在为我的聊天应用程序使用 aSmack 和 Openfire。我能够很好地发送和接收消息。 Openfire 支持在收件人离线时进行离线消息传输,方法是在收件人上线之前保留消息。
但是当发件人离线或他的网络在通信之间掉线时怎么办?
是否有 aSmack/Smack 提供的 api 可以在互联网恢复之前保留消息?
或者我应该通过 SQLite 发送消息吗?
如果您连接到 openfire 并且互联网关闭,那么您仍然在 openfire 上在线,因为如果互联网关闭,您将无法更改在线状态。
对于这个 openfire 使用 http://xmpp.org/extensions/xep-0199.html
如果用户应用程序没有回复 ping 请求,openfire 会使其离线并开始离线存储。
要在 asmack 中获取离线消息,您需要添加以下内容 providers.After 添加这些内容,如果服务器启用了它们,您将获得离线消息
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());
好吧,过一会儿再回答,但也许它仍然会给某人指明正确的方向。
找了一段时间才知道aSmack不提供离线存储。
要在发件人离线时发送消息,我们需要离线存储来存储消息,直到发件人重新在线。我为此使用了 sqlite
,但如果我们必须在成功发送后删除消息,SharedPreferences 也是一个不错的选择。
我遵循的最佳解决方案是,在 sqlite
中插入消息,将其 ID 存储在 shared preferences
中,发送消息,然后从 shared preferences
中删除 ID。同时,如果互联网连接断开或消息因任何原因无法发送,那么我们会将它的 ID 作为备份共享首选项。上线后,我们可以通过shared preferences
查看他们是否有待发送的消息。