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

  • 相关阅读:
    【leetcode】106. Construct Binary Tree from Inorder and Postorder Traversal
    【leetcode】105. Construct Binary Tree from Preorder and Inorder Traversal
    【leetcode】236. Lowest Common Ancestor of a Binary Tree
    【leetcode】235. Lowest Common Ancestor of a Binary Search Tree
    【leetcode】352. Data Stream as Disjoint Intervals
    【leetcode】897. Increasing Order Search Tree
    【leetcode】900. RLE Iterator
    BEC listen and translation exercise 26
    BEC listen and translation exercise 25
    BEC listen and translation exercise 24
  • 原文地址:https://www.cnblogs.com/jb2011/p/mobileimsdk.html
Copyright © 2020-2023  润新知