標籤:
申明:MobileIMSDK 目前為個人維護的原創開源工程,現陸續整理了一些資料,希望對需要的人有用。如需與作者交流,見文章底簽名處,互相學習。
MobileIMSDK開源工程的代碼託管地址請進入 [email protected]:點擊進入
MobileIMSDK的Android用戶端SDK文檔:點擊進入
學習交流
- 討論學習和資料區:點此進入 推薦
- 移動端即時通訊交流: 215891622 推薦
- bug/建議發送至:[email protected]
【寫在前面】
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 // 設定AppKey2 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 else10 Log.i(TAG, "登入失敗,錯誤碼:" + dwErrorCode);11 }12 13 // 掉線事件通知14 @Override15 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 @Override12 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 @Override13 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說明:點此進入。
特別說明:為了保證演算法的一致性,以上設定需所有平台用戶端和服務端都保持一致,否則將發生不可預測問題。
【原創】輕量級即時通訊技術MobileIMSDK:Android用戶端開發指南