iOS APNS远程推送,App被kill掉之后离线状态下如何控制角标?
问题描述
做IM即时聊天,收到消息会在App的icon上显示小红数字角标,有几条则有几条未读消息, 然后聊天列表里是具体某一个人的未读消息的条数,列表各个条数加起来就是推送的总条数,点开读取某个人的消息则角标是读取了多少条则减掉多少条,这个逻辑貌似没什么问题。 当app未启动的时候,或者是按home键退出到后台kill掉app的情况下仍能收到通知消息,单是此时角标不会递增,遍寻百度和google,仍然无果:
问题出现的环境背景及自己尝试过哪些方法
- 未启动或是被kill掉进程的App,是无法执行到App里的代码进行递增逻辑的,所以只能通过服务器badge字段设置
- 通过服务器设置,服务端得知道客户端读取了多少条,得上报未读条数,这个时候貌似答案已经很明朗了,就这么干
- 静默推送是没有消息显示和声音的,据说静默推送是可以有几十秒时间执行后台任务的,但是每次推10条左右(后台循环3秒推一次)就戛然而止了,后来了解到苹果规定1小时之内后台任务的使用次数是有限个位数次的...所以...不知道咋说(可人家微信的消息角标是一直可以递增的)...
可怕的事情发生了,就是当开启飞行模式的时候,把所有的未读消息读取点掉,然后再退出到后台kill掉App,随即后端疯狂推几十条消息, 此刻未读条数并未及时上报,所以这个操作会造成未读条数前后端不一致,用户感知到数据异常的话,就会很反感...卸载App等操作
因为微信已经完美实现了这个功能,不知道他们是如何实现的,所以这就很尴尬了...
你期待的结果是什么?实际看到的错误信息又是什么?
期待有网友提供思路,先行感谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先你的第一步就错了。具体的消息未读数不是在手机端进行统计计算的,而是由后台统计好传递给手机端的。当有新的消息出现的时候就给APP发推送并传递新的角标值。这样做的好处就在于,无论APP是否存在于后台、是否被Kill掉,APP都能收到相应的推送通知并且改变角标。这也是APNS的一大优势。
接下来,当用户进入APP之后,先拿到后台传递过来的角标值并保存在APP的沙盒中的plist文件,如果用户点击了未读消息,那么就将plist文件中的角标数减一,并且上报给后台。当用户手动杀死APP或者APP进入后台的时候,再将plist文件中保存的角标数设置为当前的角标数。
iOS开发者新秀,此上是我的操作办法,仅供参考。