基於環信實現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,文件真的有點老。