美文网首页iOS 推送
iOS APPIcon角标设置为0不影响通知栏消息处理

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

作者: zl_xust | 来源:发表于2018-01-17 11:12 被阅读55次

    本地推送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,后续系统升级会不会有类似问题,需要再做 验证。仅供参考!

    相关文章

      网友评论

      • Qson1:加Q交流下 455063392
      • Qson1:11.4.1你那边测试正常吗,我安装你的方法测试有不行,最近在搞这个需求,系统能得到帮助
      • lanmoyingsheng:排版太乱,不忍直视
        lanmoyingsheng:@zl_xust :+1:
        zl_xust:以后注意,不过我这个初衷是给自己留作笔记,顺带分享,请见谅

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

      本文链接:https://www.haomeiwen.com/subject/zdvyoxtx.html