在 XMPP 客户端中更改传出状态节
Posted
技术标签:
【中文标题】在 XMPP 客户端中更改传出状态节【英文标题】:Change Outgoing Presence Stanza in XMPP Client 【发布时间】:2011-06-13 20:35:23 【问题描述】:我正在使用 Smack API for Java 连接到 ejabberd 和 gtalk 服务器。我可以正常连接和登录,但我想进行 1 次小修改。
如何更改已登录用户的出席信息节?
例如,给定节:
<presence to="someone@someServer.com/androidd5a3arer3"
from="me@someServer.com/Smack">
<status></status>
<priority>24</priority>
<show>away</show>
<c xmlns="http://jabber.org/protocol/caps"></c>
<x xmlns="vcard-temp:x:update">
<photo>asefe3a33e</photo>
</x>
</presence>
我想在将数据包发送给其他人之前附加一个这样的新字段:
<presence to="someone@someServer.com/androidd5a3arer3"
from="me@someServer.com/Smack">
<status></status>
<priority>24</priority>
<show>away</show>
<c xmlns="http://jabber.org/protocol/caps"></c>
<x xmlns="vcard-temp:x:update">
<photo>asefe3a33e</photo>
</x>
<NEW_FIELD> NEW STUFF HERE </NEW_FIELD>
</presence>
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:在 XMPPConnection 上调用 addPacketInterceptor:
connection.addPacketInterceptor(new PacketInterceptor()
public void interceptPacket(Packet packet)
// modify packet
, new PacketTypeFilter(Presence.class));
addPacketInterceptor 的docs 说:
用这个连接注册一个数据包拦截器。每当此连接即将发送数据包时,都会调用拦截器。拦截器可能会修改要发送的数据包。数据包过滤器确定哪些数据包将被传递给拦截器。
【讨论】:
谢谢。这正是我需要的!以上是关于在 XMPP 客户端中更改传出状态节的主要内容,如果未能解决你的问题,请参考以下文章
在 XMPP 服务器上将 IQ 节超时更改为 5 秒的可能影响
如何在 slimxmpp python 中为 gcm ccs 请求创建 xmpp 节?