环信即时通信的理解

近来公司要做环信的即时通信,发现公司想要聊天的功能基本上QQ都有,这样就显得有点不怎么现实:人家作几年?咱才多少时间?算了,还好环信也做了几年了。走多远就看自己在这个功能里泡多久吸收多少,有点耐心总能把这段路走完。

 集成环信有两种方法,

1 集成环信的SDK,好处是可以用环信的功能,自己的界面
2 引用EaseUI,好处是使用环信的界面和功能,节约时间。
两种方法各有千秋,看自己的选择。

本来是懒省事集成的整个环信的demo,修改页面添加自己的功能。但是公司新来的大神要求有自己的特色,不得不重新来过选择集成sdk使用功能和自定义界面。

http://www.imgeek.org/video/44    环信的sdk视频教程。当然,我写的是自己的理解谢谢。

提前准备:
1 加入SDK以后,需要appkey的配置。
2 初始化,需要放在其他sdk初始化方法之前,也就是说环信的sdk初始化是第一个。
初始化方法: EMClient.getInstance().init(context,options);
其中Options这个参数主要SDK初始化的一些配置,这里可以配置一些初始化SDK的定义,比如
//设置自动登录  opthions.setAutoLogin(true);
//设置(主动或者被动)退出群组的时候,是否删除群聊天记录
options.setDeleteMessageAsExitGroup(false);
为什么不删除?人家的聊天毕竟是人家的,能不删就别删。
其他详细需要查看的,API文档: 
http://www.easemob.com/apidoc/android/chat3.0/classcom_1_1hyphenate_1_1chat_1_1_e_m_options.html

注册于登录:
注册的方法,是同步的,需要自己有执行,根据执行情况判断是否注册成功
EMClitent,getInstance().createAccount( 名称,密码);//一般放在服务器执行。

登录方法,异步,可在回调中监听登录状态
EMClient.getInstance().login(名字,密码,callback);

退出登录的方法,第一个参数表示是否解绑推送的token,没有使用推送或者被踢都要传false
EMCliten.getInstance().logout(false,callback);

集成聊天:
聊天主要就是消息的接受和发送:
发送比较简单,只要创建消息,调用发送方法就可以。

接受需要实现消息的箭筒借口EMMessageListener, 这个监听接口可以在多处实现。
一般是在全局一个实现,一个是在聊天界面。这里主要在聊天界面实现:
实现这个接口需要实现几个借口的方法:
//收到消息
public void onMessageReceived(List<Message> list);
//收到新的CMD消息
public void onCMDMessageReceived(List<Message> list);
//收到新的已读回执
public void onMessageReadAckReceived(List<Message> list);
//收到新的发送回执
public void onMessageDeliveryAckReceived(List<Message> list);
//消息的状态改变
public void onMessageChanged(EMMessage message,Object object);

Github 代码地址
https://github.com/lzan13/EaseChat         注意  master是集成SDK的。

下载SDK之后解压,doc文件是环信的离线文档,方便离线查看。
libs是包含环信的聊天和及时语音和视频通话功能,现在就是要用这里的jar包
copy  jar包和so库文件,x86是给模拟器用的。
因为用studio的时候懒得去见jni,所以需要去配置一下:  看好位置


  开始配置项目
根据官方文档:
1 权限   2 需要的服务 3 appkey
准备工作完成以后,同步一下就开始写代码

1  初始化SDK,需要在自定义的Application中写,这样就可以运行就初始化。
   
public class MyApplication extends Application {

    private Context context;
    private String TAG = "log";

    @Override
    public void onCreate() {
        super.onCreate();
        initDate();
        initView();
    }

    private void initDate() {
        context = this;
        int pid = android.os.Process.myPid();
        String processAppName = getAppName(pid);
// 如果APP启用了远程的service,此application:onCreate会被调用2次
// 为了防止环信SDK被初始化2次,加此判断会保证SDK被初始化1次
// 默认的APP会在以包名为默认的process name下运行,如果查到的process name不是APP的process name就立即返回
        if (processAppName == null ||!processAppName.equalsIgnoreCase(context.getPackageName())) {
            Log.e(TAG, "enter the service process!");

            // 则此application::onCreate 是被service 调用的,直接返回
            return;
        }
    }

    private void initView() {
        EMOptions options = new EMOptions();
        // 默认添加好友时,是不需要验证的,改成需要验证
        options.setAcceptInvitationAlways(false);
        //初始化
        EMClient.getInstance().init(this, options);
        //在做打包混淆时,关闭debug模式,避免消耗不必要的资源
        EMClient.getInstance().setDebugMode(true);
    }
    private String getAppName(int pID) {
        String processName = null;
        ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
        List l = am.getRunningAppProcesses();
        Iterator i = l.iterator();
        PackageManager pm = this.getPackageManager();
        while (i.hasNext()) {
            ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo) (i.next());
            try {
                if (info.pid == pID) {
                    processName = info.processName;
                    return processName;
                }
            } catch (Exception e) {
                // Log.d("Process", "Error>> :"+ e.toString());
            }
        }
        return processName;
    }
}


写完记得在清单文件中声明这个自定义的Application。
android:name=".application.MyApplication"


2  第二步开始写登录和注册的界面,自己刚开始没必要做多完美先坐在同一个界面。怎么写就不说了
注册是个同步的方法,需要异步处理,在点击开始注册的时候开启子线程。
登录不用开启子线程,注意不论是注册还是登陆失败的时候都需要处理下打印个日志。






















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值