iOS 推送

iOS APPIcon角标设置为0不影响通知栏消息处理

2018-01-17  本文已影响55人  zl_xust

本地推送UILocalNotification的applicationIconBadgeNumber影响到角标的显示,不出对通知栏的消息造成影响

    1)当applicationIconBadgeNumber>0时,角标会随applicationIconBadgeNumber而变化。

    2)当applicationIconBadgeNumber=0时,角标维持推送前状态不变。

    3)当applicationIconBadgeNumber<0时,角标置0不显示。

2.远程推送的badge字段,只会影响角标的显示,不会影响通知栏的通知处理。

    1)当badge>0时,角标会随badge而变化。

    2)当badge=0时,角标维持不变。

    3)当badge<0时,角标维持不变。

3.UIApplication的applicationIconBadgeNumber属性既会影响角标的显示,又会影响通知栏通知的处理。

    1)当applicationIconBadgeNumber>0时,角标会随之变化,通知栏通知不变。

    2)当applicationIconBadgeNumber=0时,角标变为0不显示,通知栏通知清空。

    3)当applicationIconBadgeNumber<0时,角标变为0不显示,通知栏通知清空。

问题来了,如何处理3中提到的applicationIconBadgeNumber,达到APP Icon上的角标消息在APP从前台切刀后台后,消息提示消失,而不影响通知栏的消息呢?

duziteng124的一篇博文(地址:http://blog.csdn.net/duziteng124/article/details/50538838)中经过详细讨论,得出如下结论:

一旦将程序的角标从非零置为零,就会清空通知栏的所有通知。如果想清除角标但不清空通知栏,有如下方法。

      1.发送一条远程推送,推送内容只有badge,并将badge的值设为负数。此时程序角标会消失但是通知栏的推送消息不清除。

      2.同样的方法,发送一条本地推送。

本人采用的是方法2,发送一条本地推,但是经过测试,对于iOS 11.x 系统无效,但是通过尝试发现iOS 11.x 系统只需要将applicationIconBadgeNumber 设为-1既可以清楚icon上的消息提示,同时不清楚通知栏的消息,具体代码如下:

- (void)applicationWillResignActive:(UIApplication *)application {

        if ([UIApplication sharedApplication].applicationIconBadgeNumber) {    

               if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 11.0) {                                     [[UIApplication sharedApplication] setApplicationIconBadgeNumber:-1];      

                } else {          

                      UILocalNotification *localNotification = [[UILocalNotification alloc] init];      

                      // 设置通知的发送时间,单位秒      

                       localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:0.5];    

                        //收到通知时App icon的角标       

                       localNotification.applicationIconBadgeNumber = -1;    

                       // 3.发送通知(🐽 : 根据项目需要使用)      

                          [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];    

                  }    

    }    

        [JPUSHService setBadge:0];

}


本文引用了简书作者tinghua的的文章“iOS推送角标与通知栏变化总结”的文章,附上地址文章地址:https://www.jianshu.com/p/4a835578ea9a

同时引用了duziteng124的一篇博文(地址:http://blog.csdn.net/duziteng124/article/details/50538838)中的讨论结论

验证的系统(机型)如下:iOS8.1.1(iPhone 5s),iOS 9.3.4(iPhone 4s), iOS 10.2(iPhone 6sP), iOS 11.1.1(iPHone 6), iOS11.2(iPhone 8), 也就是说在iOS 11 以下的系统duziteng124方法有效,iOS11及以上的系统需要直接设置[[UIApplication sharedApplication] setApplicationIconBadgeNumber:-1];  这个或许是系统问题造成的bug,后续系统升级会不会有类似问题,需要再做 验证。仅供参考!

上一篇下一篇

猜你喜欢

热点阅读