在 aSmack 中启用 XEP-0198

Posted

技术标签:

【中文标题】在 aSmack 中启用 XEP-0198【英文标题】:Enabling XEP-0198 in aSmack 【发布时间】:2014-04-22 12:12:54 【问题描述】:

我目前正在对启用了 XEP-0198 的 XMPP 服务器使用 asmack。

我正在尝试从 asmack 库中启用此功能,但我找不到任何有关如何执行此操作的信息,因此请关注 http://xmpp.org/extensions/xep-0198.html 我知道我必须通过发送来启用此功能:

<enable xmlns='urn:xmpp:sm:3'/>

但我不知道该怎么做,因为这不是一个节。任何帮助表示赞赏。

编辑: 正如 dant3 指出的那样,Smack 不支持 XEP-0198,但我仍然想通过 Smack 发送那个简单的 XML 来启用它,我只是不知道该怎么做。

【问题讨论】:

【参考方案1】:

看起来像 do not have XEP-0198 implementation。所以,你不能启用它。

如果您将它贡献给 smack(因此 - 用于 asmack),那就太好了。

编辑:

Smack 4.1.0 现在支持 XEP-0198 流管理。有关详细信息,请参阅此wiki page。

【讨论】:

感谢现实检查。即使它不受支持,也必须有一种方法可以发送该 XML 以有效地启用它,对吧? 是的,但我看不出它如何帮助您实施 XEP-0198。用 smack 解析这样的节将需要你按照现在的方式进行分叉。 Smack 4.1.0 现在支持 XEP-0198 流管理。 github.com/igniterealtime/Smack/wiki/… 感谢分享。我相应地更新了帖子。【参考方案2】:

我通过创建自己的包类型解决了这个问题:

public class MyPacket extends Packet

    private String content = "";

    public MyPacket(String content)
    
        this.content = content;
    
    @Override
    public String toXML()
    
        return this.content;
    

我在构造函数中传递 xml,然后关闭它:

MyPacket p = new MyPacket("<enable xmlns='urn:xmpp:sm:3'/>");
this.connection.sendPacket(p);

绝对不是世界上最好的代码,但它确实有效。

【讨论】:

我认为这不足以实际使用 XEP-0198 的功能。 事实并非如此,我实际上发现除非我修改核心库,否则无法绕过 smack 使用 XEP-0198。我能够像这样启用它! 你还有什么发现吗?

以上是关于在 aSmack 中启用 XEP-0198的主要内容,如果未能解决你的问题,请参考以下文章

asmack vs tigase xmpp 库

XEP-0198:流管理

XMPP协议扩展:XEP-0198 流管理(Stream Management)中文翻译(个人整理,难免有翻译错的地方,请多多指正)

如何在 Smack 中启用 XEP-0199?

如何使用 asmack android 从 Openfire 中检索一对一的聊天记录

XMPP 连接的 asmack-android-8-4.0.6.jar 问题