背景
最近做商城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());
}
}
不懂建议来问。