1 、在使用前需要在Application初始化
/**
* 环信客服
*/
private void initCECIM(){
ChatClient.Options options = new ChatClient.Options();
options.setAppkey("******");//必填项,appkey获取地址:kefu.easemob.com,“管理员模式 > 渠道管理 > 手机APP”页面的关联的“AppKey”
options.setTenantId("*****");//必填项,tenantId获取地址:kefu.easemob.com,“管理员模式 > 设置 > 企业信息”页面的“租户ID”
ChatClient.getInstance().init(this, options);
// Kefu SDK 初始化
if (!ChatClient.getInstance().init(this, options)){
return;
}
//后面可以设置其他属性
ChatClient.getInstance().init(this, new ChatClient.Options().setConsoleLog(true));
}
/**
* 环信即时通讯
*/
private void initEMOptions() {
EMOptions options = new EMOptions();
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(partyApplication.getPackageName())) {
// 则此application::onCreate 是被service 调用的,直接返回
return;
}
// 默认添加好友时,是不需要验证的,改成需要验证
options.setAcceptInvitationAlways(false);
// 是否自动将消息附件上传到环信服务器,默认为True是使用环信服务器上传下载,如果设为 false,需要开发者自己处理附件消息的上传和下载
options.setAutoTransferMessageAttachments(true);
// 是否自动下载附件类消息的缩略图等,默认为 true 这里和上边这个参数相关联
options.setAutoDownloadThumbnail(true);
//初始化
EMClient.getInstance().init(partyApplication, 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) {
}
}
return processName;
}
2、必须要在线程中登录
/**
* 注册
*
* @param userName
* @param pwd
*/
public static void onRegster(final String userName, final String pwd) {
try {
EMClient.getInstance().createAccount(userName, pwd);
Log.i("", "注册" + userName + "\\n" + pwd);
} catch (HyphenateException e) {
Log.i("", "注册失败" + e.getMessage());
}
}
/**
* 登陆
*
* @param userName
* @param pwd
*/
public static void onLogin(String userName, String pwd) {
EMClient.getInstance().login(userName, pwd, new EMCallBack() {
@Override
public void onSuccess() {
EMClient.getInstance().groupManager().loadAllGroups();
EMClient.getInstance().chatManager().loadAllConversations();
boolean updatenick = EMClient.getInstance().pushManager().updatePushNickname("");
if (!updatenick) {
Log.i("onLogin", "update current user nick fail");
}
}
@Override
public void onError(int code, String error) {
Log.d(TAG, "login: onError 失败: " + error);
}
@Override
public void onProgress(int progress, String status) {
Log.d(TAG, "login: onProgress");
}
});
}
/**
* 注册
*
* @param userName
* @param pwd
*/
public static void onRegster(final String userName, final String pwd) {
ChatClient.getInstance().register(userName, pwd, new Callback() {
@Override
public void onSuccess() {
Log.i("注册成功");
}
@Override
public void onError(int i, String s) {
Log.i("注册失败" + s);
}
@Override
public void onProgress(int i, String s) {
}
});
}
/**
* 登录客服
* @param uname
* @param upwd
*/
public static void login(final String uname, final String upwd) {
ChatClient.getInstance().login(uname, upwd, new Callback() {
@Override
public void onSuccess() {
Log.i("登录成功");
}
@Override
public void onError(int i, String s) {
Log.i("登录失败" + s);
}
@Override
public void onProgress(int i, String s) {
}
});
}
3、要想获得群昵称必须要先在线程中调用以下方法
/**
* 群昵称获取
*/
private void GroupName() {
new Thread() {
@Override
public void run() {
try {
EMClient.getInstance().groupManager().getJoinedGroupsFromServer();
EMClient.getInstance().groupManager().getAllGroups();
} catch (HyphenateException e) {
}
}
}.start();
}
4、删除会话或者切换账号时必须调用登出方法,否在聊天室里还是切换账号前的消息内容,能看见消息,但是你却无法聊天
使用如下方法
/**
* 删除会话
*/
public static void logout() {
try {
new Thread(new Runnable() {
@Override
public void run() {
EMClient.getInstance().logout(true);
ChatClient.getInstance().logout(false, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError(int i, String s) {
}
@Override
public void onProgress(int i, String s) {
}
});
}
}).start();
} catch (Exception e) {
}
}
环信SDK客服和及时聊天并发接入时,消息回掉都一样的方法,所以使用kefu-sdk-1.1.8.jar就够了,另外的so文件可以使用如下截图的,少了会编译报错:
环信并发接入权限也是个坑,必须要在登录前把权限都获取到,否则会报打不开SQLite数据库的错误,另外清单文件也需要添加几个,我贴几个容易被忽略的,关于权限的可以看看这个(https://github.com/Gxyong/huanxinSdk.git)
回头我整合完再上传到我的https://github.com/Gxyong里面吧