這一篇文章主要介紹賬號的屬性及幾個重要屬性的理解,同時介紹如何添加好友,獲取好友列表信息,最后介紹我對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的介紹主要有三種:
每個用戶的好友列表中有一個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是可以獲取到的。
-
好友之間聊天時有一個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) -
好友之間傳輸文件時又有一個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的三種使用情況


