当用户通过在线客服系统和客服沟通之后,我们希望客户离开了聊天界面之后,依然能够接收到我们客服推送过去的消息。在我们的项目中在线客服系统集成的是udesk,因此我们就以udesk为原型进行讲解。
一:udesk版本号需要提升到3.2之后
根据udesk官方文档配置之后,同时服务器端也需要做相应配置,我们就可以在离开聊天界面之后,依然接收到通过udesk系统的客服推送过来的消息。这里的推送,是通过极光推送来完成的。
二:极光可以接收到消息,但是onReceive()并没有被调用
我们项目使用的极光推送是2.1.9。udesk使用的是极光推送2.2.0版。极光推送最新的版本3.0.6。所以我在这三个版本之间都做了测试,发现2.1.9是可以接收到消息,但是不会调用onReceive(),2.2.0版本就连项目本身集成的极光推送都没有推送过来,何况udesk,3.0.6版本则实现了上述所有功能。
三:udesk客服消息列表。
由于在ios的文档中,可以获取客户本地聊天记录。但是android端的文档中,并没有提及到有这样的接口存在。
于是就翻了一下UdeskSDKUI这个库,发现在UdeskDBManager中,官方已经将从本地获取聊天记录的基本方法提供了,只是并没有暴露出来。
我们就可以根据UdeskDBManager的使用规则,通过这些方法,获取自己希望得到的列表消息。
四:如何将udesk消息列表和环信消息列表展示在同一个列表中。
最开始我的想法是能不能通过将udesk消息转换城一个环信消息,然后在消息中设置一个变量用来标示,但是此路不通。再后来我就将用来存放消息的集合的泛型去掉。这样这个list中就可以同时存放udesk消息和环信消息,然后我们在adapter中设置消息内容的时候,就可以通过instance of 这个关键字来判断,当前位置的数据,是来自udesk消息,还是来自环信的消息。
最后我们在adapter中通过下面的判断,就可以设置数据了。
Object object = getItem(position);
if(object instanceof EMConversation){
//这里是环信消息
}else if(object instanceof MessageInfo){
//这里是udesk消息
}