XEP - 0055 与 iOS 和 ejabberd?

Posted

技术标签:

【中文标题】XEP - 0055 与 iOS 和 ejabberd?【英文标题】:XEP - 0055 with iOS and ejabberd? 【发布时间】:2014-11-07 11:48:41 【问题描述】:

我正在尝试实现由 ejabbed 支持的 XEP-0055,如supported xeps 中所示。

这是我的要求:

XMPPIQ *iq = [[XMPPIQ alloc] init];
[iq addAttributeWithName:@"type" stringValue:@"get"];
[iq addAttributeWithName:@"from" stringValue:@"testuser1@company.com"];
[iq addAttributeWithName:@"to" stringValue:@"company.com"];
[iq addAttributeWithName:@"id" stringValue:@"search1"];
XMPPElement *query = [XMPPElement elementWithName:@"query"];
[query setXmlns:@"jabber:iq:search"];
[iq addChild:query];
[self.xmppStream sendElement:iq];

我收到了这样的回复:

<iq xmlns="jabber:client" from="company.com" to="testuser1@company.com/2834146151141475281662718" type="error" id="search1">
<query xmlns="jabber:iq:search"/>
<error code="501" type="cancel">
<feature-not-implemented xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
</error>
</iq>

为什么我会收到未实现的功能? XEP官方链接description.

【问题讨论】:

【参考方案1】:

在 ejabberd 中,搜索功能被委托给子域,默认情况下使用 vjud 前缀。请尝试将搜索请求发送到 vjud.company.com

【讨论】:

如我所想,错误出现在“to”属性中!现在可以了,非常感谢!但是我在哪里可以找到 ejabberd 实现的所有可能的服务?我的意思是 service.company.com 中“服务”的可能值? 您可以通过向“主”服务器(即company.com)发送迪斯科项目请求(参见 XEP-0030)来获取这些项目。 是的,我这样做了几次,但我在响应中看到了 erlang 模块,例如“vcard-temp”或“carbons”,但这些是模块。我应该将模块视为服务吗?此外,我还遇到了其他一些问题。你能看看link吗?感谢您的帮助! 如果您在结果中看到 vcard-temp,那么您可能发送了 info 请求,而不是 items 请求。 是的,使用jabber.org/protocol/disco#**items** 检索会议、pubsub 和 vjud .company.com。再次感谢!

以上是关于XEP - 0055 与 iOS 和 ejabberd?的主要内容,如果未能解决你的问题,请参考以下文章

Strophe.js Jabber 搜索 (XEP-0055)

XEP-0055 的错误 400 错误请求?

XMPP - iphone sdk 中的用户搜索?在 iphone sdk 中使用 XEP-0055?

XMPP 带内注册(XEP-0077):与简单的 jid/pw 登录不同,都有哪些步骤?

ejabberd 上所有用户的最后活动

XMPP IQ 结果解析问题