关于推送的角标的设置

1.下面是极光文档上面写到的,好多同学并未好好的查看(下面我认为是角标相关的设置)

    * @abstract 设置角标(到服务器)

 *

 * @param value 新的值. 会覆盖服务器上保存的值(这个用户)

 *

 * @discussion 本接口不会改变应用本地的角标值.

 * 本地仍须调用 UIApplication:setApplicationIconBadgeNumber 函数来设置脚标.

 *

 * 本接口用于配合 JPush 提供的服务器端角标功能.

 * 该功能解决的问题是, 服务器端推送 APNs 时, 并不知道客户端原来已经存在的角标是多少, 指定一个固定的数字不太合理.

 *

 * JPush 服务器端脚标功能提供:

 *

 * - 通过本 API 把当前客户端(当前这个用户的) 的实际 badge 设置到服务器端保存起来;

 * - 调用服务器端 API 发 APNs 时(通常这个调用是批量针对大量用户),

 *   使用 "+1" 的语义, 来表达需要基于目标用户实际的 badge 值(保存的) +1 来下发通知时带上新的 badge 值;

 */

+ (BOOL)setBadge:(NSInteger)value;(告诉极光我们app下次推送的角标基数)

+ (BOOL)setBadge:(NSInteger)value;

/*!

 * @abstract 重置脚标(为0)

 *

 * @discussion 相当于 [setBadge:0] 的效果.

 * 参考 [JPUSHService setBadge:] 说明来理解其作用.

 */

+ (void)resetBadge;

//这个我认为也是很重要的

/*!

 * @abstract 关闭日志

 *

 * @discussion 关于日志级别的说明, 参考 [JPUSHService setDebugMode]

 *

 * 虽说是关闭日志, 但还是会打印 Warning, Error 日志. 这二种日志级别, 在程序运行正常时, 不应有打印输出.

 *

 * 建议在发布的版本里, 调用此接口, 关闭掉日志打印.

 */

+ (void)setLogOFF;(发布时记得关闭极光打印log的功能)

2.一般小公司的App都会采用比较偷懒的设置角标的方式

就是一点击app进入的时候,就回包通知栏的通知全部清空主要分三个步骤

一般是在这个方法里面

1.[application setApplicationBadgeNunber:0];(清空app的角标)

2.[application cancelLocalNotifcations];(清空通知栏的所有的通知)

3.[JPUSHService resetBadge];(通知极光的服务器角标清空了)

3.如果是大点点的公司就得好好的分析角标的变化过程了

这是我粗略的分析了角标的分析流程

当然这只是给大家一个分析的思路(不同的app还是要根据自己公司的产品的想法来的),如果很乱的话,不妨想我一样画一个流程图

大致考虑的点就是:

1:程序在前台的时候app的角标是不是应该和极光的保持一致

2. 如果是程序的消息二级界面(一般就如此界面的时候这个分类下的消息都相当与已读的状态),如果这时候来的一条消息,要判断是不是此分类下的界面(如果是相当于来的推送消息已经读过了,如果不是这个类型的分类下面,任然是去增加角标)

3.后台进入的时候,判断分类的消息是不是都是已读的状态,如果不是就角标进行-1 ,通知极光-1 通知后台此分类-1即可(当然自己的分类未读个数的计数器还是该加加该减减)

这种实现的难度就是要判断是不是在分类的二级列表下面

建议人力较少的公司直接点击分类中的某个详情界面是,才相当于查看了这条消息

还要考虑的是极光的后台有的时候会挂掉,我们的app必须有角标的自动修复机制,不要影响用户的体验

关于前台后台以及点击通知栏直接进入的状况

点击通知栏进入会走InActive的状态

前台和后台就很好判断了

这里借鉴了某位大神哥的看法(多谢大神分享)

原文地址:https://www.cnblogs.com/chaoyueME/p/6215987.html