使用 XMPP 的谷歌谈话服务器没有会话 IQ 响应

Posted

技术标签:

【中文标题】使用 XMPP 的谷歌谈话服务器没有会话 IQ 响应【英文标题】:No session IQ response from the google talk server using XMPP 【发布时间】:2013-05-17 09:33:11 【问题描述】:

我正在尝试模仿 XMPP 流来连接到 google talk 服务器。 但是,我在发送会话 IQ 时遇到了问题:

问题:发送后我没有收到来自服务器的任何响应:

<iq id="skcevhxmpp_ceschool@gmail.com_6" type="set" to="gmail.com"><session xmlns="urn:ietf:params:xml:ns:xmpp-session" /></iq>

这是完整的流程:

<stream:stream to='gmail.com' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' xml:lang='en'>**
<stream:stream from="gmail.com" id="7FB5653900A7A245" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client">
<stream:features><starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"><required/></starttls><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>X-OAUTH2</mechanism><mechanism>X-GOOGLE-TOKEN</mechanism></mechanisms></stream:features>

<starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls" />
<proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>

<stream:stream to='gmail.com' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' xml:lang='en'>
<stream:stream from="gmail.com" id="508024A63664BA3D" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client">
<stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>X-OAUTH2</mechanism><mechanism>X-GOOGLE-TOKEN</mechanism><mechanism>PLAIN</mechanism></mechanisms></stream:features>

<auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="PLAIN">Valid auth token</auth>
<success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>

<stream:stream to='gmail.com' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' xml:lang='en'>
<stream:stream from="gmail.com" id="A407B98F76E98F73" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client">
<stream:features><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></stream:features>

<iq id="skcevhxmpp_ceschool@gmail.com_5" type="set"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><resource>xmpp</resource></bind></iq>
<iq id="skcevhxmpp_ceschool@gmail.com_5" type="result"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><jid>ceschool@gmail.com/xmppFC762B4C</jid></bind></iq>

<iq id="skcevhxmpp_ceschool@gmail.com_6" type="set" to="gmail.com"><session xmlns="urn:ietf:params:xml:ns:xmpp-session" /></iq>

额外信息:

我使用 PLAIN 身份验证(请参阅: https://developers.google.com/cloud-print/docs/rawxmpp)

我在收到继续后开始使用 SslStream ... xmpp tls

我使用 google talk 服务器将 xmpp 消息发送到 (talk.google.com)

预期的响应是这样的:

<iq xmlns="jabber:client" from="gmail.com" type="result" id="skcevhxmpp_ceschool@gmail.com_6" />

提前致谢!

【问题讨论】:

【参考方案1】:

尝试发送不带 to 属性的会话 iq。

<iq id="abcd" type="set">
  <session xmlns="urn:ietf:params:xml:ns:xmpp-session" />
</iq>

【讨论】:

感谢您的回复。我试过没有 to 属性,但仍然是同样的问题。

以上是关于使用 XMPP 的谷歌谈话服务器没有会话 IQ 响应的主要内容,如果未能解决你的问题,请参考以下文章

Google Talk 是如何工作的?

XMPP IQ 结果解析问题

没有浏览器的谷歌驱动器登录api

如何使用 Smack Android 库将 XMPP IQ 节发送到服务器?

发送和接收 IQ ASMACK Android XMPP

XMPP节之message,presence,IQ介绍