整合第三方元件--七魚客服
阿新 • • 發佈:2019-01-25
背景
最近做商城APP,裡面需要用到客服諮詢的功能,馬上到網上找看有什麼支援的SDK,環信、融雲、網易七魚等等,翻看了這幾家的SDK文件,發現還是網易的最為友好,而且客戶端的UI最為美觀舒服,所以就選定它了!老闆說了,價格不用考慮。
我遇到的坑
一、整合後,開啟客服視窗,選擇圖片無法顯示出來;
原因是七魚裡讀取圖片使用了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());
}
}
不懂建議來問。