极光远程推送角标控制

角标显示异常

接手别人项目发现桌面角标点击可以清零,但是再收到一条远程推送,不是显示1,而是在之前的基数上+1
查看极光API发现:

///----------------------------------------------------
/// @name Server badge 服务器端 badge 功能
///----------------------------------------------------

/*!
 * @abstract 设置角标(到服务器)
 *
 * @param value 新的值. 会覆盖服务器上保存的值(这个用户)
 *
 * @discussion 本接口不会改变应用本地的角标值.
 * 本地仍须调用 UIApplication:setApplicationIconBadgeNumber 函数来设置脚标.
 *
 * 本接口用于配合 JPush 提供的服务器端角标功能.
 * 该功能解决的问题是, 服务器端推送 APNs 时, 并不知道客户端原来已经存在的角标是多少, 指定一个固定的数字不太合理.
 *
 * JPush 服务器端脚标功能提供:
 *
 * - 通过本 API 把当前客户端(当前这个用户的) 的实际 badge 设置到服务器端保存起来;
 * - 调用服务器端 API 发 APNs 时(通常这个调用是批量针对大量用户),
 *   使用 "+1" 的语义, 来表达需要基于目标用户实际的 badge 值(保存的) +1 来下发通知时带上新的 badge 值;
 */
+ (BOOL)setBadge:(NSInteger)value;

/*!
 * @abstract 重置脚标(为0)
 *
 * @discussion 相当于 [setBadge:0] 的效果.
 * 参考 [JPUSHService setBadge:] 说明来理解其作用.
 */
+ (void)resetBadge;

原来极光服务器也保存有一份角标值,清零本地角标后,同步一下极光服务器的值就好了。

通知栏推送消息保留

使用时发现,有的应用角标清零后,下拉通知栏的推送消息还在,而我的
[UIApplication sharedApplication].applicationIconBadgeNumber = 0; 清零后,通知栏的消息也被清空了,需要保存怎么办。
只需 [UIApplication sharedApplication].applicationIconBadgeNumber = -1;据说这是利用了系统的一个bug,当角标设置值小于0时,认为非法,Icon的角标会被隐藏,同事通知栏不会做任何处理,通知消息也就不会被清除

综上所述,只需两行就能解决问题

- (void)applicationDidBecomeActive:(UIApplication *)application {
    [UIApplication sharedApplication].applicationIconBadgeNumber = -1;//999999
    [JPUSHService resetBadge];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值