其他分享
首页 > 其他分享> > 在Android上使用aSmack发送和接收自定义XMPP IQ

在Android上使用aSmack发送和接收自定义XMPP IQ

作者:互联网

背景:

我在Android上使用aSmack for XMPP实现了一对一聊天.我也能够发送和接收IQ消息.

问题是:

我无法发送和接收自定义IQ消息.例如,如果我想发送智商

<iq type='get'
    to='ssmack@web.mystudios.com/mack'>
<query xmlns='http://jabber.org/protocol/disco#items'/>
</iq>

aSmack适用于这个IQ,因为它不是自定义的,但是如果我将这里的名称空间从disco#items更改为Match它将无法正常工作它将向服务器发回响应说明

<error code='503'
       type='cancel'>
<service-unavailable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
</error>

这个回复是从我的客户发送的.但我试图调试它,我在所有接收和发送数据包代码上放置了断点.但它没有进入那里.

我接收数据包的代码是:

connection.addPacketListener(new PacketListener() {

                @Override
                public void processPacket(Packet p) {
                    // TODO Auto-generated method stub
                    String fromName1 = StringUtils.parseBareAddress(p.getFrom());
                    Log.i("XMPPClient", "Got text [" + p.toXML() + "] from [" + fromName1 + "]");

                    m1=p.getFrom();


                    mHandler.post(new Runnable() {
                        public void run() {
                            setListAdapter();
                            recieve.setText(m1);
                        }
                    });

我想我需要添加一些监听器来获取自定义响应.有人可以指导我完成吗?

解决方法:

代码不完整. addPacketListener()接受两个参数.

我怀疑你没有在接收端注册自定义IQ的提供者,这就是为什么它返回< service-unavailable xmlns ='urn:ietf:params:xml:ns:xmpp-stanzas'/>

您可能想要阅读一些文档:

> Provider Architecture: Packet Extensions and Custom IQ’s
> Brief Tutorial on IQ Providers

标签:asmack,android,xmpp
来源: https://codeday.me/bug/20191003/1847994.html