iOS Push推送逐一清除解决方案

效果

推送点击一条,被点击的推送消失,

点击其中一条后,打开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不显示,通知栏通知清空。

相关文档

JPush社区问题

清除App图标上的推送数量并保留系统通知栏推送通知的方法

iOS清除角标,通知栏“通知”保留

iOS推送角标与通知栏变化总结

JPush iOS APNs 通知推送支持 badge +1

你可能感兴趣的:(iOS Push推送逐一清除解决方案)