极光推送的角标问题——让人又爱又恨的小红点


#1

我们现在无论何时拿出自己的手机,解锁后的主页上,总能看到一个个的小红点,仿佛在呐喊:有消息啦,不管重不重要,快点我,快来消除我。

甚至曾有人掀起了一波潮流:在微信头像上加上小红点。这很直接很彻底地引发了大众的清除强迫症。

这也就是为什么我们做 App 的时候,希望在收到了推送消息时,App 能带上一个小红点。在使用得当的情况下,小红点有助于增加 App 的启动率,保持用户粘度。

那么 App 端怎么来实现呢?小红点中心的数值怎么来管理呢?


Android

  • 角标不是 Android 的基本功能,也就是说 Google 原生系统是不支持的,不过国内某些 ROM 提供了各自的方法来支持自定义实现,只是跟随系统更新,提供的方法可能还会有所改变。因此极光推送并没有支持 Android 的角标,需要大家自己去实现与管理角标值。

  • 如果你在自己没有做任何 Android 角标相关的操作时就有了角标,这代表手机系统自己做了展示,需要看下手机系统的相关文档。

  • 分享几个实现 Android badge 的项目

文章



iOS:推送时给 badge 传值,客户端收到即展示,之后再做其他处理。

一、客户端设置角标

  • 设置本地显示的角标(Apple官方的接口)
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:(int)value];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; //清除角标
//以上方法在任何地方均可调用,根据自己的需要设定即可。譬如:

//杀死后点击icon进入时清除角标
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
application.applicationIconBadgeNumber = 0;
}
//从后台点击icon进入时清除角标
func applicationWillEnterForeground(_ application: UIApplication) {
application.applicationIconBadgeNumber = 0;
}
  • 设置极光服务器存储的角标(不要忽略!)
+ (BOOL)setBadge:(int)value  //value 取值范围:[0,99999]
+ (void)resetBadge  //相当于  [setBadge:0],清空角标

设通过调用 API ,使极光服务器为A设备存储的角标数为 P,为 B 设备存储的角标数为 Q。
场景描述:

  1. 收到 P 条消息,角标为 P
  2. 点击了一条消息,此时你获取到消息中的 badge 值为 P,自行计算 -1,将 P-1 赋值给 setbadge
  3. 再推送消息 (badge +1),角标为 P,不会是 P+1

二、服务端或控制台推送时,badge可设置为 N,+N,-N

//服务端发送 json 消息串
{
    "notification" : {
         "ios" : {
                 "alert" : "hello, JPush!", 
                 "sound" : "sound.caf", 
                 "badge" : 1, //可传值为N,+N,-N。
                 }
            }
       }
}          

官网控制台的设置 badge 的步骤:推送>发送通知>选择一个iOS目标平台>展开可选设置> iOS > badge

  • N:推送时设置为固定的数值,收到时角标便显示该数值。
  • +N 或 -N:收到时角标值 = 极光服务器存储的值 ± N:
    • A 收到时角标为 P ± N,B 收到时角标为 Q ± N。
    • 因此如果推送时使用 ± N,那么客户端就需要注意本地和极光服务器的角标应同步设置。
    • 很多人问咋个角标清除不了,清除后再次推送收到的却依旧是 清除前的值+N,这就是因为 服务器存储的角标你没同步修改咯。

这里应该有注意到,极光服务器帮大家完成了每个设备的角标的管理,所以一般使用的时候只需要在客户端预设好角标的处理逻辑,推送时固定好 + N,就可以不用再自己操心 badge 的值了。

拓展

「badge 清零了,但通知栏消息没有消失」如何做到

「Java SDK 的 badge+1 用什么方法」
用的不是 setBadge,而是 autoBadge 或者 incrBadge

「Java SDK 推送消息时不设置角标」需要调 disableBadge

PHP SDK 要达到不设置角标的效果,使用 v3.5.34 版本及以上 设置badge => null 即可。


ps.ps:正经讲可能你不明白,那我再通俗点说:

1、官网-推送消息-选择iOS平台-可选设置-badge,设置1、2、3或者N,+1,+2之类的

2、iOS端收到消息,系统直接就会显示这个badge的值

3、如果你传的+1,那么就是在极光服务器存的值里面+1后直接显示,一开始App啥也没做,就从0加起,你一直不setbadge,就会一直+1下去,setbadge就改变这个+1起始值

