文档章节

[开源] 轻量级移动设备即时通讯技术MobileIMSDK:Android客户端开发指南

JackJiang-
 JackJiang-
发布于 2015/12/14 15:57
字数 1129
阅读 134
收藏 6

 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包


 马上下载:
最新版打包下载 点此进入,或者前往 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
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);
     }
}


③ QoS相关事件回调实现类:

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进行设置即可(框架默认工作在SenseMode.MODE_3S模式下):

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

MobileIMSDK预定义了多种模式,详细API说明:点此进入

特别说明:为了保证算法的一致性,以上设置需所有平台客户端和服务端都保持一致,否则将发生不可预测问题。

© 著作权归作者所有

JackJiang-

JackJiang-

粉丝 219
博文 88
码字总数 409018
作品 2
苏州
其他
私信 提问
开源轻量级 IM 框架 MobileIMSDK v3.0 发布!

一、更新内容简介 本次更新为主版本更新,更新内容包含了简化了消息发送目标的方式、支持Web版与APP版互通、优化了Protocal协议结构等主要升级,详细更新内容见“版本更新说明”部分。 重要提...

JackJiang-
2017/06/30
2.4K
11
开源轻量级 IM 框架 MobileIMSDK v4.0 发布!

一、更新内容简介 本次更新为主版本更新,更新内容主要是根据最新的Android系统和iOS系统对客户端进行了相关升级,以便更好的适应最新技术。以及其它一些优化和升级,详情请见“版本更新说明...

JackJiang-
05/02
2.3K
1
Android与MINA2、Netty4的跨平台UDP双向通信实战

概述 本文演示的是一个Android客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo。 当前由于NIO框架的流行,使得开发大并发、高性能的互联网服务端成为可能。...

JackJiang-
2016/06/30
864
1
如何选择即时通讯应用的数据传输格式

前言 即时通讯应用(包括IM聊天应用、实时消息推送应用等)开发的前期技术选型时,关于数据传输格式的选择,在即时通讯开发者同行的眼里,是个极富争议话题。 精略分析一下,大概的原因在于:...

JackJiang-
2016/08/04
563
1
IM消息送达保证机制实现(二):保证离线消息的可靠投递

1、前言 本文的上篇《IM消息送达保证机制实现(一):保证在线实时消息的可靠投递》中,我们讨论了在线实时消息的投递可以通过应用层的确认、发送方的超时重传、接收方的去重等手段来保证业务层...

JackJiang-
2016/11/18
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 比较通用的返回值格式如下:...

晓月寒丶
昨天
59
0
区块链应用到供应链上的好处和实际案例

区块链可以解决供应链中的很多问题,例如记录以及追踪产品。那么使用区块链应用到各产品供应链上到底有什么好处?猎头悬赏平台解优人才网小编给大家做个简单的分享: 使用区块链的最突出的优...

猎头悬赏平台
昨天
28
0
全世界到底有多少软件开发人员?

埃文斯数据公司(Evans Data Corporation) 2019 最新的统计数据(原文)显示,2018 年全球共有 2300 万软件开发人员,预计到 2019 年底这个数字将达到 2640万,到 2023 年达到 2770万。 而来自...

红薯
昨天
65
0
Go 语言基础—— 通道(channel)

通过通信来共享内存(Java是通过共享内存来通信的) 定义 func service() string {time.Sleep(time.Millisecond * 50)return "Done"}func AsyncService() chan string {retCh := mak......

刘一草
昨天
58
0
Apache Flink 零基础入门(一):基础概念解析

Apache Flink 的定义、架构及原理 Apache Flink 是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态或无状态的计算,能够部署在各种集群环境,对各种规模大小的数据进行快速...

Vincent-Duan
昨天
60
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部