如何重置徽章应用图标编号?

Posted

技术标签:

【中文标题】如何重置徽章应用图标编号?【英文标题】:How to reset the Badge app icon number? 【发布时间】:2017-03-10 14:04:26 【问题描述】:

我将推送通知集成到 CloudKit 中,以便 iCloud 中的每一次更改都会在我的 iPhone 上弹出一个通知,并且徽章应用程序图标编号会相应地添加一个。但是,当我使用代码时:

application.applicationIconBadgeNumber = 0

要在applicationDidBecomeActive(_ application: UIApplication) 中重置该数字,我注意到徽章应用程序图标编号确实消失了,但如果再次出现另一个新通知,该数字将不会像预期的那样再次从一个开始,而是在原始总数中添加一个重置前的号码。因此这个数字越来越大。我想知道如何解决这个问题?

【问题讨论】:

【参考方案1】:

问题是你的apns payload,它包含超过1的徽章计数,你也需要重置payload。

当您设置 application.applicationIconBadgeNumber = 0 时,它只会在本地重置徽章计数,而不是在服务器中。

解决方案也将重置服务器中用户的徽章计数。

更新:Apns 有效负载


    "aps" : 
        "alert" : 
            "title" : "Push",
            "body" : "Hello User"
        ,
        "badge" : 5
    


应用程序显示的徽章计数与上面的 apns 有效负载中相同,您需要从服务器重置上面有效负载中的徽章值。

希望对你有帮助。

干杯。

【讨论】:

我明白你的意思,但你能告诉我一些具体的代码来重置服务器端吗?我尝试了一些方法,但没有一个有效。 @Jaheny 您必须在应用程序中使用某些 api 服务?推送是通过服务器应用程序发送的,而不是发送它,所以当他们在服务器中创建apns 消息时,他们必须使用一些处理徽章计数的数据库,see my update how apns payload looks 与知道在哪里更改它的 API 人员交谈。 【参考方案2】:

我发现我不应该只将应用程序端设置为:

UIApplication.sharedApplication().applicationIconBadgeNumber = 0

但我还应该在 CKContainer 中设置 iCloud 端。因此,完整的代码如下:

let operation = CKModifyBadgeOperation(badgeValue: 0)
operation.modifyBadgeCompletionBlock = (error) in
    if let error = error
        print("\(error)")
        return
    
    application.applicationIconBadgeNumber = 0

CKContainer.default().add(operation)

【讨论】:

这很好,但现在 CKModfifyBadgeOperation 已被弃用。做什么/

以上是关于如何重置徽章应用图标编号?的主要内容,如果未能解决你的问题,请参考以下文章

从推送中重置应用程序图标上的徽章

如何从 iPhone 中的应用程序图标中删除徽章通知符号

更新 iOS 图标徽章编号

如果我没有启用徽章,为啥我的 iOS 应用程序图标会显示徽章编号?

本地通知触发时更改图标徽章编号

如何在图标启动器 kotlin 中创建徽章编号