Android 环信集成全过程有demo

写在前面:普通的应用中一般只用到传输文件,发送文字图片信息,所以此处不做语音视频通讯的集成,够用就行,红色字体基本是都是坑,大家注意了

由于easeui bug太多,集成繁琐,不符合项目要求,所以自己写了一个,界面也是自己写的,其实自己写挺容易的,没想象的难,多看看官方文档,其实挺详细的,方法的使用也很简单,有点耐心是完全没问题的,主要是准备工作需要做好了,下面我写的很详细,但是后面的不详细,大家参照官方文档吧,肯定没问题的

1.准备工作

  1. 注册账号下载sdk等,官网说的很明确,我就不啰嗦了
  2. jar文件,so文件引入,如下图,文件路径不要弄错了,当然可以有其他方法,但这是最简单的方式,这样的文件路径她会自动识别jar文件和so文件
  3. 配置清单文件,配置自己的appkey(只有这一个是需要自己配置的,其他复制即可)即可其他都不需要手动配置直接复制,官网上直接复制代码即可
  4. 引入easeui库,huanxin_IM_sdk_V3.1.2r2\examples\easeui在这个目录下,把easeui文件夹单独复制出来,引入步骤如下,然后必须需在project structure菜单下面添加module依赖,否则报错
  5. 初始化sdk,参考环信官网指南,已经很详细了,而且也很简单,记得要在清单文件中配置自己的application类

2.注册,登录

1.注册,引用一下官方的说法

[java]  view plain  copy
  1. 注册模式分两种,开放注册和授权注册。只有开放注册时,才可以客户端注册。  
  2.   
  3. 开放注册是为了测试使用,正式环境中不推荐使用该方式注册环信账号;  
  4. 授权注册的流程应该是您服务器通过环信提供的 REST API 注册,之后保存到您的服务器或返回给客户端。  
  5. 注册用户名会自动转为小写字母,所以建议用户名均以小写注册。(强烈建议开发者通过后台调用 REST 接口去注册环信 ID,客户端注册方法不提倡使用。)  
  6.   
  7. //注册失败会抛出HyphenateException  
  8. EMClient.getInstance().createAccount(username, pwd);//同步方法  
2.登录,同样官方很详细
[java]  view plain  copy
  1. 注意: 登录成功后需要调用EMClient.getInstance().chatManager().loadAllConversations(); 和EMClient.getInstance().groupManager().loadAllGroups();。  
  2.   
  3. 以上两个方法是为了保证进入主页面后本地会话和群组都 load 完毕。  
  4.   
  5. 另外如果登录过,APP 长期在后台再进的时候也可能会导致加载到内存的群组和会话为空,可以在主页面的 oncreate 里也加上这两句代码,当然,更好的办法应该是放在程序的开屏页,可参考 Demo 的 SplashActivity。  
  6.   
  7. EMClient.getInstance().login(userName,password,new EMCallBack() {//回调  
  8.     @Override  
  9.     public void onSuccess() {  
  10.         runOnUiThread(new Runnable() {  
  11.             public void run() {  
  12.                 EMClient.getInstance().groupManager().loadAllGroups();  
  13.                 EMClient.getInstance().chatManager().loadAllConversations();  
  14.                 Log.d("main""登录聊天服务器成功!");          
  15.             }  
  16.         });  
  17.     }  
  18.    
  19.     @Override  
  20.     public void onProgress(int progress, String status) {  
  21.    
  22.     }  
  23.    
  24.     @Override  
  25.     public void onError(int code, String message) {  
  26.         Log.d("main""登录聊天服务器失败!");  
  27.     }  
  28. });  

