CloudKit 不会将我的徽章计数重置为 0

Posted

技术标签:

【中文标题】CloudKit 不会将我的徽章计数重置为 0【英文标题】:CloudKit won't reset my badge count to 0 【发布时间】:2014-08-04 13:40:27 【问题描述】:

我尝试了很多方法,但似乎无法根据来自 cloudKit 的通知重置徽章计数。 有没有其他人遇到过这个问题。这是我尝试过的:

1) 本地设置徽章计数为0

  application.applicationIconBadgeNumber = 0; (temporarily removes the badge count).

运气不好……

2) 调用服务器清除徽章计数

 CKModifyBadgeOperation *oper = [[CKModifyBadgeOperation alloc] initWithBadgeValue:0];
  [oper start];

运气不好……

3) 拉入所有通知更改并将它们全部标记为已读

NSMutableArray *array = [NSMutableArray array];
CKFetchNotificationChangesOperation *operation = [[CKFetchNotificationChangesOperation alloc] initWithPreviousServerChangeToken:nil];
operation.notificationChangedBlock = ^(CKNotification *notification) 
    [array addObject:notification.notificationID];
;
operation.completionBlock = ^
        CKMarkNotificationsReadOperation *op = [[CKMarkNotificationsReadOperation alloc] initWithNotificationIDsToMarkRead:array];
        [op start];
;
[operation start];

又一次没有运气......

任何建议将不胜感激! 谢谢, 克里斯

【问题讨论】:

我有同样的问题,但很遗憾没有解决方案。运行 CKModifyBadgeOperation 时出现“内部服务器错误”。 【参考方案1】:

您需要处理您的通知后执行 CKModifyBadgeOperation。

这是我在将所有通知标记为已读后调用的 Swift 函数。 我将操作添加到 defaultContainer 而不是仅仅启动它 - 我想知道这有什么不同。

func resetBadgeCounter() 
    let badgeResetOperation = CKModifyBadgeOperation(badgeValue: 0)
    badgeResetOperation.modifyBadgeCompletionBlock =  (error) -> Void in
        if error != nil 
            println("Error resetting badge: \(error)")
        
        else 
            UIApplication.sharedApplication().applicationIconBadgeNumber = 0
        
    
    CKContainer.defaultContainer().addOperation(badgeResetOperation)

【讨论】:

是的,但现在 CKModifyBadgeOperation 已被弃用。有什么解决办法吗?这是保留其徽章编号的 CloudKit 通知的问题。在设备上重置它不起作用。 @PeterB.Kramer 你有没有找到任何解决方案/替代这个弃用的 API? 没有。我仍然将它用作已弃用的 API。【参考方案2】:

如果您未在其上设置容器,则徽章和通知操作将失败。由于您没有使用完成块,因此您没有看到错误(您使用的是默认的 NSOperation 完成块,这是错误的并且没有任何错误参数)。查看这些操作的标头以查看完成块语法。

更好的方法是通过 addOperation 方法将操作添加到容器中,这在运行之前固有地将容器设置为操作。然后它在一个内部队列上运行,它具有额外的优势,它可以防止同时运行多个可能导致冲突的操作。

【讨论】:

以上是关于CloudKit 不会将我的徽章计数重置为 0的主要内容,如果未能解决你的问题,请参考以下文章

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

在 iOS 上重置通知徽章的问题 - Swift [重复]

每当我的应用收到推送通知时,它都会从最后一个徽章编号(不是 0)递增

使用“iCloud”徽章登录 CloudKit

iOS重新安装应用程序不清除徽章

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