zoukankan      html  css  js  c++  java
  • 【原创】轻量级即时通讯技术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说明:点此进入
    特别说明:为了保证算法的一致性,以上设置需所有平台客户端和服务端都保持一致,否则将发生不可预测问题。

  • 相关阅读:
    vi错误terminal too wide解决方法
    怎么重启shell ubuntu
    程序异常退出 却没有产生core文件
    Linux执行shell脚本方式及区别&命令后台运行
    Linux C程序异常退出怎么办——core文件帮你忙
    Linux中生成Core Dump系统异常信息记录文件的教程
    Linux环境下段错误的产生原因及调试方法小结
    Linux core dump file详解
    putty工具常见设置
    Download PuTTY: latest development snapshot
  • 原文地址:https://www.cnblogs.com/jb2011/p/mobileimsdk.html
Copyright © 2011-2022 走看看