當用戶通過在線客服系統(tǒng)和客服溝通之后,我們希望客戶離開了聊天界面之后,依然能夠接收到我們客服推送過去的消息。在我們的項目中在線客服系統(tǒng)集成的是udesk,因此我們就以udesk為原型進行講解。
一:udesk版本號需要提升到3.2之后
根據(jù)udesk官方文檔配置之后,同時服務器端也需要做相應配置,我們就可以在離開聊天界面之后,依然接收到通過udesk系統(tǒng)的客服推送過來的消息。這里的推送,是通過極光推送來完成的。
二:極光可以接收到消息,但是onReceive()并沒有被調用

我們項目使用的極光推送是2.1.9。udesk使用的是極光推送2.2.0版。極光推送最新的版本3.0.6。所以我在這三個版本之間都做了測試,發(fā)現(xiàn)2.1.9是可以接收到消息,但是不會調用onReceive(),2.2.0版本就連項目本身集成的極光推送都沒有推送過來,何況udesk,3.0.6版本則實現(xiàn)了上述所有功能。
三:udesk客服消息列表。
由于在ios的文檔中,可以獲取客戶本地聊天記錄。但是android端的文檔中,并沒有提及到有這樣的接口存在。

于是就翻了一下UdeskSDKUI這個庫,發(fā)現(xiàn)在UdeskDBManager中,官方已經(jīng)將從本地獲取聊天記錄的基本方法提供了,只是并沒有暴露出來。


我們就可以根據(jù)UdeskDBManager的使用規(guī)則,通過這些方法,獲取自己希望得到的列表消息。

四:如何將udesk消息列表和環(huán)信消息列表展示在同一個列表中。
最開始我的想法是能不能通過將udesk消息轉換城一個環(huán)信消息,然后在消息中設置一個變量用來標示,但是此路不通。再后來我就將用來存放消息的集合的泛型去掉。這樣這個list中就可以同時存放udesk消息和環(huán)信消息,然后我們在adapter中設置消息內(nèi)容的時候,就可以通過instance of 這個關鍵字來判斷,當前位置的數(shù)據(jù),是來自udesk消息,還是來自環(huán)信的消息。

最后我們在adapter中通過下面的判斷,就可以設置數(shù)據(jù)了。
Object object = getItem(position);
if(object instanceof EMConversation){
//這里是環(huán)信消息
}else if(object instanceof MessageInfo){
//這里是udesk消息
}