一、緣起
電商項目開發中在線客服屬於常見需求,可以通過環信開發文檔按照步驟接入,由於很多同學在開發過程中經常遇到問題,而且環信提供的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