关于推送的角标的设置
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的状态
前台和后台就很好判断了
这里借鉴了某位大神哥的看法(多谢大神分享)