1. 程式人生 > >基於環信實現android客戶端客服聊天功能

基於環信實現android客戶端客服聊天功能

本來類似於這種第三方的功能是沒有必要寫部落格的,但是由於環信客服功能的文件實在版本過舊,所以在此記錄下,希望能給大家帶來一點便利。
工具:androidStudio

第1步:
註冊一個環信的賬號,地址如下,有了直接登入就可以了。https://kefu.easemob.com/mo/login
![登入進來的介面](https://img-blog.csdn.net/20171102190844936?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbXV6aWxpMTIwNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

然後切換右上角的管理員模式,進入如下介面:
管理員模式介面
點選左面的列表中的渠道管理——手機App
然後新增App關聯——快速建立
這個時候會出現很多的資訊出現如下介面:
建立後的資訊
這裡需要用到的為AppKey。然後點選左邊列表的設定——企業資訊,檢視租戶id(5位純數字)
這裡的IM服務號需要記錄,後面會用到。
到這裡,前期的準備資訊工作算是完成。

第2步
找到專案的app下的build.gradle,新增如下資訊:
//環信客服SDK
compile ‘com.hyphenate:kefu-easeui-android:1.1.2’ //或者 compile ‘com.hyphenate:kefu-easeui-android:1.1.2’
//EaseUI中 頭像獲取用到了glide,請新增glide庫
compile ‘com.github.bumptech.glide:glide:3.7.0’ //其他版本也可以
//EaseUI中,fragment用到了android-support-v4包
compile ‘com.android.support:support-v4:23.1.1’ //其他版本也可以
第3步
設定清單檔案
許可權部分:
-

   <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
   <!-- 這個許可權用於進行網路定位 -->
   <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
   <!-- 這個許可權用於訪問GPS定位 -->
   <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
   <!-- 用於訪問wifi網路資訊,wifi資訊會用於進行網路定位 -->
   <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
   <!-- 獲取運營商資訊,用於支援提供運營商資訊相關的介面 -->
   <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
   <!-- 用於讀取手機當前的狀態 -->
   <uses-permission android:name="android.permission.READ_PHONE_STATE" />
   <!-- 寫入擴充套件儲存,向擴充套件卡寫入資料,用於寫入離線定位資料 -->
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
   <!-- 訪問網路,網路定位需要上網 -->
   <uses-permission android:name="android.permission.INTERNET" />

   <!-- 聽筒和揚聲器模式切換 -->
   <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

   <!-- 音視訊 -->
   <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

   <!-- GCM required, remember replace "com.github.darren.huanx" to your own package -->
   <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

   <permission
       android:name="com.github.darren.huanx.permission.C2D_MESSAGE"
       android:protectionLevel="signature" />

   <uses-permission android:name="com.github.darren.huanx.permission.C2D_MESSAGE" />

   <!-- 其中的com.github.darren.huanx需要換為自己的包名 -->
   <permission
       android:name="com.github.darren.huanx.permission.MIPUSH_RECEIVE"
       android:protectionLevel="signatureOrSystem" />
   <!-- 其中的com.github.darren.huanx需要換為自己的包名 -->
   <uses-permission android:name="com.github.darren.huanx.permission.MIPUSH_RECEIVE" />
  < application></application>中的資訊如下:

   <!-- gcm start -->
    <receiver
        android:name="com.hyphenate.chat.EMGCMBroadcastReceiver"
        android:exported="true"
        android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />

            <category android:name="com.hyphenate.chatuidemo" />
        </intent-filter>
    </receiver>

    <service
        android:name="com.hyphenate.chat.EMGCMListenerService"
        android:exported="false" />

    <receiver
        android:name=".receiver.GCMPushBroadCast"
        android:exported="false">
        <intent-filter>
            <action android:name="com.hyphenate.sdk.push" />

            <category android:name="com.easemob.helpdeskdemo" />
        </intent-filter>
    </receiver>
    <!-- gcm end -->
    <!--華為 HMS Config-->
    <meta-data
        android:name="com.huawei.hms.client.appid"
        android:value="10492024" />
    <!--華為推送 start-->
    <receiver android:name="com.hyphenate.chat.EMHWPushReceiver">
        <intent-filter>
            <!-- 必須,用於接收 TOKEN -->
            <action android:name="com.huawei.android.push.intent.REGISTRATION" />
            <!-- 必須,用於接收訊息 -->
            <action android:name="com.huawei.android.push.intent.RECEIVE" />
            <!-- 可選,用於點選通知欄或通知欄上的按鈕後觸發 onEvent 回撥 -->
            <action android:name="com.huawei.android.push.intent.CLICK" />
            <!-- 可選,檢視 PUSH 通道是否連線,不檢視則不需要 -->
            <action android:name="com.huawei.intent.action.PUSH_STATE" />
        </intent-filter>
    </receiver>

    <receiver android:name="com.huawei.hms.support.api.push.PushEventReceiver">
        <intent-filter>
            <!-- 接收通道發來的通知欄訊息,相容老版本 PUSH -->
            <action android:name="com.huawei.intent.action.PUSH" />
        </intent-filter>
    </receiver>
    <!-- huawei push end -->

    <!-- 宣告小米所需的Receiver-->
    <!-- mi push -->
    <service
        android:name="com.xiaomi.mipush.sdk.PushMessageHandler"
        android:enabled="true"
        android:exported="true"
        tools:ignore="ExportedService" />
    <service
        android:name="com.xiaomi.mipush.sdk.MessageHandleService"
        android:enabled="true" />

    <receiver
        android:name="com.hyphenate.chat.EMMipushReceiver"
        android:exported="true"
        tools:ignore="ExportedReceiver">
        <intent-filter>
            <action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" />
        </intent-filter>
        <intent-filter>
            <action android:name="com.xiaomi.mipush.MESSAGE_ARRIVED" />
        </intent-filter>
        <intent-filter>
            <action android:name="com.xiaomi.mipush.ERROR" />
        </intent-filter>
    </receiver>
    <!-- mi push end -->

    在自己的application中進行初始化:
  /**
     * 初始化客服配置
     */
    private void initKefuConfig() {
        ChatClient.Options options = new ChatClient.Options();
        //必填項,appkey獲取地址:kefu.easemob.com,“管理員模式 > 渠道管理 > 手機APP”頁面的關聯的“AppKey”
        options.setAppkey("1458170906068252#kefuchannelapp47129");
        //必填項,tenantId獲取地址:kefu.easemob.com,“管理員模式 > 設定 > 企業資訊”頁面的“租戶ID”
        options.setTenantId("47129");
        // 設定為true後,將列印日誌到logcat, 釋出APP時應關閉該選項
        options.setConsoleLog(true);
        //appid從華為開發者平臺獲取

        // Kefu SDK 初始化
        if (!ChatClient.getInstance().init(this, options)){
            return;
        }
        ChatClient.getInstance().setDebugMode(true);
        // Kefu EaseUI的初始化
        UIProvider.getInstance().init(this);
    }

環信客服功能需要先登入然後才能進行聊天,先註冊一個賬號,註冊程式碼如下:

ChatClient.getInstance().createAccount(username, password, new Callback() {
            @Override
            public void onSuccess() {
                Log.i(TAG, "creat_onSuccess: ");
                isConnected = true;
            }

            @Override
            public void onError(int errorCode, String s) {
                Log.i(TAG, "creat_onError: " + s + i);
                if (errorCode == Error.NETWORK_ERROR){
                    Log.i(TAG, "creat_onError: " + "網路連線不可用,請檢查網路" + errorCode);
                }else if (errorCode == Error.USER_ALREADY_EXIST){
                    Log.i(TAG, "creat_onError: " + "使用者已經存在" + errorCode);
                }else if(errorCode == Error.USER_AUTHENTICATION_FAILED){
                    Log.i(TAG, "creat_onError: " + "無開放註冊許可權" + errorCode);
                } else if (errorCode == Error.USER_ILLEGAL_ARGUMENT){
                    Log.i(TAG, "creat_onError: " + "使用者名稱不合法" + errorCode);
                }else {
                    Log.i(TAG, "creat_onError: " + "註冊失敗!" + errorCode);
                }
                isConnected = false;
            }

            @Override
            public void onProgress(int i, String s) {
                Log.i(TAG, "creat_onProgress: " + s);
            }
        });

username和password自己隨便輸入就好了。

註冊完登入,登入程式碼如下:
callback與上面的相同

  public void toLogin(String userName,String passWord,Callback callback){
        ChatClient.getInstance().login(userName, passWord, callback);
    }

登入之後就可以進行聊天了,開啟聊天頁面程式碼如下:
IMNumber為第1步中記錄的IM服務號

  */
    public void toChatActivity(final String IMNumber,final Activity activity) {
        activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                IntentBuilder builder = new IntentBuilder(activity);
                //獲取地址:kefu.easemob.com,“管理員模式 > 渠道管理 > 手機APP”頁面的關聯的“IM服務號”
                builder.setServiceIMNumber(IMNumber);
                Intent intent = builder.build();
                activity.startActivity(intent);
//                Toast.makeText(activity, "開始聊天", Toast.LENGTH_LONG).show();
            }
        });
    }

到這裡就已經可以開啟環信sdk內建的聊天頁面了,並可以發訊息。

注意,一定要參考官方的demo,文件真的有點老。