分享

小功能也不简单,聊聊微信里面的红点提示功能

 北欧模式 2023-01-08 发布于陕西

很多人觉得程序开发是个很简单的事情,因此也就有很多客户,会提出一些需求,自己觉得这个很简单,比如说微信消息提示那个红点吧,不就是个加个消息提示的事儿吗?一天开发就够了吧。而很多面对客户的产品经理可能技术水平不高,赶紧满脸堆笑的表示,够了够了。我们明天开发出一版,后天测试一下,大后天给您汇报。客户还一脸嫌弃,这么点事你们要干三天。

但是拿回来给开发一看,开发觉得这个事一天干不完,至少得三天,产品经理找到大老板,要求开发经理必须加班加点在三天之内把新需求搞定。于是研发兄弟们只能苦逼的熬夜开发。

那么我们以微信的小红点新消息提醒为例,来看看这个功能是不是像看上去的那样简单。事实上,很多APP的这个功能做得并不好,经常会出现外面的消息和里面的消息数量对不上,或者明明没有新消息却有个提示,怎么点也清除不掉,导致很多有强迫症的朋友极其郁闷。

首先我们来看微信的消息提示,微信的小红点提示主要有四种:

1、新消息提醒:包括好友、群聊、订阅号等

2、新的好友提醒:包括新的朋友

3、发现:包括朋友圈、看一看、直播和附近等等

4、我:包括服务、设置等等

为了省事,我们今天只讨论新消息提醒。

大家都很熟悉微信的新消息提醒了,这个提醒在微信里,存在于三个地方:

1、手机主界面上微信新消息提示总数,例如下图,微信图标上会有一个小红点加数字,表示一共有多少条新消息。设这个数是a

2、单个消息对象中的未读消息数量,如下图中信银行上面那个2,这个数是一个集合,以数组为例,设为b[],当然实际开发的时候不可能用数组的。

3、总的未读消息数量,如下图右下角红圈里的14。设这个数是c

这里我们可以得到a=c=所有b[]加起来。

基本数量确定了,我们再看里面的操作。

假设我们刚注册一个微信,添加了两个朋友张三、李四。所以整个手机屏幕一开始是很干净的,一个小红点也没有。这时候我们假设b1是张三的新消息数量,b2是李四的新消息数量。

这时候张三发了一条信息,我们知道手机后台是会监听新消息的以便接收,至于怎么实现的我们今天不具体讨论,总之我们知道消息会被微信接收到就是了。

接受信息之后,对于当前屏幕上显示的是什么,是有关系的。具体包括以下几种:

1、当前手机屏幕是黑的,那么要做的事是:a+1, b1+1c+1(或者把ac重新计算一遍,即把b[]重新加一遍,当然这有点蠢,但可以保证数是对得上的);当然实际开发时,ac可能是一个,但是考虑到未来a可能会包括发现、我之类的信息,所以最好把它们分开。所以讨论这个处理逻辑时,我们把这两个数分开。

2、当前手机屏幕在包含了微信APP图标的界面那么除了1要做的事以外,还要把图标右上角加个红点,提示个1(即a的值),表示有了一条新消息。

3、当前手机屏幕在微信主界面,那么除了1要做的事以外,要在消息列表里增加一个张三的信息,并且在上加个红点提示个1(即b1的值)。同时在左下角的微信里面也红点提示1(即c的值)。

4、当前手机屏幕在微信其它看不到消息列表的界面,除了1要做的事以外,要在左下角微信那里红点提示1。

5、当前手机屏幕在与张三聊天的界面里,比如说正好也要给张三发信息,那么不做1要做的事,只把张三的消息内容显示在列表里。

这是接收消息要考虑的事情,下面我们再讨论清除红点的几个种操作。

清除红点包括以下几种操作:

1、点进与张三的消息对话,此时b1=0a=c=原值-b1的值。

2、不看张三消息,直接长按删除,此时b1=0a=c=原值-b1的值。

写到这里,其实逻辑还是相对来说很简单的。而在实际生产环境中,还会有很多意想不到的情况,导致需要判断的细节更为复杂,例如在高并发情况下会出现很多意想不到的情况,而用户的一些操作也会带来一些问题。比如说微信的朋友圈,当别人发了回复又删除之后,微信会留下一个消息提示,但是点进去却发现没有等等。

除此之外,在显示美化方面还有很多需要考虑,例如说新消息数量太多显示成三个点或者是99+等等。这些都要进行额外的考虑。而不同的消息类型,如群消息、订阅号消息、红包消息等等,也都要分别考虑。

总之即使像消息提示这样一个简单而基本的功能,在基本数据格式(比如说用数组、哈希表、树等)、业务逻辑设计、并发设计、界面友好性设计、鲁棒性设计等方面,都要进行细致的考虑。否则就会出各种奇怪的Bug

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多