4、点击了消息,一般逻辑就是要清除、修改角标,那么调用Apple原生方法,看上面代码,把显示的角标给清除了/修改了,同时setbadge也附同样的值,这样下次+1的消息发过来,就是在你当前显示的badge上+1显示了,不需要你自己再管理了。

「再不行的话就测下我们的demo,多推送,看效果总能明白(´・_・`)」


最后附赠一个ps.ps.ps:JPush和JMessage的角标是共用的,使用+1语义即可。

1、启动App,成功注册JPush和JMessage,登录JMessage账号

2、JPush推送消息-选择iOS平台-可选设置-badge,设置+1,极光服务器会处理你的角标,把badge值变为 「当前存储的角标值」+1=N,然后推送下去

3、iOS端收到JPush消息,系统直接就会显示这个badge的值,暂定你现在App端不做处理(不清除和修改角标)

4、JMessage处于后台等情况,极光有自动的通知提醒(将你的会话消息转为apns通知发到设备上),发下来的消息,角标是在N上+1后发下来并展示,发第二条消息,就是N+1+1=M。(JMessage的apns通知是我们自动发的,所以角标也是自动默认+1的语义)

5、然后JPush发消息,你后台推送的时候也是写的badge+1(这里JPush是可以传固定值的,但是一旦传了固定值,收到消息就显示这个固定值了,所以后台推送一定要写上badge+1),那么此时收到,就展示的是M+1的角标

6、之后你点击了消息等要做处理,一般逻辑就是要清除、修改角标,那么调用Apple方法, UIApplication:setApplicationIconBadgeNumber ,把本地显示的角标给清除了/修改了,同时setbadge也附同样的值,就是告诉极光服务器下次+1,从这个值开始+。


还不收了我去祸害处女座(o゚v゚)ノ

返回常见问题总目录



JPush 常见问题目录
ios角标问题和通过点击app图标清除角标
iOS推送角标的设置
使用jmessage-phonegap-plugin
如何添加cocos2d-x 推送消息的角标
极光推送IOS的消息数量角标如何设置,后台这边有相应代码吗C#
android 关于角标显示
IOS与android怎么获取到未读消息的数量?
iOS JPush 推送数累加问题
ios 集成注册代码问题
Android桌面图标角标的显示问题
关于通知个数混乱的问题,给我个答案
react native 的iOS中程序未启动的问题
ios推送角标自增不了问题
ios生产环境获取不到RegistrationID
iOS接收推送正常,但是角标一直都是1
关于RN(IOS)收到通知
服务器集成jpush推送向指定别名发送自定义消息,服务端能接收到msg_id,客户端接收不到通知消息
关于 iOS 角标的问题
小米手机app 图标 角标显示 未读消息数量
iOS 推送个数怎么统计
推送badge设置问题
java服务器端集成,推送日志显示msg_id及sendno,但IOS端收不到消息。
SDK能设置推送只显示最新的一条通知吗
推送后,iOS 每个人手机上的应用图标的右上角的角标数目不一样
iOS 通知角标问题
IOS角标自增和清空是写在哪个方法里?怎么写啊?
关于IOS推送 角标问题!
react native JPush js端获取 registartion ID
请问一下,极光推送中未读消息的个数怎么得到和判断
点击icon不能彻底清除角标
导入SDK发了几个测试信息后,icon上一直有个“1”的角标
IOS端 角标一直累加,服务端怎么清除呢?
Jpush这边后台设置iOS的iconbadge问题
用极光推送,如果不通过点击推送的通知进入app,而是通过点击app图标进入app, 那么怎么获取它已经推送过的消息?
ios 点击app推送个数清空后,再次来推送消息,个数就会再原有基础上加1
关于角标的问题--ios
jmessage-react-plugin 问题
ios怎么真正消除app图标上的推送消息数
未读通知显示问题
ios 推送角标问题
ios 推送角标问题
生产环境下 web跟api平台都收不到推送 但是现实推送成功 只是没有目标
安卓推送桌面红点
Android收到推送后角标支持哪些主流平台?
RN中的Android应用的Badge问题
Android 设置Tags,显示6016
ios角标的问题
react-native怎么清空badge
我使用JChat角标不对 数字特别大怎么回事?
Android收到推送消息后为什么桌面图标没有显示数量
APP角标未读消息数字
ios开发环境收不到消息,生产环境图标右上角有个1下不去.
Android收到推送消息后为什么桌面图标没有显示数量
Android 未读消息 获取
使用极光推送显示图标角标
基于Cordova下的安卓推送
JPush ios接收问题
后台推送消息不显示小红点
请问JPUSH sdk 3.0.6 版本 [JPUSHService resetBadge]这个API的真实作用是什么?
集成之后没有声音,没有角标
极光推送的badge问题
极光推送的badge问题
想请教一下根据别名推送的问题
PHP极光接口推送,可以收到通知,但没有角标和提示音,求解
关于iOS角标,当中途有消息延迟下发时,角标数量错误
请教一个关于Android手机角标的问题
关于通知的角标设置的疑问
接入好推送sdk为什么刚安装图标上就有红圈数字1,无论打开后再关闭永远都有
极光服务器保存badge 的数值问题
关于通知的角标设置的疑问
华为p9不显示徽章
角标的个数 会减少
为什么我服务端推送到app的问题
分批次推送tag值 只推送了前20条,后面的没推送成功
cordova 打包的ios 通知能收到,声音听不到,手机已设置允许通知
JPush iOS Badge 参数问题 紧急。。。。
app不显示小红点跟条数
ios 推送的时候如何传参?
关于app应用图标上未读数字标签的问题
app杀死进程之后,如何获取badge信息来设置小红点
常见问题 - JPush 合集(持续更新)
我就奇怪啦,为啥我的iOS的Badge清不掉咧?
iOS 当程序处于后台运行时,点击通知栏进入app,怎么获取推送消息或者知道是否收到通知
ios推送badge问题
JPUSH 3.0.2 badge 角标自增问题
.net 服务器 无法推送
极光推送支持安卓设置角标吗
iOS 极光推送没有运行app,app右上角一直有个红色标消失不了
从简单的测试中了解极光推送可以实现的效果
(小鲜肉老腊肉都是肉) #2

我设置角标的时候角标不自动+1,后台传badge的时候传的也是+1,我在- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler 方法里面设置[JPUSHService setBadge:5];下次接收到通知的时候badge还是没有后台传过来的1,并没有+5,能不能详细说下收到推送后在哪个方法里面做什么事情?在哪儿执行[JPUSHService setBadge:5];?


#3

在你需要的地方执行代码呀

1、要看你是否设置成功,看日志
2、要看你推送的时候是不是真的传的+1,给我提供消息的msgid我确认一下


(小鲜肉老腊肉都是肉) #4

日志显示成功了,打印2017-05-05 16:39:17.895573+0800 BGH-family[345:28004] | JIGUANG | I - [JIGUANGBadgeNumberReport] set badge:9 succeed
我在appdelegate.m里面的每个方法都执行了[JPUSHService setBadge:5],只有- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:。。。。这个方法成功了
msgid是4633365024,麻烦您看看


#5

后台的badge传的是1,不是+1,让他们检查哦,你自己在推送历史-API-消息详情里面也可以看到这个数据


(小鲜肉老腊肉都是肉) #6

后台的代码是这样写的,setbadge传的+1,但是从极光上看却是1,请问应该怎么写?


#7

你们用的Java SDK吗?
+1应该用的不是setBadge,而是autoBadge或者incrBadge


(小鲜肉老腊肉都是肉) #8

完美解决问题,谢谢:blush:


(骊咏吴) #9

android端ShortcutBadger设置角标,在应用未启动如何推送角标值了?
或者当应用被杀掉了,如何获取推送角标了?


#10

关于推荐的几个Android的角标项目,直接去github上与他们交流,我这边无法提供帮助哈


(骊咏吴) #11

好的谢谢,我在想一下吧。


(Ali) #12

你好,你实现推送角标值了吗???


(I Want Sleep) #13

React-native IOS 版本已经设置了在app进入后台/前台时 setBadge为1 但是偶尔还是会出现Badge出现累加的情况,这个有什么情况会引起吗


(哈哈) #14

func applicationWillEnterForeground(_ application: UIApplication) {
application.applicationIconBadgeNumber = 0;
} 这个我看了,但是点击通知栏,和点击icon不是都走这个方法吗? 如果通知栏有几条消息,其他的没看,是不是都成0了


#15


iOS推送角标的设置
(wowo) #17

iOS 上的红点还是不能消失


#18

请具体说明你的情况,调用了API没有??


(wowo) #19

调用了 点击了推送消息后小红点不是应该消失的吗。我调试点击后小红点不消失


#20

那你点击了推送消息,这个动作有触发你 清除角标的API吗???

你有在点击消息那里调用清零角标的API吗??

这是Apple官方的方法,只要你调用了,必然是会清零的


(wowo) #21

有没有文档我看看