繁体   English   中英

如何从客户端知道XMPP服务器中是否存在帐户?

[英]How do I know if an account exists in a XMPP server from the client?

我正在使用Smack库开发IM应用程序,我遇到了一些问题。

我想知道是否可以通过服务器中的用户名检查用户是否存在。 我的应用程序必须检查系统联系人列表中的人是否在我的服务器中打开了一个帐户,并且他们不在他们的朋友列表中。

到目前为止,我设法将系统联系人列表中的每个联系人添加到我的用户的服务器联系人列表中 - 即使他们事先没有帐户 - 但这不是我正在寻找的。

这是代码(Contact就像Smack的RosterEntry的包装类):

public void addAllContactsIfExisting(Contact[] contactsAgenda) {

    for (Contact contact: contactsAgenda) {
        if (!isContactMyFriend(contact)) {
            try {
                // I'd like to check for account existence here, being contact.getJid() the username as it'd be in the server
                conn.getRoster().createEntry(contact.getJid(), contact.getName(), null);
            } catch (XMPPException e) {
                e.printStackTrace();
            }
        }
    }
}

如果有帮助,我目前正在使用Openfire作为服务器。

您可以使用UserSearch类搜索特定用户,如果在服务器上找不到用户,则可以假定该用户未在服务器上注册。

您可以尝试使用此代码段搜索用户:

public Boolean checkIfUserExists(String user) throws XMPPException{
    UserSearchManager search = new UserSearchManager(xmppConnection);  
    Form searchForm = search.getSearchForm("search."+xmppConnection.getServiceName());
    Form answerForm = searchForm.createAnswerForm();  
    answerForm.setAnswer("Username", true);  
    answerForm.setAnswer("search", user);  
    ReportedData data = search.getSearchResults(answerForm,"search."+xmppConnection.getServiceName());  
    if (data.getRows() != null) {
        Iterator<Row> it = data.getRows();
        while (it.hasNext()) {
            Row row = it.next();
            Iterator iterator = row.getValues("jid");
            if (iterator.hasNext()) {
                String value = iterator.next().toString();
                System.out.println("Iteartor values...... " + value);
            }
        }
        return true;
    }
    return false;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM