申明: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說明:點此進入。
特別說明:為了保證算法的一致性,以上設置需所有平台客戶端和服務端都保持一致,否則將發生不可預測問題。