Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何检查XMPPFrameWork中是否已经使用了用户JID_Ios_Swift_Xmppframework - Fatal编程技术网

Ios 如何检查XMPPFrameWork中是否已经使用了用户JID

Ios 如何检查XMPPFrameWork中是否已经使用了用户JID,ios,swift,xmppframework,Ios,Swift,Xmppframework,我对xmppframework有点陌生。我有一个简短的问题。是否有可能知道某个JID是否可用。换句话说,是否有可能检查用户名是否已与某个帐户关联或注册。使用jabber search yes,您可以搜索并查找具有特定JID或用户名的用户,或者 在这里,我创建了一个函数,该函数将一些jID作为参数,服务器对您的响应作为一个查询,在该查询中,如果任何东西匹配,则将有包含具有匹配jID的用户的项 func xmppQueryForSearchPacket(forJID jid: String) {

我对xmppframework有点陌生。我有一个简短的问题。是否有可能知道某个JID是否可用。换句话说,是否有可能检查用户名是否已与某个帐户关联或注册。

使用jabber search yes,您可以搜索并查找具有特定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
    }
}

欲了解更多信息,请阅读。

您好,谢谢您的回复,但我收到了来自我的服务器的错误消息,说明没有模块正在处理此查询。您知道我显示的是哪个模块启用的吗?您好,我认为要使此工作正常,应该启用v_卡模块,对吗?@Ahmed您使用的是哪台服务器?如果您在插件中使用Openfire,则必须启用搜索模块。如果您使用ejabberd,则应在ejabberd目录中打开配置文件,启用搜索模块,并为其定义一些服务名称,以便examle search.ejabberd.no无需v_cardI使用ejabberd,我在我的配置中设置mod_vcard:search:true对不起,你说的服务名是什么意思。它是子域吗。在ejabberconfig文件中,我应该在哪里包含我的服务名称。@Ahmed是的,所有用户都必须将他们的vcard发布到服务器和vjud。服务将在vcard上查询某些内容以进行搜索