电商项目开发中在线客服属于常见需求,可以通过环信开发文档按照步骤接入,由于很多同学在开发过程中经常遇到问题,而且环信提供的Demo无法正常运行,所以写下这篇文章用于解惑。
下载链接https://github.com/easemob/kefu-android-demo
android{
......
defaultConfig {
ndk {
//选择要添加的对应cpu类型的.so库
abiFilters 'armeabi-v7a'
// , 'arm64-v8a'
//还可以添加 'armeabi', 'x86'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
//环信客服SDK
compile 'com.hyphenate:kefu-easeui-android:latest.release' //或者 compile 'com.hyphenate:kefu-easeui-android:1.1.9r2'
//EaseUI中 头像获取用到了glide,请添加glide库
compile 'com.github.bumptech.glide:glide:4.7.1' //其他版本也可以
//EaseUI中,fragment用到了android-support-v4包
compile 'com.android.support:support-v4:28.0.0' //其他版本也可以
}
客服云Android SDK包含EaseUI,需要在Application中调用初始化的方法(本示例中Application的文件名为MyApplication.java):
使用ChatClient方法对SDK进行初始化
使用UIProvider方法对EaseUI进行初始化
ChatClient.Options options = new ChatClient.Options();
options.setAppkey("Your appkey");//必填项,appkey获取地址:kefu.easemob.com,“管理员模式 > 渠道管理 > 手机APP”页面的关联的“AppKey”
options.setTenantId("Your tenantId");//必填项,tenantId获取地址:kefu.easemob.com,“管理员模式 > 设置 > 企业信息”页面的“租户ID”
// Kefu SDK 初始化
if (!ChatClient.getInstance().init(this, options)){
return;
}
// Kefu EaseUI的初始化
UIProvider.getInstance().init(this);
public void registerIm(final String userName) {
ChatClient.getInstance().createAccount(userName, "password", new Callback() {
@Override
public void onSuccess() {
Log.e("Tag", "registerIm success");
loginIm(userName);
}
@Override
public void onError(int code, String error) {
Log.e("Tag", "registerIm onError" + code + "_____" + error);
}
@Override
public void onProgress(int progress, String status) {
}
});
}
由于测试用password本地写成固定的了,可以改为通过接口从服务端取用
//ErrorCode:
Error.NETWORK_ERROR 网络不可用
Error.USER_ALREADY_EXIST 用户已存在
Error.USER_AUTHENTICATION_FAILED 无开放注册权限(后台管理界面设置[开放|授权])
Error.USER_ILLEGAL_ARGUMENT 用户名非法
if(ChatClient.getInstance().isLoggedInBefore()){
//已经登录,可以直接进入会话界面
}else{
//未登录,需要登录后,再进入会话界面
loginIm(String userName)
}
public void loginIm(String userName) {
ChatClient.getInstance().login(userName, "password", new Callback() {
@Override
public void onSuccess() {
Log.e("Tag", "loginSuccess");
}
@Override
public void onError(int code, String error) {
Log.e("Tag", "onError___ " + code + "______" + error);
}
@Override
public void onProgress(int progress, String status) {
Log.e("Tag", "onEonProgressrror___ " + status);
}
});
}
Intent intent = new IntentBuilder({Activity}.this)
.setServiceIMNumber("客服关联的IM服务号") //获取地址:kefu.easemob.com,“管理员模式 > 渠道管理 > 手机APP”页面的关联的“IM服务号”
.build();
startActivity(intent);
ChatClient.getInstance().addConnectionListener(new ChatClient.ConnectionListener() {
@Override
public void onConnected() {
//成功连接到服务器
}
@Override
public void onDisconnected(int errorcode) {
//errorcode的值
//Error.USER_REMOVED 账号移除
//Error.USER_LOGIN_ANOTHER_DEVICE 账号在其他地方登录
//Error.USER_AUTHENTICATION_FAILED 账号密码错误
//Error.USER_NOT_FOUND 账号找不到
}
});
ChatClient.getInstance().getChat().addMessageListener(new ChatManager.MessageListener() {
@Override
public void onMessage(List list) {
//收到普通消息
}
@Override
public void onCmdMessage(List list) {
//收到命令消息,命令消息不存数据库,一般用来作为系统通知,例如留言评论更新,
//会话被客服接入,被转接,被关闭提醒
}
@Override
public void onMessageStatusUpdate() {
//消息的状态修改,一般可以用来刷新列表,显示最新的状态
}
@Override
public void onMessageSent() {
//发送消息后,会调用,可以在此刷新列表,显示最新的消息
}
});
public class ChatActivity extends FragmentActivity {
@Override
protected int getLayoutId() {
return R.layout.activity_chat;
}
@Override
protected void initData() {
super.initData();
if (ChatClient.getInstance().isLoggedInBefore()) {
showChatView();
} else {
String phoneNUmber = DataUtil.getStringData(MApplication.getContext(), "userName", "et_username", "");
HuanxinHelper.instance.loginIm(phoneNUmber);
showChatView();
}
}
// 使用EasyUI提供的ChatFragment()
private void showChatView() {
ChatFragment chatFragment = new ChatFragment();
chatFragment.setArguments(getIntent().getExtras());
getSupportFragmentManager().beginTransaction().add(R.id.container, chatFragment).commit();
}
}
到目前为止已经接入完成可以进行测试使用
http://docs.easemob.com/cs/300visitoraccess/androidsdk