MobileIMSDK开源工程的代码托管地址请进入 Git@OSC:
学习交流
讨论学习和资料区: 推荐
移动端即时通讯交流群: 215891622 推荐
bug/建议发送至:jb2011@163.com
技术支持/合作/咨询请联系作者QQ:413980957
写在前面
MobileIMSDK的Android客户端Demo工程演示了一个精心编写的简易即时通讯客户端,相关代码和最佳实践可参考之,它位于SDK完整下载包的 src_all/client/android/MobileIMSDK4a/ 目录下,这是一个完整的Eclipse+ADT工程。您也可以下载编译好的Demo安装包先行体验:。第一部分:集成准备
第1步:下载SDK并找到lib包
① 马上下载:最新版打包下载 ,或者前往 自行同步代码。② 找到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 2 3 4 5 6 7 8 9 | // 设置AppKey ConfigEntity.appKey = "5418023dfd98c579b6001741" ; // 设置服务器ip和服务器端口 ConfigEntity.serverIP = "rbcore.openmob.net" ; ConfigEntity.serverUDPPort = 7901 ; // 请确保首先进行核心库的初始化(这不同于iOS和Java端) ClientCoreSDK.getInstance().init( this .context); |
第2步:回调设置
① 框架基本事件回调实现类: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 | public class ChatBaseEventImpl implements ChatBaseEvent { // 登陆/掉线重连结果通知 @Override public void onLoginMessage( int dwUserId, int dwErrorCode) { if (dwErrorCode == 0 ) Log.i(TAG, "登录成功,当前分配的user_id=" +dwUserId); else Log.i(TAG, "登录失败,错误代码:" + dwErrorCode); } // 掉线事件通知 @Override public void onLinkCloseMessage( int dwErrorCode) { Log.i(TAG, "网络连接出错关闭了,error:" + dwErrorCode); } } |
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 | public class ChatTransDataEventImpl implements ChatTransDataEvent { // 收到即时通讯消息通知 @Override public void onTransBuffer(String fingerPrintOfProtocal, int dwUserid, String dataContent) { Log.i(TAG, "收到来自用户" +dwUserid+ "的消息:" +dataContent); } // 收到服务端反馈的错误信息通知 @Override public void onErrorResponse( int errorCode, String errorMsg) { Log.i(TAG, "收到服务端错误消息,errorCode=" +errorCode+ ", errorMsg=" +errorMsg); } } |
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 | public class MessageQoSEventImpl implements MessageQoSEvent { // 消息无法完成实时送达的通知 @Override public void messagesLost(ArrayList<Protocal> lostMessages) { Log.i(TAG, "收到系统的未实时送达事件通知,当前共有" +lostMessages.size()+ "个包QoS保证机制结束,判定为【无法实时送达】!" ); } // 对方已成功收到消息的通知 @Override public void messagesBeReceived(String theFingerPrint) { if (theFingerPrint != null ) Log.i(TAG, "收到对方已收到消息事件的通知,消息指纹码=" +theFingerPrint); } } |
1 2 3 | ClientCoreSDK.getInstance().setChatBaseEvent( new ChatBaseEventImpl()); ClientCoreSDK.getInstance().setChatTransDataEvent( new ChatTransDataEventImpl()); ClientCoreSDK.getInstance().setMessageQoSEvent( new MessageQoSEventImpl()); |
第3步:登陆请求
01 02 03 04 05 06 07 08 09 10 | new LocalUDPDataSender.SendLoginDataAsync(用户名, 密码){ @Override protected void fireAfterSendLogin( int code) { if (code == 0 ) Log.i(TAG, "数据发送成功!" ); else Log.i(TAG, "数据发送失败。错误码是:" +code+ "!" ); } }.execute(); |
第4步: 发送消息
01 02 03 04 05 06 07 08 09 10 | new LocalUDPDataSender.SendCommonDataAsync( "这是一条测试信息..." , 对方的userId, true ){ @Override protected void onPostExecute(Integer code) { if (code == 0 ) Log.i(TAG, "数据已成功发出!" ); else Log.i(TAG, "数据发送失败。错误码是:" +code+ "!" ); } }.execute(); |
第三部分:常见开发问题附录
附录1:可以让客户端更省电吗?
请调用以下API进行设置即可(框架默认工作在模式下): 1 2 | // MobileIMSDK核心IM框架的敏感度模式设置 ConfigEntity.setSenseMode(SenseMode.MODE_10S); |
MobileIMSDK预定义了多种模式,详细API说明:。
特别说明:为了保证算法的一致性,以上设置需所有平台客户端和服务端都保持一致,否则将发生不可预测问题。