[java]  view plain  copy
  1. 自动登录  
  2.   
  3. 即首次登录成功后,不需要再次调用登录方法,在下次 APP 启动时,SDK 会自动为您登录。并且如果您自动登录失败,也可以读取到之前的会话信息(以上情况是在未调用登出的情况下实现的)。  
  4.   
  5. SDK 中自动登录属性默认是 true 打开的,如果不需要自动登录,在初始化 SDK 初始化的时候,调用options.setAutoLogin(false);设置为 false 关闭。  
  6.   
  7. 自动登录在以下几种情况下会被取消:  
  8.   
  9. 用户调用了 SDK 的登出动作;  
  10. 用户在别的设备上更改了密码,导致此设备上自动登录失败;  
  11. 用户的账号被从服务器端删除;  
  12. 用户从另一个设备登录,把当前设备上登录的用户踢出。  
[java]  view plain  copy
  1. 登录页面loginActivity代码如下:  
[java]  view plain  copy
  1. package com.z.hx;  
  2.   
  3. import android.content.Intent;  
  4. import android.os.Bundle;  
  5. import android.support.v7.app.AppCompatActivity;  
  6. import android.util.Log;  
  7. import android.view.View;  
  8. import android.widget.Button;  
  9. import android.widget.EditText;  
  10. import android.widget.Toast;  
  11.   
  12. import com.hyphenate.EMCallBack;  
  13. import com.hyphenate.EMError;  
  14. import com.hyphenate.chat.EMClient;  
  15. import com.hyphenate.exceptions.HyphenateException;  
  16. import com.z.hx.utils.ToastUtil;  
  17.   
  18. public class LoginActivity extends AppCompatActivity {  
  19.   
  20.     private android.widget.EditText etusername;  
  21.     private android.widget.EditText etpassword;  
  22.     private android.widget.Button btnlogin;  
  23.     private android.widget.Button btnregist;  
  24.   
  25.     @Override  
  26.     protected void onCreate(Bundle savedInstanceState) {  
  27.         super.onCreate(savedInstanceState);  
  28.         setContentView(R.layout.activity_login);  
  29.         this.btnlogin = (Button) findViewById(R.id.login);  
  30.         this.etpassword = (EditText) findViewById(R.id.pwd);  
  31.         this.etusername = (EditText) findViewById(R.id.uname);  
  32.         this.btnregist = (Button) findViewById(R.id.regist);  
  33.         btnlogin.setOnClickListener(new View.OnClickListener() {  
  34.             @Override  
  35.             public void onClick(View v) {  
  36.                 //登录成功进入到回话列表页面  
  37.                 EMClient.getInstance().login(etusername.getText().toString(), etpassword.getText().toString(), new EMCallBack() {//回调  
  38.                     @Override  
  39.                     public void onSuccess() {  
  40.                         runOnUiThread(new Runnable() {  
  41.                             public void run() {  
  42.                                 EMClient.getInstance().groupManager().loadAllGroups();  
  43.                                 EMClient.getInstance().chatManager().loadAllConversations();  
  44.                                 startActivity(new Intent(getApplicationContext(), MainActivity.class));  
  45.                                 ToastUtil.showToast(getApplicationContext(), "登录成功");  
  46.                                 Log.d("main""登录聊天服务器成功!");  
  47.                             }  
  48.                         });  
  49.                     }  
  50.   
  51.                     @Override  
  52.                     public void onProgress(int progress, String status) {  
  53.   
  54.                     }  
  55.   
  56.                     @Override  
  57.                     public void onError(int code, String message) {  
  58.                         Log.d("main""登录聊天服务器失败!");  
  59.                     }  
  60.                 });  
  61.   
  62.             }  
  63.         });  
  64.         btnregist.setOnClickListener(new View.OnClickListener() {  
  65.             @Override  
  66.             public void onClick(View v) {  
  67.                 //注册成功之后提示成功,失败就提示失败,以及失败原因  
  68.                 //注册失败会抛出HyphenateException  
  69.                 try {  
  70.                     EMClient.getInstance().createAccount(etusername.getText().toString(), etpassword.getText().toString());//同步方法  
  71.                     ToastUtil.showToast(getApplicationContext(), "注册成功,用户名是:" + etusername.getText().toString() + ",开始畅快聊天吧");  
  72.                 } catch (HyphenateException e) {  
  73.                     e.printStackTrace();  
  74.                     //此处我们根据错误类型可以判断是什么原因引起的注册失败,我们只列出常见的原因1.网络连接失败2.用户名已注册  
  75.                     //http://www.easemob.com/apidoc/android/chat3.0/classcom_1_1hyphenate_1_1_e_m_error.html这是官方的文档,这里有各种错误代码,供我们参考  
  76.                     switch (e.getErrorCode()) {  
  77.                         case EMError.SERVER_BUSY:  
  78.                         case EMError.SERVER_UNKNOWN_ERROR:  
  79.                         case EMError.SERVER_NOT_REACHABLE:  
  80.                         case EMError.SERVER_TIMEOUT:  
  81.                         case EMError.NETWORK_ERROR://网络错误  
  82.                             ToastUtil.showToast(getApplicationContext(), "网络有问题,请稍后再试");  
  83.                             break;  
  84.                         case EMError.USER_ALREADY_EXIST://用户名已存在  
  85.                             ToastUtil.showToast(getApplicationContext(), "用户名已存在,请尝试登录");  
  86.                             break;  
  87.                         case EMError.USER_REG_FAILED://注册失败  
  88.                             Toast.makeText(getApplicationContext(), "注册失败", Toast.LENGTH_SHORT).show();  
  89.                             break;  
  90.                         default:  
  91.                             break;  
  92.                     }  
  93.                 }  
  94.             }  
  95.         });  
  96.     }  
  97. }  

