APNS清空icon数字的多种姿势

关于iOS的推送角标,实在是比较坑爹

对于apns来讲,如果app收到了多条推送,推送通知栏会有多条消息,当用户启动app,我们最常用的方式就是调用下面的方法清空角标 :

  [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

在进入后台一看,嗯,确实清掉了角标
拉开通知中心一看,尼玛,推送呢? 一条也没了。。。
那么如何在不影响通知栏消息的基础上清掉角标呢?

变化规律
  1. 本地推送UILocalNotification的applicationIconBadgeNumber属性只会影响角标的显示,不会影响通知栏的通知处理。
  • 当applicationIconBadgeNumber>0时,角标会随applicationIconBadgeNumber而变化。
  • 当applicationIconBadgeNumber=0时,角标维持推送前状态不变。
  • 当applicationIconBadgeNumber<0时,角标置0不显示。
  1. 远程推送的badge字段,只会影响角标的显示,不会影响通知栏的通知处理。
  • 当badge>0时,角标会随badge而变化。
  • 当badge=0时,角标维持不变。
  • 当badge<0时,角标维持不变。
  1. UIApplication的applicationIconBadgeNumber属性既会影响角标的显示,又会影响通知栏通知的处理。
  • 当applicationIconBadgeNumber>0时,角标会随之变化,通知栏通知不变。
  • 当applicationIconBadgeNumber=0时,角标变为0不显示,通知栏通知清空。
  • 当applicationIconBadgeNumber<0时,角标变为0不显示,通知栏通知清空。

这时一个优雅的方案就出现了:

- (void)applicationDidEnterBackground:(UIApplication *)application {
    //清空徽标 -  会保留通知栏信息
    if (application.applicationIconBadgeNumber <= 0) {
        return;
    }
    UILocalNotification *local = [[UILocalNotification alloc] init];
    local.fireDate = [NSDate date];
    local.applicationIconBadgeNumber = -1; // 置空
    [application scheduleLocalNotification:local];
}

如此以来 ,再也不用担心通知中心被清空啦~~~

你可能感兴趣的:(APNS清空icon数字的多种姿势)