环信集成全过程有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.注册,引用一下官方的说法

注册模式分两种,开放注册和授权注册。只有开放注册时,才可以客户端注册。

开放注册是为了测试使用,正式环境中不推荐使用该方式注册环信账号;
授权注册的流程应该是您服务器通过环信提供的 REST API 注册,之后保存到您的服务器或返回给客户端。
注册用户名会自动转为小写字母,所以建议用户名均以小写注册。(强烈建议开发者通过后台调用 REST 接口去注册环信 ID,客户端注册方法不提倡使用。)

//注册失败会抛出HyphenateException
EMClient.getInstance().createAccount(username, pwd);//同步方法
2.登录,同样官方很详细
注意: 登录成功后需要调用EMClient.getInstance().chatManager().loadAllConversations(); 和EMClient.getInstance().groupManager().loadAllGroups();。

以上两个方法是为了保证进入主页面后本地会话和群组都 load 完毕。

另外如果登录过,APP 长期在后台再进的时候也可能会导致加载到内存的群组和会话为空,可以在主页面的 oncreate 里也加上这两句代码,当然,更好的办法应该是放在程序的开屏页,可参考 Demo 的 SplashActivity。

EMClient.getInstance().login(userName,password,new EMCallBack() {//回调
	@Override
	public void onSuccess() {
		runOnUiThread(new Runnable() {
			public void run() {
				EMClient.getInstance().groupManager().loadAllGroups();
				EMClient.getInstance().chatManager().loadAllConversations();
				Log.d("main", "登录聊天服务器成功!");		
			}
		});
	}
 
	@Override
	public void onProgress(int progress, String status) {
 
	}
 
	@Override
	public void onError(int code, String message) {
		Log.d("main", "登录聊天服务器失败!");
	}
});

自动登录

即首次登录成功后,不需要再次调用登录方法,在下次 APP 启动时,SDK 会自动为您登录。并且如果您自动登录失败,也可以读取到之前的会话信息(以上情况是在未调用登出的情况下实现的)。

SDK 中自动登录属性默认是 true 打开的,如果不需要自动登录,在初始化 SDK 初始化的时候,调用options.setAutoLogin(false);设置为 false 关闭。

自动登录在以下几种情况下会被取消:

用户调用了 SDK 的登出动作;
用户在别的设备上更改了密码,导致此设备上自动登录失败;
用户的账号被从服务器端删除;
用户从另一个设备登录,把当前设备上登录的用户踢出。
登录页面loginActivity代码如下:
package com.z.hx;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.hyphenate.EMCallBack;
import com.hyphenate.EMError;
import com.hyphenate.chat.EMClient;
import com.hyphenate.exceptions.HyphenateException;
import com.z.hx.utils.ToastUtil;

public class LoginActivity extends AppCompatActivity {

    private android.widget.EditText etusername;
    private android.widget.EditText etpassword;
    private android.widget.Button btnlogin;
    private android.widget.Button btnregist;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        this.btnlogin = (Button) findViewById(R.id.login);
        this.etpassword = (EditText) findViewById(R.id.pwd);
        this.etusername = (EditText) findViewById(R.id.uname);
        this.btnregist = (Button) findViewById(R.id.regist);
        btnlogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //登录成功进入到回话列表页面
                EMClient.getInstance().login(etusername.getText().toString(), etpassword.getText().toString(), new EMCallBack() {//回调
                    @Override
                    public void onSuccess() {
                        runOnUiThread(new Runnable() {
                            public void run() {
                                EMClient.getInstance().groupManager().loadAllGroups();
                                EMClient.getInstance().chatManager().loadAllConversations();
                                startActivity(new Intent(getApplicationContext(), MainActivity.class));
                                ToastUtil.showToast(getApplicationContext(), "登录成功");
                                Log.d("main", "登录聊天服务器成功!");
                            }
                        });
                    }

                    @Override
                    public void onProgress(int progress, String status) {

                    }

                    @Override
                    public void onError(int code, String message) {
                        Log.d("main", "登录聊天服务器失败!");
                    }
                });

            }
        });
        btnregist.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //注册成功之后提示成功,失败就提示失败,以及失败原因
                //注册失败会抛出HyphenateException
                try {
                    EMClient.getInstance().createAccount(etusername.getText().toString(), etpassword.getText().toString());//同步方法
                    ToastUtil.showToast(getApplicationContext(), "注册成功,用户名是:" + etusername.getText().toString() + ",开始畅快聊天吧");
                } catch (HyphenateException e) {
                    e.printStackTrace();
                    //此处我们根据错误类型可以判断是什么原因引起的注册失败,我们只列出常见的原因1.网络连接失败2.用户名已注册
                    //http://www.easemob.com/apidoc/android/chat3.0/classcom_1_1hyphenate_1_1_e_m_error.html这是官方的文档,这里有各种错误代码,供我们参考
                    switch (e.getErrorCode()) {
                        case EMError.SERVER_BUSY:
                        case EMError.SERVER_UNKNOWN_ERROR:
                        case EMError.SERVER_NOT_REACHABLE:
                        case EMError.SERVER_TIMEOUT:
                        case EMError.NETWORK_ERROR://网络错误
                            ToastUtil.showToast(getApplicationContext(), "网络有问题,请稍后再试");
                            break;
                        case EMError.USER_ALREADY_EXIST://用户名已存在
                            ToastUtil.showToast(getApplicationContext(), "用户名已存在,请尝试登录");
                            break;
                        case EMError.USER_REG_FAILED://注册失败
                            Toast.makeText(getApplicationContext(), "注册失败", Toast.LENGTH_SHORT).show();
                            break;
                        default:
                            break;
                    }
                }
            }
        });
    }
}

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

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

3.聊天界面开发

首先:注册连接状态监听

当掉线时,Android SDK 会自动重连,无需进行任何操作,通过注册连接监听来知道连接状态。

在聊天过程中难免会遇到网络问题,在此 SDK 为您提供了网络监听接口,实时监听
可以根据 disconnect 返回的 error 判断原因。若服务器返回的参数值为EMError.USER_LOGIN_ANOTHER_DEVICE,则认为是有同一个账号异地登录;若服务器返回的参数值为EMError.USER_REMOVED,则是账号在后台被删除。
//注册一个监听连接状态的listener
EMClient.getInstance().addConnectionListener(new MyConnectionListener());
 
//实现ConnectionListener接口
private class MyConnectionListener implements EMConnectionListener {
    @Override
	public void onConnected() {
	}
	@Override
	public void onDisconnected(final int error) {
		runOnUiThread(new Runnable() {
 
			@Override
			public void run() {
				if(error == EMError.USER_REMOVED){
					// 显示帐号已经被移除
				}else if (error == EMError.USER_LOGIN_ANOTHER_DEVICE) {
					// 显示帐号在其他设备登录
				} else {
				if (NetUtils.hasNetwork(MainActivity.this))
					//连接不到聊天服务器
				else
					//当前网络不可用,请检查网络设置
				}
			}
		});
	}
}
坑:appkey一定要写对,要不然一进去就会崩,在application类中就崩了,一般集成第三方的东西都是这样的,但是环信比较奇葩不告诉你是appkey不对,让你猜的,哎

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

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值