坑:在登录成功是弹出toast不成功,直接崩溃

原因:登录注册方法是在子线程中运行的,toast在子线程不成功,可以自己判断是否在子线程然后再toast,后面会专门写这个专题,这里不多说了

3.聊天界面开发

[java]  view plain  copy
  1. 首先:注册连接状态监听  
  2.   
  3. 当掉线时,Android SDK 会自动重连,无需进行任何操作,通过注册连接监听来知道连接状态。  
  4.   
  5. 在聊天过程中难免会遇到网络问题,在此 SDK 为您提供了网络监听接口,实时监听  
  6. 可以根据 disconnect 返回的 error 判断原因。若服务器返回的参数值为EMError.USER_LOGIN_ANOTHER_DEVICE,则认为是有同一个账号异地登录;若服务器返回的参数值为EMError.USER_REMOVED,则是账号在后台被删除。  
  7. //注册一个监听连接状态的listener  
  8. EMClient.getInstance().addConnectionListener(new MyConnectionListener());  
  9.    
  10. //实现ConnectionListener接口  
  11. private class MyConnectionListener implements EMConnectionListener {  
  12.     @Override  
  13.     public void onConnected() {  
  14.     }  
  15.     @Override  
  16.     public void onDisconnected(final int error) {  
  17.         runOnUiThread(new Runnable() {  
  18.    
  19.             @Override  
  20.             public void run() {  
  21.                 if(error == EMError.USER_REMOVED){  
  22.                     // 显示帐号已经被移除  
  23.                 }else if (error == EMError.USER_LOGIN_ANOTHER_DEVICE) {  
  24.                     // 显示帐号在其他设备登录  
  25.                 } else {  
  26.                 if (NetUtils.hasNetwork(MainActivity.this))  
  27.                     //连接不到聊天服务器  
  28.                 else  
  29.                     //当前网络不可用,请检查网络设置  
  30.                 }  
  31.             }  
  32.         });  
  33.     }  
  34. }  
坑:appkey一定要写对,要不然一进去就会崩,在application类中就崩了,一般集成第三方的东西都是这样的,但是环信比较奇葩不告诉你是appkey不对,让你猜的,哎

剩下的内容我就不贴出来了,有demo环信集成demo下载

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值