【原创】轻量级即时通讯技术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说明:点此进入。
特别说明:为了保证算法的一致性,以上设置需所有平台客户端和服务端都保持一致,否则将发生不可预测问题。
作者:Jack Jiang (点击作者姓名进入Github)
出处:http://www.52im.net/space-uid-1.html
交流:欢迎加入即时通讯开发交流群 215891622
讨论:http://www.52im.net/
Jack Jiang同时是【原创Java
Swing外观工程BeautyEye】和【轻量级移动端即时通讯框架MobileIMSDK】的作者,可前往下载交流。
本博文
欢迎转载,转载请注明出处(也可前往 我的52im.net 找到我)。