Сбросить значение значка CKNotificationInfo только для текущего устройства
Я тестирую с тремя устройствами. Устройство 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
Я считаю, что это означает, что есть способ сбросить только одно устройство, которое я хочу.
Пожалуйста, кто-нибудь направит меня, как это сделать.
1 ответ
Если все ваши 3 устройства вошли в систему с одинаковым идентификатором iCloud, они будут иметь одинаковое количество значков. Значки хранятся в учетной записи iCloud пользователя. Вот почему оно одинаково для всех устройств, зарегистрированных с этой учетной записью.
Зарегистрируйте другие устройства на разных учетных записях iCloud и снова запустите тест. Это должно работать.
Кроме того, при сохранении ваших подписок убедитесь, что вы сохраняете одно и то же несколько раз, иначе вы получите несколько значков для одного и того же уведомления. Проверьте наличие подписки, прежде чем сохранить ее снова.