博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[开源] 轻量级移动设备即时通讯技术MobileIMSDK:Android客户端开发指南
阅读量:7051 次
发布时间:2019-06-28

本文共 3319 字,大约阅读时间需要 11 分钟。

  hot3.png

 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/ 目录下:
14155730_tncI.png 

第2步:引用lib包

提示:MobileIMSDK的Android客户端lib包支持Android 2.3(含)及以上版本。

 Eclipse中如何引用第3方jar包?
直接将lib包复制到Eclipse的Android工程的 libs/ 目录下,F5刷新后即可。
如果是其它Android IDE工具,请依此类推。
 以MobileIMSDK的Demo工程为例,结果如下图:
14155730_9enT.png 

第二部分:编写代码

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

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

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

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

转载于:https://my.oschina.net/jb2011/blog/544112

你可能感兴趣的文章
bzoj4002[JLOI2015]有意义的字符串
查看>>
python爬虫-抓取acg12动漫壁纸排行设置为桌面壁纸
查看>>
用QQ传dll文件,你可能会遇到灵异事件
查看>>
hbase meta表的结构
查看>>
2017-2-10
查看>>
Git
查看>>
centos7.4 安装后的基本设置
查看>>
SQLCipher 配置
查看>>
函数的定义、作用域、函数递归
查看>>
纯手工 css+html 简易三级导航栏(横向)
查看>>
个人码风
查看>>
基于昨天调代码的收获
查看>>
iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用
查看>>
QT编写TCP的问题
查看>>
poj1456 结构体排序+贪心
查看>>
第26天:js-$id函数、焦点事件
查看>>
iOS开发-Alpha,Hidden与Opaque区别
查看>>
CSS中nth-child和nth-of-type的简单使用
查看>>
javascript 乘法口诀表
查看>>
views 视图函数
查看>>