1. 程式人生 > >整合第三方元件--七魚客服

整合第三方元件--七魚客服

背景
最近做商城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());
        }
    }

不懂建議來問。