基于openfire+smack開發(fā)Android即時聊天應(yīng)用[三]-賬號信息、添加好友、JID理解等

這一篇文章主要介紹賬號的屬性及幾個重要屬性的理解,同時介紹如何添加好友,獲取好友列表信息,最后介紹我對JID這個屬性字段的幾種理解。

1.賬號信息

獲取賬號的所有額外屬性信息

/**
   * 獲取賬戶所有屬性信息
   * @return
   */
public Set getAccountAttributes() {
        if(isConnected()) {
           try {
               return AccountManager.getInstance(connection).getAccountAttributes();
           } catch (Exception e) {
               throw new RuntimeException(e);
           }
       }
       throw new NullPointerException("服務(wù)器連接失敗,請先連接服務(wù)器");
}

上面取出的屬性集合里主要包含如下幾個屬性值:

上述幾個屬性中的name屬性即為用戶的昵稱屬性,另外用戶賬號名、密碼是不在這些屬性當(dāng)中的,賬號名可以理解為是JID,可以通過RosterEntry.getUser這個方法獲取,關(guān)于JID的理解請看下面的介紹

2.獲取當(dāng)前登錄用戶的所有好友信息

/**
  * 獲取當(dāng)前登錄用戶的所有好友信息
  * @return
  */
 public Set getAllFriends() {
    if(isConnected()) {
        return Roster.getInstanceFor(connection).getEntries();
    }
    throw new NullPointerException("服務(wù)器連接失敗,請先連接服務(wù)器");
 }

3.獲取指定賬號好友信息

/**
  * 獲取指定賬號的好友信息
  * @param user 賬號
  * @return
  */
 public RosterEntry getFriend(String user) {
    if(isConnected()) {
        return Roster.getInstanceFor(connection).getEntry(user);
    }
    throw new NullPointerException("服務(wù)器連接失敗,請先連接服務(wù)器");
 }

4.添加好友

/**
   * 添加好友
   * @param user         用戶賬號
   * @param nickName       用戶昵稱
   * @param groupName    所屬組名
   * @return
   */
  public boolean addFriend(String user, String nickName, String groupName) {
    if(isConnected()) {
        try {
    Roster.getInstanceFor(connection).createEntry(user, nickName, new String[]{groupName});
    return true;
} catch (NotLoggedInException | NoResponseException | XMPPErrorException 
                              | NotConnectedException e) {
    return false;
}
    }
    throw new NullPointerException("服務(wù)器連接失敗,請先連接服務(wù)器");
  }

5.關(guān)于對JID的理解

我對JID的理解主要是根據(jù)我在基于smack開發(fā)即時通信聊天應(yīng)用時遇到的幾種情況做的一個歸納,我碰到的JID的介紹主要有三種:

  1. 每個用戶的好友列表中有一個JID,這個可以根據(jù)Openfire后臺管理系統(tǒng)可以看出來,如下圖:Smack_JID上面圖中可以清晰的看到每個好友都對應(yīng)有一個JID,而在我通過addFriend(String user, String nickName, String groupName)這個方法添加好友的時候,參數(shù)用戶賬號user最終就變成了上面的JID,是沒有包含@符號和后面的服務(wù)器名的,我稱這種JID為好友JID,如管理員賬號的JID為:admin。這個JID通過官方提供的接口RosterEntry.getUser是可以獲取到的。

  2. 好友之間聊天時有一個JID,在我創(chuàng)建聊天窗口對象Chat時(怎么創(chuàng)建請看我下一篇文章),所傳的參數(shù)也是JID,但是這個JID和上面的JID的值卻又不是一樣的,不然會創(chuàng)建失敗,我們來看看官方API:

    image.png

    官方API中很明顯的指出了參數(shù)為JID,但是我如果真的出好友列表中的JID的話創(chuàng)建聊天對象失敗,必須這樣傳好友JID@ServiceName ,這是第二種JID,我稱為聊天JID,比如和管理員聊天時的JID為:[admin@192.168.0.108](mailto:%60admin@192.168.0.108)

  3. 好友之間傳輸文件時又有一個JID,在創(chuàng)建文件傳輸對象時也需要傳遞一個參數(shù)為JID,我們也來看看官方API:

    image.png

    官方API中也顯示了在獲取文件傳輸對象時需要傳遞參數(shù)為JID,但是這個JID我給的是聊天JID的時候,根本創(chuàng)建不了文件傳輸對象,后來在網(wǎng)上查了半天,看到別人都在后面加了個Smack,我也試了下,結(jié)果竟然成功了,坑爹啊,反正我還沒搞清楚這是為什么,格式是這樣的:好友JID@ServiceNam/Smack,我稱這種JID為文件傳輸JID,比如聊天時給管理員傳文件時的JID為:[admin@192.168.0.108](mailto:%60admin@192.168.0.108)/Smack

這就是我碰到的JID的三種使用情況

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容