在 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 或时间戳

Ejabberd:MUC 中的其他消息类型

ejabberd中的嵌套组

ejabberd 中的外部组件是不是有任何吞吐量限制?

Ejabberd 存档表 (mod_archive) 中的重复条目

ejabberd 中的一次性密码验证