• 2603阅读
  • 1回复

[经验分享]云信Android最近联系人列表如何自定义 [复制链接]

上一主题 下一主题
 

只看楼主 倒序阅读 使用道具 楼主  发表于: 2016-04-25
前两天暴雪接入云信的MM问了一个问题:
”请教个问题呢 我们现在想把最近联系人列表进行筛选,打了TAG的对话放在一级界面 未打TAG的界面放在二级界面 一级界面要做一个入口item  那只能用自定义系统消息实现么?还需要自定义attchment这些么?”
--------------------------
表面上看,是需要在最近联系人列表项增加些Tag或者扩展,其实云信Andoird SDK是有支持的:
RecentContact属性中有一个 long类型的tag,还有一个更通用的Map<String, Object> extension,这两个属性都有get/set方法,那么在收到一个RecentContact的时候,可以自己去更新这个 tag 或者 extension,调用 MsgService的updateRecent方法即可。在刷新界面的时候去判断tag/extension的值,去做不同的UI展示。
对于简单的扩展,这样做事ok的,比如云信demo里的置顶功能,就是用tag做的。
---------------------------------------------------------------------------------
可是,这个简单的扩展还是不能满足需求,暴雪MM的需求是:
“我收到二级界面的recentcontact后 需要在一级界面也体现出来 就是一级界面有一个item可以进入二级界面的 这个item在一级界面是要会动的 就是来一条新的二级界面的消息 他就要跳到第一栏,产品要求这个item是会随着最近一条消息的时间跳动的,所以我们一定要加到最近联系人列表中进行时间排序的,就不能是单纯的过滤”
---------------------------
这个需求读完我就懵逼了,在说啥?脑子不够用了,看来是游戏玩太少(MB天天加班,撩妹都没空了还有时间玩游戏么)
仔细想想,他们的意图就是要在云信SDK的最近联系人db里面插入他们自定义的RecentContact啊,oh 漏!这这这,成本太高,而且很难兼顾all需求。
咋办呢,“说时迟,辣时帅”,聪明&&机智&&MAN的店小二又脑子一发骚,想出了个兼容方案,说服了暴雪MM。
嗯,单身狗店小二说“其实上层是可以做的,只是需要再抽象一下”

解决方案:

在云信的RecentContact之外再抽象一个类XXX,你的ViewHolder及列表排序都是基于这个XXX对象。
你的代码可以从RecentConcat对象构造一个XXX(组合),也可以根据你的业务数据构造一个XXX(可以认为是伪会话,可能是一个跳转入口,折叠项等)。
自己构造的XXX数据,也有一个db做存储(自己实现啦)。
每次load db,一方面从云信SDK load,一方面从你的db load,然后一起构造出XXX,给你上层做排序做展示。


例如:你从云信sdk load 出 A B C 三个会话(按照时间倒序排列); 你再从给你的db里load出 D E 这两个伪会话(用于跳转,分级啥的),随后都构造出XXX对象,扔到列表List里面,再对List<XXX> 进行排序的,再刷UI。

本质上,云信SDK就是提供数据及数据的管理,如果上层业务有自定义的需要,那么要做组合使用(抽象+组合)。


只看该作者 沙发  发表于: 2016-04-25