iOS角标问题

作者: 向晚forever | 来源:发表于2017-07-12 16:19 被阅读1344次

iOS里清程序角标的时候会把通知栏的推送消息也清了。试验了好久得到了一些结论,记录下结果。
推送分为远程推送和本地推送。分开来记录。
在远程推送的协议中,有一个badge字段,这个字段是用来设置程序角标值的。当app处于非运行状态或者在后台时,收到远程推送,app并不会运行任何代码,一切事务都是由系统处理 )。此时收到推送,系统会根据推送消息的aps里的内容执行操作,包括:"sound"-提示音、"alert"-通知栏显示的推送内容、"badge"-程序角标值、"content-available"-静默推送标志。sound、alert和content-available就不提了,单说badge。分为下面几种情况。
1.收到推送前程序角标为零,收到的推送消息badge为0。此时角标一直处于为零的状态(为零时不显示角标)。
2.收到推送前程序角标为零,收到的推送消息badge大于0。此时角标从不显示变为badge的值。
3.收到推送前程序角标不为零,收到的推送消息badge为0。此时角标从显示变为不显示,且清空所有通知栏的消息,包括新收到的推送消息。当收到推送前角标不为0,收到的推送消息badge为0或小于0时,角标保持不变)。
4.收到推送前程序角标不为零,收到的推送消息badge大于0。此时角标值更新。
本地推送通过UILocalNotification对象发送,UILocalNotification有一个applicationIconBadgeNumber属性,作用与远程推送的badge字段类似,针对上而的四种情况,结果与远程推送相同。但需要注意一点:当applicationIconBadgeNumber设为零(也是默认值)时,意味着不改变程序角标,而不是将程序角标置零。当applicationIconBadgeNumber < 0时,程序角标变为不显示,通知栏通知不清零。顺带说一下UILocalNotification的cancelLocalNotification:和cancelAllLocalNotification方法,这两个方法是清除那些在日程表中尚未推送的本地推送消息,而不是清除通知栏内的推送消息。通知栏内的消息完全由系统控制,程序无法获得。只有当用户点击了通知栏的消息,系统调起app的didReceiveRemoteNotification或者didReceiveLocalNotification方法会将点击的推送内容传递给这两个方法,app才能获得这些数据。
另外,UIApplication也有一个applicationIconBadgeNumber的属性,该属性就是代指程序角标的。可以在代码中直接更改该属性的值,其效果与远程推送的四种情况类似。强调一点,当程序角标为非零时,将UIApplication的applicationIconBadgeNumber属性设为零,会清空通知栏。
综合上面的结论,一旦将程序的角标从非零置为零,就会清空通知栏的所有通知。如果想清除角标但不清空通知栏,有如下方法。
1.发送一条远程推送,推送内容只有badge,并将badge的值设为负数。此时程序角标会消失但是通知栏的推送消息不清除(此处有待确定)。
2.同样的方法,发送一条本地推送。
注:不能通过直接将UIApplication的applicationIconBadgeNumber设为负数的方法解决问题,实验证明,这种做法一样会清空通知栏。

相关文章

  • iOS角标问题

    iOS里清程序角标的时候会把通知栏的推送消息也清了。试验了好久得到了一些结论,记录下结果。推送分为远程推送和本地推...

  • iOS 卸载后重装APP角标依旧存在的问题

    iOS 卸载后重装APP角标依旧存在的问题 每个 APP 的角标都是存在 iOS 手机系统里的,我们开发人员是无法...

  • 安卓应用角标那些事儿

    什么是应用角标? 应用角标最开始是在ios系统中出现的,大概长这样: 如何支持应用角标? 安卓应用的角标是由Lau...

  • IOS 应用程序角标 应用程序内部角标[转]

    IOS 应用程序角标 应用程序内部角标 发表于2014/4/17 20:31:13 3913人阅读 分类: IOS...

  • IOS 极光推送角标问题

    IOS SDK集成不多说,官网写的很详细。 IOS SDK集成 运行程序,如果出现以下图片内容,就证明成功了 因为...

  • 角标问题

    app角标问题: 场景远程推送,在收到消息的时候,希望改变App的BadgeNumber值,如果没有点击通知进入A...

  • ionic ios 极光推送角标问题

    1 单独使用cordova-plugin-badge插件,能实现打开app,角标为0,但是不能解决下次消息再发来的...

  • 深度讨论丨桌面图标的通知角标是否应该存在?

    丨我的观点 桌面图标的应用通知角标可以有。 丨存在的合理性 相信很多人都没有去深究 iOS 的角标,iOS早期是没...

  • iOS设置角标

    在网上搜了很多,发现了很多都说是直接使用applicationIconBadgeNumber就行了 可是,自己能了...

  • iOS tabbar 角标

    #import "UITabBar+badge.h" #import "ContantHead.h" #defin...

网友评论

    本文标题:iOS角标问题

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