在 ejabberd 中的 StanzaIdAcknowledgedListener 中获取消息 ID 或时间戳
Posted
技术标签:
【中文标题】在 ejabberd 中的 StanzaIdAcknowledgedListener 中获取消息 ID 或时间戳【英文标题】:get message id or timestamp in StanzaIdAcknowledgedListener in ejabberd 【发布时间】:2017-10-22 06:56:21 【问题描述】:我在 ejabberd 中启用了 mam 归档,当我向用户发送消息时, 消息的接收者在收到的数据包中具有有关消息时间戳的信息,如下所示
<archived by='989138553343@192.168.43.67' id='1508653008093085'
xmlns='urn:xmpp:mam:tmp'/>
是否可以在 StanzaIdAcknowledgedListener 中获取此信息,我正在使用它,如下所示: (我在 android 客户端使用 ejabbeejabberd-17.08 服务器和 smack。)
mConnection.addStanzaIdAcknowledgedListener(stanzaId, new
StanzaListener()
@Override
public void processStanza(final Stanza packet) throws
SmackException.NotConnectedException, InterruptedException
AndroidUtilities.runOnUIThread(new Runnable()
@Override
public void run()
//handle ack received by server
);
);
【问题讨论】:
【参考方案1】:是的,如果您在消息节中获得了DelayInformation
消息扩展名,则可以使用它。使用下面的命名空间和元素名获取 id 和时间戳。
Message msg = (Message) stanza; //your stanza packet
if(msg.getExtension(DeliveryReceipt.ELEMENT,DeliveryReceipt.NAMESPACE) !=null)
DelayInformation timestamp = (DelayInformation)msg.getExtension("delay", "urn:xmpp:delay");
if (timestamp == null)
timestamp = (DelayInformation)msg.getExtension("x", "jabber:x:delay");
if (timestamp != null)
ts = timestamp.getStamp().getTime();
else
ts = System.currentTimeMillis();
【讨论】:
以上是关于在 ejabberd 中的 StanzaIdAcknowledgedListener 中获取消息 ID 或时间戳的主要内容,如果未能解决你的问题,请参考以下文章
在 ejabberd 中的 StanzaIdAcknowledgedListener 中获取消息 ID 或时间戳