zoukankan      html  css  js  c++  java
  • Android IM即时通信开发总结及代码

    IM即时通信的最大成功实例应该就是微信了吧,,,这次的IM即时通信是建立在Bmob上的,借用了人家的服务端和IM、Android SDK

    传送:

    Andorid快速入门

    详细开发文档

    IM快速入门

    它的文档组织不是很好,我觉得基本上就是这三个链接比较好,所有的链接都来自这个页面

    http://docs.bmob.cn/android/developdoc/index.html?menukey=develop_doc&key=develop_android

    然后就是要自己看类库文档,不得不说,写得太简单了。。还好有demo和问答,问答其实回答的还是很快的。

    源码下载

    快速入门相关源码下载

    案例教程和源码是快速入门的最简单方法,Bmob也为大家准备了相关的案例教程和源码,欢迎大家下载和查看。

    为方便大家更好的理解Bmob SDK能够做的事情,我们还特意为大家提供了一些源码,大家可以下载之后,嵌入Bmob的AppKey,再打包运行。

    阅读源码是一种良好的习惯!!

    即时聊天案例源码:https://github.com/bmob/BmobIMSDK4Android

    图文社区案例源码:https://git.oschina.net/v7/Wonderful 这个案例是猿圈媛圈开发团队提供的。

    校园小菜案例源码:https://github.com/bmob/Shop 这个案例是湖工大的朋友提供的。

    社交分享案例源码:https://github.com/bmob/bmob-android-social-share 这个是金刚锁开发者提供的

    第三方登录案例源码:https://github.com/bmob/bmob-android-demo-thirdpartylogin 包含第三方登录和登录后获取用户信息的源码

    [附:

    其实有很多强大的后端云,比如这个github上,基于环信的例子:

    https://github.com/huangfangyi/FanXin2.0_IM

    https://code.csdn.net/diyangxia/imsample/tree/master

    http://blog.csdn.net/diyangxia/article/details/45393599

    ]

    因为以前没有开发经验,所以这次开发还是很吃力的,看源码差点要了我的命。。

    我看的当然是即时通讯的案例源码,这次开发主要注意这么几个事情

    1.IM的sdk,事实上,很多在网上用的demo都比较老了,但是bmob的更新比较快,所以我建议还是多读读看,我看的是2016年7月份的最新IM sdk写的, 新的demo功能比较简单,主要是正常的一些消息的传送,这里主要注意两个点,一个就是消息接收机制,消息接收机制有两个,一个是全局消息接收机制,形如:

    public class DemoMessageHandler extends BmobIMMessageHandler

    这个在IM快速开发文档也是说明了的。还有一个就是局部消息接收机制:

    implements MessageListHandler
    @Override
    public void onMessageReceive(List<MessageEvent> list) {
    Logger.i("聊天页面接收到消息:" + list.size());
    //当注册页面消息监听时候,有消息(包含离线消息)到来时会回调该方法
    for (int i=0;i<list.size();i++){
    addMessage2Chat(list.get(i));
    }
    }
     

      这个是什么呢,就是一个Activity如果implements了这个类,那么重写这个消息接收函数,当处于这个Activity且有消息通知时,就会执行这个onMessageReceive函数。

      还有一个要注意的点就是消息自定义,因为bmob封装的消息类型比较少,如果要扩展的,就要了解消息的自定义机制,这些在IM的快速开发文档里有介绍,比如这个添加好友的自定义消息类:

    package cn.bmob.imdemo.bean;
    
    import android.text.TextUtils;
    
    import org.json.JSONObject;
    
    import cn.bmob.imdemo.Config;
    import cn.bmob.imdemo.db.NewFriend;
    import cn.bmob.newim.bean.BmobIMExtraMessage;
    import cn.bmob.newim.bean.BmobIMMessage;
    import com.orhanobut.logger.Logger;
    
    /**添加好友请求
     * @author :smile
     * @project:AddFriendMessage
     * @date :2016-01-30-17:28
     */
    public class AddFriendMessage extends BmobIMExtraMessage{
    
        public AddFriendMessage(){}
    
        /**将BmobIMMessage转成NewFriend
         * @param msg 消息
         * @return
         */
        public static NewFriend convert(BmobIMMessage msg){
            NewFriend add =new NewFriend();
            String content = msg.getContent();
            add.setMsg(content);
            add.setTime(msg.getCreateTime());
            add.setStatus(Config.STATUS_VERIFY_NONE);
            try {
                String extra = msg.getExtra();
                if(!TextUtils.isEmpty(extra)){
                    JSONObject json =new JSONObject(extra);
                    String name = json.getString("name");
                    add.setName(name);
                    String avatar = json.getString("avatar");
                    add.setAvatar(avatar);
                    add.setUid(json.getString("uid"));
                }else{
                    Logger.i("AddFriendMessage的extra为空");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return add;
        }
    
    
        @Override
        public String getMsgType() {
            return "add";
        }
    
        @Override
        public boolean isTransient() {
            //设置为true,表明为暂态消息,那么这条消息并不会保存到本地db中,SDK只负责发送出去
            //设置为false,则会保存到指定会话的数据库中
            return true;
        }
    
    }
    

      

    2. Android开发文档

    因为涉及到使用了bmob的服务端,所以我的所有表、所有内容是直接存储在了云上的,如何把消息送到云端、如何从云端读取数据,这个直接看前面的开发文档就好了。都有很详细的说明了,但是,希望库文档能继续完善。。

    3. 代码结构

    由于对Android开发不太熟悉,对各种组件、各种View(Listview、RecyclerView。。)、适配器的理解花费了很多时间,基本上来讲,一个Activity类有一个xml文件,至少一个,然后有一个适配器处理时事件;xml的话,要注意嵌套关系很复杂,就是一个xml吧,有很多个xml组成,完了还有很多布局关系。。T.T

    4. 事件处理

    这里说的事件处理主要是Activity和Activity之间的,startActivity、startActivityForResult、还有这个可以看下EventBus使用详解(一)——初步使用EventBus

    把这个四个搞明白了,还有啥看不懂的demo。。

    代码

    代码下载:

    part1:http://download.csdn.net/detail/u014576894/9584903

    part2:http://download.csdn.net/detail/u014576894/9584898

    代码说明:

    这是小组作业,如果大家要用的话,请园内联系我好嘛,或者发邮件给我pengjing.parents@qq.com

          这个代码是建立在Android Studio2015上的,基本的功能就是IM通信和朋友圈,朋友圈的小视频功能有点bug,主要是下载视频失败,没有修改好;服务端借助了Bmob的后端云,如果要用的话,可以在AndroidManifest.xml里面把application ID改成你自己申请的,具体的看上面的快速开发文档,如果上面的东西你不懂的话,那就不要用了,肯定问题百出的。。

  • 相关阅读:
    透明PNG格式图片兼容IE6浏览器
    CSS英文单词强制换行
    未能加载文件或程序集“Oracle.DataAccess, Version=2.111.7.0, Culture=neutral, PublicKeyToken=89b483f429c47342”或它的某一个依赖项。试图加载格式不正确的程序
    使用IIS 无法命中Application_Start中的断点问题
    win7 x64 后蓝牙u盘搜索不到其他设备
    使用Html.BeginForm<T>后客户端脚本验证出错的问题
    为什么使用sealed修饰符
    vs2010调试时发生监视显示表达式为false,但却进入了if块中
    MicrosoftMvcJQueryValidation.js 启用客户端验证,form无法提交
    Jquery 操作页面中iframe自动跟随窗口大小变化,而不出现滚动条,只在iframe内部出滚动条
  • 原文地址:https://www.cnblogs.com/puluotiya/p/5697708.html
Copyright © 2011-2022 走看看