如何检查用户 JID 是不是已在 XMPPFrameWork 中使用
Posted
技术标签:
【中文标题】如何检查用户 JID 是不是已在 XMPPFrameWork 中使用【英文标题】:How to check if a user JID is already taken in XMPPFrameWork如何检查用户 JID 是否已在 XMPPFrameWork 中使用 【发布时间】:2018-08-09 03:04:09 【问题描述】:我是 xmppframework 的新手。我有一个快速的问题。是否有可能知道某个 JID 是否可用。换句话说,是否可以检查用户名是否已与某个帐户关联或注册。
【问题讨论】:
【参考方案1】:使用 jabber 搜索是的,您可以搜索并找到具有特定 jID 或用户名的用户或 ...
在这里,我创建了一个函数,该函数将一些 jID 作为参数,服务器对您的响应作为查询,并且在该查询中,如果有任何匹配项,则将包含具有匹配 jID 的用户的项目
func xmppQueryForSearchPacket(forJID jid: String)
let searchingServer = "search.something" //something must replace with your xmpp domain name
let query = DDXMLElement(name: "query", xmlns: "jabber:iq:search")
let x = DDXMLElement(name: "x", xmlns: "jabber:x:data")
x.addAttribute(withName: "type", stringValue: "submit")
let field1 = DDXMLElement(name: "field")
let value1 = DDXMLElement(name: "value", stringValue: "jabber:iq:search")
field1.addAttribute(withName: "type", stringValue: "hidden")
field1.addAttribute(withName: "var", stringValue: "FORM_TYPE")
field1.addChild(value1)
let field2 = DDXMLElement(name: "field")
let value2 = DDXMLElement(name: "value", stringValue: jid)
field2.addAttribute(withName: "type", stringValue: "text-single")
field2.addAttribute(withName: "var", stringValue: "search")
field2.addChild(value2)
//we just search in userNames
let field3 = DDXMLElement(name: "field")
let value3 = DDXMLElement(name: "value", stringValue: "1")
field3.addAttribute(withName: "type", stringValue: "boolean")
field3.addAttribute(withName: "var", stringValue: "Username")
field3.addChild(value3)
x.addChild(field1)
x.addChild(field2)
x.addChild(field3)
query.addChild(x)
let iq = XMPPIQ(iqType: .set, to: XMPPJID(string: searchingServer), elementID: XMPPStream.generateUUID, child: query)
XMPPStream.send(iq)
该数据包的答案将以查询形式出现,您可以像这样接收它:
extension yourClassName: XMPPStreamDelegate
func xmppStream(_ sender: XMPPStream, didReceive iq: XMPPIQ) -> Bool
let searchingServer = "search.something"
if iq.from?.bare != searchingServer
return true
return false
更多信息请阅读XEP-0055。
【讨论】:
您好,感谢您的回复,但我收到了来自服务器的错误消息,指出“没有模块正在处理此查询”你知道我显示的模块是启用的吗 嗨,我认为要使这个工作,应该启用 v_card 模块对吗? @Ahmed 您使用的是哪个服务器?如果您在插件中使用 Openfire,您必须启用搜索模块。如果您使用 ejabberd,您应该在 ejabberd 目录中打开配置文件并启用您的搜索模块并为其定义一些服务名称,例如 search.ejabberd.no 不需要v_card 我正在使用 ejabberd 并且我在我的配置文件中设置了 mod_vcard: search: true 抱歉,服务名称是什么意思。它是一个子域。我应该在 ejabberconfig 文件中的哪里包含我的服务名称。 @Ahmed 是的,所有用户都必须将他们的 vcard 发布到服务器,vjud.something 服务将在 vcard 上查询以进行搜索以上是关于如何检查用户 JID 是不是已在 XMPPFrameWork 中使用的主要内容,如果未能解决你的问题,请参考以下文章
如何检查用户是不是已在 React Native Android 中授予相机权限?
如何检查用户是不是已在 ejabberd 服务器中注册或未使用 asmack