简体   繁体   English

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

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

I'm developing an IM application using Smack library, and I'm facing some problems. 我正在使用Smack库开发IM应用程序,我遇到了一些问题。

I'd like to know if it's possible to check for the existence of a user by its username in the server. 我想知道是否可以通过服务器中的用户名检查用户是否存在。 My application has to check if the people of the system contact list has an account opened in my server and they aren't in their friend list. 我的应用程序必须检查系统联系人列表中的人是否在我的服务器中打开了一个帐户,并且他们不在他们的朋友列表中。

So far I managed to add every contact in the system contact list to the server's contact list of my user -even if they haven't got an account beforehand-, but that's not what I'm looking for. 到目前为止,我设法将系统联系人列表中的每个联系人添加到我的用户的服务器联系人列表中 - 即使他们事先没有帐户 - 但这不是我正在寻找的。

Here is the code (Contact is like a wrapper class for Smack's RosterEntry): 这是代码(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();
            }
        }
    }
}

If it helps, I'm currently using Openfire as server. 如果有帮助,我目前正在使用Openfire作为服务器。

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

You can Try this Snippet for Searching a User : 您可以尝试使用此代码段搜索用户:

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