我正在使用三个iDevices进行测试。 设备1触发CKSubscription更改通知。
设备2和3收到通知,徽章编号增加到1。
我编码将每次app变为前景时将徽章编号重置为0,如下所示。(在applicationDidBecomeActive中:)
CKModifyBadgeOperation *badgeResetOperation = [[CKModifyBadgeOperation alloc] initWithBadgeValue:0];
[badgeResetOperation setModifyBadgeCompletionBlock:^(NSError * operationError) {
if (!operationError) {
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
}
}];
[[CKContainer defaultContainer] addOperation:badgeResetOperation];
如果用户在设备2上点击我的应用程序,将执行上面的代码。它运作良好。徽章编号重置为0.但问题是设备3上的徽章编号也会同时变为0,即使我没有在设备3上点按我的应用程序。
我希望设备3保留增加的徽章编号,因为用户没有点击它。
API参考说'此操作对象可以更新当前设备或所有用户设备的徽章。
https://developer.apple.com/reference/cloudkit/ckmodifybadgeoperation?language=objc
我相信这意味着有一种方法可以只重置我想要的单个设备。
请有人指导我如何完成它。
答案 0 :(得分:1)
如果所有3台设备都使用相同的iCloud ID登录,则它们将共享相同的徽章数。徽章存储在用户的iCloud帐户中。这就是为什么在使用该帐户登录的每台设备上都是一样的。
将您的其他设备记录在不同的iCloud帐户上,然后再次运行测试。这应该工作。
此外,在保存订阅时,请确保多次保存,否则您将获得同一通知的多个徽章。在再次保存之前检查是否存在订阅。