Android asmack使用介紹

XMPP協議簡介

XMPP協議(Extensible Messaging and PresenceProtocol,可擴展消息處理現場協議)是一種基於XML的協議,目的是爲了解決及時通訊標準而提出來的,最先是在Jabber上實現的。它繼承了在XML環境中靈活的發展性。所以,基於XMPP的應用具備超強的可擴展性。而且XML很易穿過防火牆,因此用XMPP構建的應用不易受到防火牆的阻礙。利用XMPP做爲通用的傳輸機制,不一樣組織內的不一樣應用均可以進行有效的通訊。android

這篇文章有基本的介紹,http://blog.csdn.net/xutaozero21/article/details/4873439api

IM

Instant Messenger,及時通訊軟件,就是你們使用的QQ、MSN Messenger和Gtalk等等。其中Gtalk 就是基於XMPP 協議的一個實現,其餘的則不是。當前IM 幾乎做爲每一個上網者必然使用的工具,在國外的大型企業中有一些企業級的IM應用,可是其商業價值還沒徹底發揮出來。設想既然XMPP 協議是一個公開的協議,那麼每一個企業均可以利用它來開發適合自己企業工做,提升自身生產效率的IM;甚至,你還能夠在網絡遊戲中集成這種通訊軟件,不但讓你能夠邊遊戲邊聊天,也能夠開發出適合遊戲自己的IM 應用,好比說一些遊戲關鍵場景提醒功能,團隊語音交流等等均可以基於IM來實現。安全

這裏使用openfire、smack和spark,完成xmpp IM實現,這裏簡單介紹一下這3個的做用:服務器

openfire主要是做爲服務器,負責管理客戶端的通訊鏈接,以及提供客戶端一些通訊信息和鏈接信息。網絡

Smack主要是xmpp協議的實現,提供了一套很好的api,因此下面操做xmpp都是經過使用smack的api來實現,固然由於是在android裏,因此使用的是asmack這個包,裏面方法跟smack包差很少。jsp

Spark 是IM客戶端的實現,其實就是使用了smack 的api實現的。ide


ASmack 使用

1、鏈接服務器

//配置文件  參數(服務地地址,端口號,域)
ConnectionConfiguration configuration = new ConnectionConfiguration("192.168.0.110",5222,"");
//設置不須要SAS驗證
configuration.setSASLAuthenticationEnabled(false);
//設置安全類型
configuration.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
//創建鏈接
XMPPConnection conn = new XMPPConnection(configuration);


2、註冊模塊

註冊有兩種方法:工具

一種是用createAccount ,不過我測試了一下發現不能建立用戶,具體緣由不詳,下面介紹第二種。測試

AccountManager accountManager = conn.getAccountManager();
try
{
   
accountManager.createAccount("saliya", "123456");
} catch (XMPPException e) {
   e.printStackTrace();
}

一種是經過Registration類進行字體

Registration reg = new Registration();
//設置類型
reg.setType(IQ.Type.SET);
//發送到哪
reg.setTo(conn.getServiceName());
//設置用戶名
reg.setUsername("keven1");
//設置密碼
reg.setPassword("123456");
//設置其他屬性(可選)
reg.addAttribute("android", "geolo_createUser_android");

//建立包過濾器
PacketFilter filter = new AndFilter(new PacketIDFilter(reg.getPacketID()), new PacketTypeFilter(IQ.class));
//建立包收集器
PacketCollector collector = conn.createPacketCollector(filter);
//發送包
conn.sendPacket(reg);

//獲取返回信息
IQ result = (IQ) collector.nextResult(SmackConfiguration.getPacketReplyTimeout());
// 取消收集
collector.cancel();
//經過返回信息判斷
if (result == null) {
   Toast.makeText(getApplicationContext(),"服務器異常" ,Toast.LENGTH_SHORT).show();
} else if (result.getType() == IQ.Type.ERROR) {
   if (result.getError().toString().equalsIgnoreCase("conflict(409)")) {
       Toast.makeText(getApplicationContext(),"註冊失敗,用戶已存在" , Toast.LENGTH_SHORT).show();
   
} else {
       Toast.makeText(getApplicationContext(), "註冊失敗", Toast.LENGTH_SHORT).show();
   
}
} else if (result.getType() == IQ.Type.RESULT) {
   Toast.makeText(getApplicationContext(), "註冊成功", Toast.LENGTH_SHORT).show();
}

3、登陸

一、登陸

conn.login("kooeasy","********");

二、獲取聯繫人

Roster roster = conn.getRoster();    //獲取名冊
Collection<RosterEntry> entries = roster.getEntries();    //獲取聯繫人

三、獲取名片

//建立名片
VCard vCard = new VCard();
//加載名片(鏈接,用戶)
try {
   vCard.load(conn, user);
   //獲取頭像
   ByteArrayInputStream inputStream = new ByteArrayInputStream(vCard.getAvatar());
   Bitmap mAvatar = BitmapFactory.decodeStream(inputStream);
   ...
} catch (XMPPException e) {
   e.printStackTrace();
}

四、添加好友、分組

Roster roster = conn.getRoster();

roster.createGroup("group");

try {
    roster.createEntry("userName","user",new String[]{"Group"});
   
    roster.removeEntry();
} catch (XMPPException e) {
    e.printStackTrace();
}
4、發送消息

//建立聊天管理器
ChatManager chatManager = conn.getChatManager();
//建立一個聊天:(用戶,聊天監聽)再此添加聊天監聽沒法監聽Bug?
Chat msg = chatManager.createChat(user, null);
//給聊天管理器添加了聊天監聽
chatManager.addChatListener(new ChatManagerListener() {
   @Override
   public void chatCreated(Chat chat, boolean b) {
       //給聊天,添加監聽
       chat.addMessageListener(new MessageListener() {
           @Override
           public void processMessage(Chat chat, Message message) {
               Log.i("MSG", message.getBody());
           }
       });

   }
});
try {
   //開始發送消息
   msg.sendMessage("你好 能收到嗎?");
} catch (XMPPException e) {
   e.printStackTrace();
}



關於Smack

XMPP——Smack[1]鏈接、登錄及帳戶操做

XMPP——Smack[2]會話、消息監聽、字體表情和聊天窗口控制

XMPP——Smack[3]用戶列表,頭像,組操做,用戶操做

XMPP——Smack[4]狀態,心情,頭像更改

XMPP——Smack[5]文件傳輸及離線消息的獲取

以上僅作參考,更多請參看 smack 4.0

相關文章
相關標籤/搜索