【原創】輕量級即時通訊技術MobileIMSDK:Android客戶端開發指南


 


申明:MobileIMSDK 目前為個人維護的原創開源工程,現陸續整理了一些資料,希望對需要的人有用。如需與作者交流,見文章底簽名處,互相學習。 


MobileIMSDK開源工程的代碼托管地址請進入 Git@OSC:點擊進入 

MobileIMSDK的Android客戶端SDK文檔:點擊進入

學習交流

  • 討論學習和資料區:點此進入 推薦
  • 移動端即時通訊交流: 215891622 推薦
  • bug/建議發送至:jb2011@163.com

 

【寫在前面】

MobileIMSDK的Android客戶端Demo工程演示了一個精心編寫的簡易即時通訊客戶端,相關代碼和最佳實踐可參考之,它位於SDK完整下載包的 src_all/client/android/MobileIMSDK4a/ 目錄下,這是一個完整的Eclipse+ADT工程。

您也可以下載編譯好的Demo安裝包先行體驗:點此進入

 

【第一部分】:集成准備

> 第1步:下載SDK並找到lib包

 馬上下載:
最新版打包下載 點此進入,或者前往 MobileIMSDK的Github 自行同步代碼。

 找到lib包:
位於SDK完整下載包的 dist/client/android/ 目錄下:
 

> 第2步:引用lib包

提示:MobileIMSDK的Android客戶端lib包支持Android 2.3(含)及以上版本。

 Eclipse中如何引用第3方jar包?
直接將lib包復制到Eclipse的Android工程的 libs/ 目錄下,F5刷新后即可。
如果是其它Android IDE工具,請依此類推。

 以MobileIMSDK的Demo工程為例,結果如下圖:
 

 

【第二部分】:編寫代碼

> 第1步:基本配置

1 // 設置AppKey
2 2 ConfigEntity.appKey = "5418023dfd98c579b6001741";
3 3                          
4 4 // 設置服務器ip和服務器端口
5 5 ConfigEntity.serverIP = "rbcore.openmob.net";
6 6 ConfigEntity.serverUDPPort = 7901;
7 7              
8 8 // 請確保首先進行核心庫的初始化(這不同於iOS和Java端)
9 9 ClientCoreSDK.getInstance().init(this.context);

> 第2步:回調設置

① 框架基本事件回調實現類:

 1 public class ChatBaseEventImpl implements ChatBaseEvent
 2 {       
 3     // 登陸/掉線重連結果通知
 4     @Override
 5     public void onLoginMessage(int dwUserId, int dwErrorCode)
 6     {
 7         if (dwErrorCode == 0)
 8             Log.i(TAG, "登錄成功,當前分配的user_id="+dwUserId);
 9         else
10             Log.i(TAG, "登錄失敗,錯誤代碼:" + dwErrorCode);
11     }
12  
13     // 掉線事件通知
14     @Override
15     public void onLinkCloseMessage(int dwErrorCode)
16     {
17         Log.i(TAG, "網絡連接出錯關閉了,error:" + dwErrorCode);
18     }
19 }

② 實時消息事件回調實現類:

 1 public class ChatTransDataEventImpl implements ChatTransDataEvent
 2 {
 3     // 收到即時通訊消息通知
 4     @Override
 5     public void onTransBuffer(String fingerPrintOfProtocal, int dwUserid, String dataContent)
 6     {
 7         Log.i(TAG, "收到來自用戶"+dwUserid+"的消息:"+dataContent);
 8     }
 9  
10     // 收到服務端反饋的錯誤信息通知
11     @Override
12     public void onErrorResponse(int errorCode, String errorMsg)
13     {
14         Log.i(TAG, "收到服務端錯誤消息,errorCode="+errorCode+", errorMsg="+errorMsg);
15     }
16 }

③ QoS相關事件回調實現類:

 1 public class MessageQoSEventImpl implements MessageQoSEvent
 2 {
 3     // 消息無法完成實時送達的通知
 4     @Override
 5     public void messagesLost(ArrayList<Protocal> lostMessages)
 6     {
 7         Log.i(TAG, "收到系統的未實時送達事件通知,當前共有"
 8             +lostMessages.size()+"個包QoS保證機制結束,判定為【無法實時送達】!");
 9     }
10  
11     // 對方已成功收到消息的通知
12     @Override
13     public void messagesBeReceived(String theFingerPrint)
14     {
15         if(theFingerPrint != null)
16             Log.i(TAG, "收到對方已收到消息事件的通知,消息指紋碼="+theFingerPrint);
17     }
18 }

* 設置好事件回調通知監聽:

1 ClientCoreSDK.getInstance().setChatBaseEvent(new ChatBaseEventImpl());
2 ClientCoreSDK.getInstance().setChatTransDataEvent(new ChatTransDataEventImpl());
3 ClientCoreSDK.getInstance().setMessageQoSEvent(new MessageQoSEventImpl());

> 第3步:登陸請求

 1 new LocalUDPDataSender.SendLoginDataAsync(用戶名, 密碼){
 2     @Override
 3     protected void fireAfterSendLogin(int code)
 4     {
 5         if(code == 0)
 6             Log.i(TAG, "數據發送成功!");
 7         else
 8             Log.i(TAG, "數據發送失敗。錯誤碼是:"+code+"!");
 9     }
10 }.execute();

> 第4步: 發送消息

 1 new LocalUDPDataSender.SendCommonDataAsync("這是一條測試信息...", 對方的userId, true){
 2     @Override
 3     protected void onPostExecute(Integer code)
 4     {
 5         if(code == 0)
 6             Log.i(TAG, "數據已成功發出!");
 7         else
 8             Log.i(TAG, "數據發送失敗。錯誤碼是:"+code+"!");
 9     }
10 }.execute();

 

【第三部分】:常見開發問題附錄

附錄1:可以讓客戶端更省電嗎?

請調用以下API進行設置即可(框架默認工作在SenseMode.MODE_3S模式下):

1 // MobileIMSDK核心IM框架的敏感度模式設置
2 ConfigEntity.setSenseMode(SenseMode.MODE_10S);

MobileIMSDK預定義了多種模式,詳細API說明:點此進入
特別說明:為了保證算法的一致性,以上設置需所有平台客戶端和服務端都保持一致,否則將發生不可預測問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM