電商項目之環信在線客服接入

一、緣起

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章