基于环信实现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,文档真的有点老。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在环信聊天中显示头像和昵称,可以按照以下步骤进行: 1. 设置用户头像和昵称 在用户注册或登录时,将用户头像和昵称保存在环信服务器中,代码如下: ```java // 设置用户昵称 EMClient.getInstance().pushManager().updatePushNickname(nickname); // 设置用户头像 EMClient.getInstance().pushManager().updatePushNoDisturbStatus(isNoDisturb); ``` 2. 获取用户头像和昵称 在聊天页面中,从环信服务器获取用户头像和昵称,代码如下: ```java // 获取用户昵称 EMUserInfo userInfo = EMClient.getInstance().userInfoManager().getUserInfo(userId); String nickname = userInfo.getNickname(); // 获取用户头像 EMUserInfo userInfo = EMClient.getInstance().userInfoManager().getUserInfo(userId); String avatarUrl = userInfo.getAvatarUrl(); ``` 3. 显示用户头像和昵称 使用第二步中获取到的用户头像和昵称,使用自定义的布局文件来显示头像和昵称,代码如下: ```xml <RelativeLayout android:id="@+id/layout_user_info" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical"> <ImageView android:id="@+id/iv_avatar" android:layout_width="50dp" android:layout_height="50dp" android:src="@drawable/default_avatar" /> <TextView android:id="@+id/tv_nickname" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="昵称" android:textSize="14sp" android:textColor="#333333" android:layout_marginLeft="10dp" android:layout_toRightOf="@id/iv_avatar" /> </RelativeLayout> ``` 在代码中获取到布局文件中的 ImageView 和 TextView 控件,使用 Glide 等图片加载库加载用户头像,设置 TextView 的文本为用户昵称。 以上就是 Android 环信聊天头像昵称显示的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值