集成第三方组件--七鱼客服

背景
最近做商城APP,里面需要用到客服咨询的功能,马上到网上找看有什么支持的SDK,环信、融云、网易七鱼等等,翻看了这几家的SDK文档,发现还是网易的最为友好,而且客户端的UI最为美观舒服,所以就选定它了!老板说了,价格不用考虑。

开发指南
地址:http://qiyukf.com/newdoc/html/Android_SDK_Guide.html
如有不懂的尽量看文档可以解决,是在不懂可以咨询七鱼的技术客服人员,服务态度非常好。

我遇到的坑
一、集成后,打开客服窗口,选择图片无法显示出来;
原因是七鱼里读取图片使用了AsyncTask读取图片,而我APP首页轮播图功能也使用了AsyncTask,导致七鱼AsyncTask阻塞,无法读取图片,所以将轮播图的AsyncTask使用Timer替代就解决问题了。AsyncTask只能执行简短任务,执行长时间耗时任务会阻塞其他使用AsyncTask的任务。

二、集成后,有新消息,Android版本会显示个Notification,点击无法进入客服页面
这部分七鱼SDK为了开发者能更加灵活操作页面,并没有提供相应的API,这需要我们自己想办法实现。
1.我的MyApplication代码如下,可以看到这里新添加了个setServiceEntranceActivity的方法,这是为了实现APP目前在哪个页面,点击的Notification后也可以进入该页面

public class MyApplication extends Application {

    private StatusBarNotificationConfig mStatusBarNotificationConfig;

    public void onCreate() {
        super.onCreate();

        mStatusBarNotificationConfig=new StatusBarNotificationConfig();
        mStatusBarNotificationConfig.notificationEntrance= HomeActivity.class;

        if (Unicorn.init(this, Config.QY_APP_KEY, options(), new UILImageLoader())) {
            LogUtil.showLog("init qiyu sdk success!");
        }else {
            LogUtil.showLog("init qiyu sdk error!");
        }

        if (inMainProcess(this)) {
            ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(this));
        }else {
            LogUtil.showLog("not inMainProcess");
        }
    }

    // 如果返回值为null,则全部使用默认参数。
    private YSFOptions options() {
        YSFOptions options = new YSFOptions();
        options.statusBarNotificationConfig = mStatusBarNotificationConfig;
        options.statusBarNotificationConfig.vibrate=false;
        options.savePowerConfig = new SavePowerConfig();
        return options;
    }

    public static boolean inMainProcess(Context context) {
        String packageName = context.getPackageName();
        String processName = SystemUtil.getProcessName(context);
        return packageName.equals(processName);
    }

    /**
     * 设置点击Notification消息后进入的页面
     * @param activity
     */
    public void setServiceEntranceActivity(Class<? extends Activity> activity){
        mStatusBarNotificationConfig.notificationEntrance=activity;
    }

}

然后你在你的基础BaseActivity的onCreate()里加入以下代码即可:

((MyApplication)getApplication()).setServiceEntranceActivity(getClass());

2.实现点击Notification后,打开客服窗口的功能;
在基础BaseActivity的onCreate()里加入:

//七鱼客服
parseIntent();

在基础BaseActivity复写:

    @Override
    protected void onNewIntent(Intent intent) {
        setIntent(intent);
        parseIntent();
    }

    /**
     * 七鱼需要
     */
    private void parseIntent() {
        Intent intent = getIntent();
        if (intent.hasExtra(NimIntent.EXTRA_NOTIFY_CONTENT)) {
            openService("",""); //打开客服窗口的方法
            // 最好将intent清掉,以免从堆栈恢复时又打开客服窗口
            setIntent(new Intent());
        }
    }

不懂建议来问。

猜你喜欢

转载自blog.csdn.net/primer01/article/details/53894750