推送计数不准确的问题
1. 问题
有部分客户发现了一个问题,假如某个苹果手机有5条未读消息了,杀掉应用或者后台后,再给当前用户发消息,应用角标的数字从5变成1,之后从1开始累加,打开应用收到消息就正常了。
2. 原因
了解过野火IM推送的同学们都知道,IM服务发送给推送服务的数据中有个未读数,这个数是当前客户未收到计数消息个数,推送时填写角标数就是这个数字。这样当用户在服务器上有多少条未读数据没有收取下来,推送到客户端的角标就是几。这样就没有跟客户端上未读数进行累加,问题就出现了。
3. 解决办法
其实这是个很小的问题,严格的数字没有太大的实际意义,至少目前在微信上也都是这么做的,大家可以拿微信对比测试一下,其实我们的实现思路跟微信也基本类似。如果真要做也是可以做到的,需要付出额外的代码,就是需要把本地未读数的信息实时同步到推送服务,这样就可以在推送服务为每个用户进行计数。同步未读数的时机可以在用户消除未读数时(比如进入到一个会话)和程序退到后台等时机去同步。