18

リモート xmpp サーバーと通信するために aSmack ライブラリを使用しています。メッセージの送受信はできますが、受信メッセージのタイムスタンプを取得したいです。

教えてください、それはまったく可能ですか?この質問について何も見つけられないからです。

前もって感謝します

4

6 に答える 6

12

仕様により、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が再コンパイルされたらすぐにいくつかの置き換えられたものでSmackなので、次のように取得してみてください。

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();

おそらく、拡張値としてメッセージを送信するサーバーを確認し、XMPP仕様の例に示されているように"jabber:x:delay"置き換える必要があります。'urn:xmpp:delay'

しかし、それが機能するかどうかはわかりません。

于 2012-06-21T13:32:07.470 に答える
12

タイムスタンプは、通常のメッセージの一部ではありません。したがって、抽出することはできません。

(@Dmitry で言及されているように) 仕様がありますが、これは特定の種類のメッセージにのみ適用されます。通常、オフラインや、新しいサブスクリプションが作成されたときのノードの最後の pubsub メッセージの発行など、リアルタイムではないもの。これらは、固有の遅延が組み込まれたメッセージです。

于 2012-06-21T15:44:20.490 に答える
6

一部はすでにここにある他の回答のブレンドですが、次のように回答を提示します...

XMPP は「リアルタイム」です...この用語は、人によってさまざまな意味を持ちますが、一般的には、メッセージが送信されると (ほぼ) すぐにメッセージを受信すると想定できます。すべての XMPP ソフトウェアは、この目標。

ただし、エンド ツー エンドのレイテンシについて実際の保証はありません。一般的に、送信者がメッセージを送信してから 1 秒もかからずにメッセージを受信するのが一般的ですが、ネットワークの状態がこれに影響を与える可能性があります。

新しいサーバー間接続を確立する必要がある場合など、メッセージが一時的に遅延する場合があります。ネットワークの状態とサーバー間で使用される認証方法によっては、通常、これには数秒かかる場合があります。

受信者がオフラインの場合、メッセージは保留されることもあります。受信者がオンラインになったときに配信できるようになるまで、受信者のサーバーはメッセージを「オフライン メッセージ」ストアに保持することがあります。

XMPP メッセージは一般的に即時に配信されるため、タイムスタンプは通常、メッセージ自体には含まれません。その情報は役に立たないためです (そして、クロックがすべて正しいと仮定します)。

ただし、上記の例のように、メッセージが故意に遅延される場合、メッセージを遅延させるエンティティは、メッセージの元の時間を示すタグをメッセージに挿入できます。これについては、XEP-0203: Delayed Deliveryで詳しく説明しています。

于 2012-06-25T20:15:50.090 に答える
1

smack 4.2.0-rc2-SNAPSHOT バージョンを使用すると、簡単にアクセスできます。

DelayInformation delayInformation = forwarded.getDelayInformation();
delayInformation.getStamp().getTime();
于 2017-01-06T14:29:48.747 に答える