2

我正在使用三个 iDevice 进行测试。设备 1 触发 CKSubscription 更改通知。

设备 2 和 3 收到通知,徽章编号增加到 1。

每次应用程序进入前台时,我都将徽章编号重置为 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

我相信这意味着有一种方法可以只重置我想要的单个设备。

请任何人指导我如何完成它。

4

1 回答 1

1

如果您的 3 台设备都使用相同的 iCloud ID 登录,它们将共享相同的徽章数量。徽章存储在用户的 iCloud 帐户中。这就是为什么使用该帐户登录的每台设备都相同的原因。

将您的其他设备登录到不同的 iCloud 帐户并再次运行您的测试。那应该行得通。

此外,在保存订阅时,请确保您多次保存相同的内容,否则您将获得同一通知的多个徽章。在再次保存之前检查订阅是否存在。

于 2016-08-01T01:25:09.893 回答