电商项目之环信在线客服接入

一、缘起

电商项目开发中在线客服属于常见需求,可以通过环信开发文档按照步骤接入,由于很多同学在开发过程中经常遇到问题,而且环信提供的Demo无法正常运行,所以写下这篇文章用于解惑。

二、材料准备
1、在环信客服后台创建客服云账号

在这里插入图片描述

2、下载官方demo

下载链接https://github.com/easemob/kefu-android-demo

三、开始接入
1、build.gradle 配置
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' //其他版本也可以
}
2、添加so库到armeabi-v7a文件夹

在这里插入图片描述

3、Application中初始化

客服云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);
4、注册
 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
//ErrorCode:
Error.NETWORK_ERROR 网络不可用
Error.USER_ALREADY_EXIST  用户已存在
Error.USER_AUTHENTICATION_FAILED 无开放注册权限(后台管理界面设置[开放|授权])
Error.USER_ILLEGAL_ARGUMENT 用户名非法
5、登录
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);
            }
        });
    }
6、会话
Intent intent = new IntentBuilder({Activity}.this)
    .setServiceIMNumber("客服关联的IM服务号") //获取地址:kefu.easemob.com,“管理员模式 > 渠道管理 > 手机APP”页面的关联的“IM服务号”
    .build();
startActivity(intent);
  • 注意: ServiceIMNumber(IM服务号)由于服务器忽略大小写,IM服务号必须是小写,在配置界面的IM服务号请使用小写。
7、网络监听
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  账号找不到

    }
});
8、消息监听
ChatClient.getInstance().getChat().addMessageListener(new ChatManager.MessageListener() {
    @Override
    public void onMessage(List<Message> list) {
        //收到普通消息
    }

    @Override
    public void onCmdMessage(List<Message> list) {
        //收到命令消息,命令消息不存数据库,一般用来作为系统通知,例如留言评论更新,
        //会话被客服接入,被转接,被关闭提醒
    }

    @Override
    public void onMessageStatusUpdate() {
        //消息的状态修改,一般可以用来刷新列表,显示最新的状态
    }

    @Override
    public void onMessageSent() {
        //发送消息后,会调用,可以在此刷新列表,显示最新的消息
    }
});
9、真正的聊天页面ChatActivity
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();
    }
}

到目前为止已经接入完成可以进行测试使用

四、注意点总结
  • 1、一定要添加so库文件
  • 2、一定要加ChatClient.getInstance().isLoggedInBefore()判断
五、参考文档

http://docs.easemob.com/cs/300visitoraccess/androidsdk

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值