gpt4 book ai didi

android - 发送自定义 IQ 查询 (Android)(Smack)

转载 作者:行者123 更新时间:2023-11-29 19:26:21 27 4
gpt4 key购买 nike

结果的格式将是这样的。

<iq from='52@localhost' to='20@localhost/Gajim' id='253' type='result'>
<query xmlns='someName'>
<item subscription='both' jid='1@localhost'/>
</query>
</iq>

我正在尝试发送具有以下格式的自定义 iq 查询。

 <iq xmlns="Name" type="get" id="253">
<query xmlns="someName">
<auth type='token'>asd</auth>
</query>
</iq>

由此我了解到我需要发送一个带有授权类型 token ( token id)的查询。这是我的尝试。

final IQ iq = new IQ() {  
@Override
public String getChildElementXML() {
return "<query xmlns='someName'auth type="+t_id"+"asd<................'</query>"; // I am confused on how to write here
}
};
iq.setType(IQ.Type.get);
connection.sendPacket(iq); // connection is an XMPPTCPConnection object.

我对如何完成此 getChildElementXML() 感到困惑,此外,当我尝试实例化一个新的 IQ 时出现错误,因为我需要实现一些构建器方法。我应该创建一个新类来发送自定义 IQ 查询吗?有人可以展示如何做吗?

注意:建设性的反馈表示赞赏,如果有人指出歧义,我可以使问题更清楚。

最佳答案

这将回答您的问题,但请记住,在下一步中您将需要这样的东西:Mapping Openfire Custom plugin with aSmack Client


一般来说,ID是由smack API创建的,不值得你手动分配。

一般来说,xmnls 但要分配给自定义标签而不是 IQ 本身。

我们的目标:

 <iq from="me@domain" to="domain" type="get" id="253">
<query xmlns="someName">
<auth type='token'>asd</auth>
</query>
</iq>

你的类(class)会是什么样子:

package ....;

import org.jivesoftware.smack.packet.IQ;



public class IQCustomAuth extends IQ
{
public final static String childElementName = "query";
public final static String childElementNamespace = "com:prethia:query#auth";


private final String auth;
private final String typeAuth;

public IQCustomAuth(String userFrom, String server, String typeAuth, String auth)
{

super( childElementName, childElementNamespace );
this.setType( IQ.Type.get );
this.auth = auth;
this.typeAuth = typeAuth;
setTo( server );
setFrom( userFrom );
}



@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder( IQChildElementXmlStringBuilder xml )
{

xml.rightAngleBracket();
xml.halfOpenElement( "auth ");
xml.attribute( "type", this.typeAuth );
xml.rightAngleBracket();
xml.append(auth);
xml.closeElement("auth");
return xml;
}




}

测试:

IQCustomAuth iq = new IQCustomAuth( "me@domain", "domain", "token", "asd" );
System.out.println(iq.toString());

发送:

connection.sendPacket(new IQCustomAuth( "me@domain", "domain", "token", "asd" ));

关于android - 发送自定义 IQ 查询 (Android)(Smack),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41323363/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com