我使用aSmack库与远程XMPP服务器进行通信。 我能够发送/接收消息,但我想收到的消息的时间戳。
你能告诉我请,是否有可能呢? 因为我无法找到有关这个问题的任何东西。
提前致谢
我使用aSmack库与远程XMPP服务器进行通信。 我能够发送/接收消息,但我想收到的消息的时间戳。
你能告诉我请,是否有可能呢? 因为我无法找到有关这个问题的任何东西。
提前致谢
时间戳不是正规的消息的一部分。 因此,你不能提取它。
有一个规范(由@Dmitry提到),但这只适用于特定类型的消息。 通常,那些不是实时的,如离线和创建新的订阅时发布节点的最后一个发布订阅消息。 这些是内置了一个固有的延迟的消息。
由于规格需要时间属性的XMPP消息:
http://xmpp.org/extensions/xep-0203.html#protocol
检查<delay
的项<message
:
<delay xmlns='urn:xmpp:delay'
from='capulet.com'
stamp='2002-09-10T23:08:25Z'>
Offline Storage
</delay>
但得到它看起来有点棘手。 只要aSmack重新编译啪一些替代的东西,所以设法得到它喜欢这里的方法:
http://edwin.baculsoft.com/2011/06/how-to-get-offline-messages-timestamp-on-openfire/
DelayInformation inf = null;
try {
inf = (DelayInformation)packet.getExtension("x","jabber:x:delay");
} catch (Exception e) {
log.error(e);
}
// get offline message timestamp
if(inf!=null)
Date date = inf.getStamp();
Problably,您需要检查哪些服务器消息作为扩展值将和替换"jabber:x:delay"
与'urn:xmpp:delay'
,因为它是在XMPP协议中所示规格的例子。
但是不知道它的工作原理。
虽然部分其他答案的融合已经在这里,我将提出的答案如下...
XMPP是“实时” ......虽然这个词可能意味着很多不同的事情,不同的人,一般你可以安全地假设你收到消息(几乎)只要他们发送 - 所有XMPP软件的设计是围绕履行这个目标。
然而,有关于终端到终端的潜伏期无实际担保。 在一般的做法通常您总是收到一条消息,远低于第二它是由发送器发射后,虽然网络状况会影响这一点。
在某些情况下,该消息将被暂时延迟,例如,当一个新的服务器到服务器的连接需要建立。 这可能需要高达几秒钟通常,网络条件和认证服务器之间使用的方法同样取决于。
消息也给耽误了,如果接收方不在线 - 收件人的服务器可以在“离线消息”店举行的消息,直到当接收方上线时,能带来改变。
因为XMPP消息的一般即时交付的,时间戳一般不包括在消息本身中,因为该信息是无用的(并假定时钟是正确的)。
另外,在消息被故意延迟虽然情况下,如在上面的例子中,延迟消息的实体可以插入标签成表示该消息的原始时间信息。 这在详细延迟传送:XEP-0203 。
这也适用于4.1.9
DelayInformation inf = null; inf = (DelayInformation)message.getExtension(DelayInformation.ELEMENT,DelayInformation.NAMESPACE); if (inf != null){ Date date = inf.getStamp(); System.out.println("date: "+date); }
随着嫌4.2.0-RC2-快照版本可以很容易地访问,
DelayInformation delayInformation = forwarded.getDelayInformation();
delayInformation.getStamp().getTime();