簡體   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