您的位置:首页 > 移动开发 > Android开发

基于环信实现android客户端客服聊天功能

2017-11-02 19:34 776 查看
本来类似于这种第三方的功能是没有必要写博客的,但是由于环信客服功能的文档实在版本过旧,所以在此记录下,希望能给大家带来一点便利。
工具:androidStudio

第1步:
注册一个环信的账号,地址如下,有了直接登录就可以了。https://kefu.easemob.com/mo/login
![登录进来的界面](http://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,文档真的有点老。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: