效果
推送点击一条,被点击的推送消失,
点击其中一条后,打开APP,气泡数量消失,
退到后台 收到新推送 1条气泡显示1,如果不打开,再收到推送 气泡数量累加
代码部分
去掉 applicationIconBadgeNumber = 0 相关逻辑
结合极光
JPUSHService.setBadge(0)
OC代码
#define IS_IOS11_LATER ([[UIDevice currentDevice] deviceSystemMajorVersion] >= 11)
//不在appIcon上显示推送数量,但是在系统通知栏保留推送通知的方法
- (void)resetBageNumber {
// 清空极光推送数量
if(IS_IOS11_LATER) {
//iOS 11后,直接设置badgeNumber = -1 就生效了
[UIApplication sharedApplication].applicationIconBadgeNumber = -1;
} else {
UILocalNotification *clearEpisodeNotification = [[UILocalNotification alloc] init];
clearEpisodeNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:(1)]; //如果无效可以尝试调大时间
clearEpisodeNotification.timeZone = [NSTimeZone defaultTimeZone];
clearEpisodeNotification.applicationIconBadgeNumber = -1;
[[UIApplication sharedApplication] scheduleLocalNotification:clearEpisodeNotification];
}
}
Swift 版本代码
// 重置推送数量
private func resetBageNumber() {
if #available(iOS 11.0, *) {
UIApplication.shared.applicationIconBadgeNumber = -1
} else {
let clearEpisodeNotification = UILocalNotification()
clearEpisodeNotification.fireDate = Date(timeIntervalSinceNow: 1)
clearEpisodeNotification.applicationIconBadgeNumber = -1 //如果无效可以尝试调大时间
UIApplication.shared.scheduleLocalNotification(clearEpisodeNotification)
}
}
REST Api V3 Push
极光推送API用 +1 的默认模式。
如果不用极光 自己本地实现类似的代码也可以。
applicationIconBadgeNumber
1.本地推送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不显示,通知栏通知清空。