如何重置徽章应用图标编号?
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 已被弃用。做什么/以上是关于如何重置徽章应用图标编号?的主要内容,如果未能解决你的问题,请参考以下文章