环信即时通信的理解

    xiaoxiao2021-03-25  113

    近来公司要做环信的即时通信,发现公司想要聊天的功能基本上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  第二步开始写登录和注册的界面,自己刚开始没必要做多完美先坐在同一个界面。怎么写就不说了 注册是个同步的方法,需要异步处理,在点击开始注册的时候开启子线程。 登录不用开启子线程,注意不论是注册还是登陆失败的时候都需要处理下打印个日志。
    转载请注明原文地址: https://ju.6miu.com/read-36543.html

    最新回复(0)