设为首页 加入收藏

TOP

android网易七鱼客服系统
2019-05-11 00:40:20 】 浏览:108
Tags:android 网易 客服 系统
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yu75567218/article/details/80581851

一、优点

满足Web、App、微信公众号等全渠道的在线客户服务,支持客户信息展示,丰富沟通方式,超过100
项数据报表等功能 。一句话就是功能强大,聚合多个平台。

二、接入步骤:

1、在网易七鱼(http://qiyukf.com)网站注册一个账号,试用期7天,7天之后自动转为免费账号,可以同时支持两个客服在线,每个客服最大接待量只有一个,免费版适用于并发客服需求不大的情况。

2、进入后台添加一个APP

这个secret key没啥用。

3、按照文档一步步集成 http://qiyukf.com/newdoc/html/Android_SDK_Guide.html, 挑几个重点说,详细步骤看文档

4、application中初始化,appKey就是后台设置中的App Key。

    Unicorn.init(this, appKey, options(), new FrescoImageLoader(this));

    private YSFOptions options() {
        YSFOptions options = new YSFOptions();
        options.statusBarNotificationConfig = new StatusBarNotificationConfig();
        options.statusBarNotificationConfig.notificationEntrance = ActivityCustomerService.class;
        options.statusBarNotificationConfig.notificationSmallIconId = R.drawable.lauch_icon;
        options.onBotEventListener = new OnBotEventListener() {
            @Override
            public boolean onUrlClick(Context context, String url) {
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                context.startActivity(intent);
                return true;
            }
        };
        return options;
    }

5、在进入聊天之前设置UI相关的配置,比如客服头像、标题栏、字体样式等,注意这里还有个 StatusBarNotificationConfig ,设置推送相关,这里设置之后,会覆盖application中的推送设置,所以如果这里没有设置StatusBarNotificationConfig或者没有设置正确,会导致收不到推送。

        YSFOptions ysfOptions = new YSFOptions();
        ysfOptions.statusBarNotificationConfig = new StatusBarNotificationConfig();
        ysfOptions.statusBarNotificationConfig.notificationEntrance = ActivityCustomerService.class;
        ysfOptions.uiCustomization = new UICustomization();
//        ysfOptions.uiCustomization.titleBarStyle = 0;
//        ysfOptions.uiCustomization.titleBackgroundColor = context.getResources().getColor(R.color
//                .header_bg);
//        ysfOptions.uiCustomization.topTipBarTextColor = context.getResources().getColor(R.color
//                .white);
//        ysfOptions.uiCustomization.titleCenter = true;
        ysfOptions.uiCustomization.leftAvatar = "android.resource://" + context.getPackageName()
                + "/" + R.drawable.header_kf;
        ysfOptions.uiCustomization.rightAvatar = "android.resource://" + context.getPackageName()
                + "/" + R.drawable.header_yh;
//        ysfOptions.uiCustomization.msgItemBackgroundLeft = R.drawable.kf_left;
//        ysfOptions.uiCustomization.textMsgColorLeft = context.getResources().getColor(R.color
//                .white);
//        ysfOptions.uiCustomization.msgItemBackgroundRight = R.drawable.kf_right;
//        ysfOptions.uiCustomization.textMsgColorRight = context.getResources().getColor(R.color
//                .text_black);
        Unicorn.updateOptions(ysfOptions);

6、监听未读消息数,当有新的消息时,在客服入口处提示

        UnreadCountChangeListener listener = new UnreadCountChangeListener() { // 声明一个成员变量
            @Override
            public void onUnreadCountChange(int count) {
                // 在此更新界面, count 为当前未读数,
                // 也可以用 Unicorn.getUnreadCount() 获取总的未读数
                ToastView.showShort("未读:" + count);
            }
        };
        Unicorn.addUnreadCountChangeListener(listener, true);
7、设置用户信息,这里userBean是我自定义的用户对象。
        YSFUserInfo userInfoA = new YSFUserInfo();
        userInfoA.userId = beanUser.userId;
        userInfoA.data = userInfoData(beanUser.userName, beanUser.userCode, "", "", "", "")
                .toString();
        Unicorn.setUserInfo(userInfoA, callback);

8、退出登录时要清空用户信息,不然设置新的用户信息时会无效。

Unicorn.setUserInfo(null, callback);

方法和设置用户信息的方法一样,只是把参数传空即可。注意,调用退出登录后,马上调用设置用户信息的方法,会设置失败,所以我写了一个延迟设置用户信息的方法,确保正确设置用户信息。完整在文章最后。


三、问题处理

1、我用自己的activity来装载七鱼的聊天fragment,发现当软件弹出时,输入框不会上移,导致看不见输入的内容。

找了很久发现是和我们设置沉浸式状态栏的代码有冲突

activity.getWindow().getDecorView()
                  .setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

这行代码加上就不行了,后来换了中处理沉浸式状态栏的方法。

2、收不到推送。

解决方法见上面接入步骤中的第5条。


四、完整代码

/**
 * 客服管理类
 *
 * Created by huangyu on 2018/5/28.
 */

public class ManagerKefu {

    /**
     * 初始化UI
     * @param context
     */
    public static void initUi(Context context) {
        YSFOptions ysfOptions = new YSFOptions();
        ysfOptions.statusBarNotificationConfig = new StatusBarNotificationConfig();
        ysfOptions.statusBarNotificationConfig.notificationEntrance = ActivityCustomerService.class;
        ysfOptions.uiCustomization = new UICustomization();
//        ysfOptions.uiCustomization.titleBarStyle = 0;
//        ysfOptions.uiCustomization.titleBackgroundColor = context.getResources().getColor(R.color
//                .header_bg);
//        ysfOptions.uiCustomization.topTipBarTextColor = context.getResources().getColor(R.color
//                .white);
//        ysfOptions.uiCustomization.titleCenter = true;
        ysfOptions.uiCustomization.leftAvatar = "android.resource://" + context.getPackageName()
                + "/" + R.drawable.header_kf;
        ysfOptions.uiCustomization.rightAvatar = "android.resource://" + context.getPackageName()
                + "/" + R.drawable.header_yh;
//        ysfOptions.uiCustomization.msgItemBackgroundLeft = R.drawable.kf_left;
//        ysfOptions.uiCustomization.textMsgColorLeft = context.getResources().getColor(R.color
//                .white);
//        ysfOptions.uiCustomization.msgItemBackgroundRight = R.drawable.kf_right;
//        ysfOptions.uiCustomization.textMsgColorRight = context.getResources().getColor(R.color
//                .text_black);
        Unicorn.updateOptions(ysfOptions);
    }

    /**
     * 切换账号时清空信息
     *
     * @param callback
     */
    public static void logout(RequestCallback callback) {
        Unicorn.setUserInfo(null, callback);
    }

    /**
     * 延迟设置用户信息
     * @param context
     * @param beanUser
     * @param callback
     */
    public static void setUserInfoDelay(final Context context, final BeanUser beanUser, final RequestCallback
            callback) {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                setUserInfo(context, beanUser, callback);
            }
        }, 500);
    }

    /**
     * 设置用户信息
     * @param context
     * @param beanUser
     * @param callback
     */
    public static void setUserInfo(Context context, BeanUser beanUser, RequestCallback callback) {
        if (beanUser == null) {
            beanUser = new BeanUser();
            beanUser.userId = DevicesUtil.getDeviceUniqueId(context);
            beanUser.userName = "游客";
        }
        YSFUserInfo userInfoA = new YSFUserInfo();
        userInfoA.userId = beanUser.userId;
        userInfoA.data = userInfoData(beanUser.userName, beanUser.userCode, "", "", "", "")
                .toString();
        Unicorn.setUserInfo(userInfoA, callback);
    }

    private static JSONArray userInfoData(String name, String mobile, String email, String auth, String
            card, String order) {
        JSONArray array = new JSONArray();
        array.put(userInfoDataItem("real_name", name, false, -1, null, null)); // name
        array.put(userInfoDataItem("mobile_phone", mobile, false, -1, null, null)); // mobile
        array.put(userInfoDataItem("email", email, false, -1, null, null)); // email
        array.put(userInfoDataItem("real_name_auth", auth, false, 0, "实名认证", null));
        array.put(userInfoDataItem("bound_bank_card", card, false, 1, "绑定银行卡", null));
        array.put(userInfoDataItem("recent_order", order, false, 2, "最近订单", null));

        return array;
    }

    private static JSONObject userInfoDataItem(String key, Object value, boolean hidden, int index, String label, String href) {
        JSONObject item = new JSONObject();
        try {
            item.put("key", key);
            item.put("value", value);
            if (hidden) {
                item.put("hidden", true);
            }
            if (index >= 0) {
                item.put("index", index);
            }
            if (!TextUtils.isEmpty(label)) {
                item.put("label", label);
            }
            if (!TextUtils.isEmpty(href)) {
                item.put("href", href);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return item;
    }

    /**
     * 只能清除文件缓存,无法清除聊天记录
     */
    public static void clearCache() {
        Unicorn.clearCache();
    }
}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇中国移动浙江公司数据中心操作系.. 下一篇浅谈 MySQL 中字符集 utf8 与 utf..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目