Чтобы поймать входящее уведомление, когда приложение находится в фоновом режиме или убито, используйте UNNotificationServiceExtension
в вашем проекте.
В - (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler
из UNNotificationServiceExtension
вы можете обновить Пометить следующим образом:
self.bestAttemptContent = [request.content mutableCopy];
, чтобы получить содержимое запроса self.bestAttemptContent.badge = <desired_integer_value>
, где <desired_integer_value>
будет целым числом, которое вы sh положите для счетчик значков. self.contentHandler(self.bestAttemptContent);
для завершения обновления содержимого.
Во многих случаях счетчик значков может отражать значение (например, количество непрочитанных сообщений чата) для конкретного пользователя. Для этого вы можете использовать общие пользовательские настройки по умолчанию. На самом деле NSUserDefaults поддерживает концепцию app suite
, чтобы разрешить такой обмен. См. документацию Apple для получения более подробной информации. В частности,
Этот метод можно использовать при разработке набора приложений, для обмена настройками или другими данными среди приложений или при разработке расширения приложения, для обмена настройками или другими данными между расширением и содержащее его приложение.
Домены аргументов и регистрации совместно используются всеми экземплярами NSUserDefaults.
В файле Constants.h
есть что-то для отслеживания индивидуальных подсчетов для каждого пользователя, например
#define NOTIFICATIONS_UNREAD_SHARED [NSString stringWithFormat:@"notificationsUnread-%@",[mySharedDefaults objectForKey:USERNAME]]
и в вашем приложении вы сохраняете отдельные подсчеты для каждого пользователя в общие значения по умолчанию для пользователей пакета приложений, например что-то вроде
NSUserDefaults *mySharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.yourCompany.yourAppname"];
if ([[NSUserDefaults standardUserDefaults] objectForKey:USERNAME]) {
mySharedDefaults setObject:[[NSUserDefaults standardUserDefaults] objectForKey:USERNAME] forKey:USERNAME];
[mySharedDefaults setObject:[NSNumber numberWithInteger:arrExistingRead.count] forKey:NOTIFICATIONS_READ_SHARED];
[mySharedDefaults setObject:[NSNumber numberWithInteger:([AppConstant sharedconstant].countObj.arrAllMessages.count - arrExistingRead.count)] forKey:NOTIFICATIONS_UNREAD_SHARED];
[mySharedDefaults synchronize];
}
Затем в вашем UNNotificationServiceExtension
, вы бы сделали что-то вроде
NSUserDefaults *mySharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.yourCompany.yourAppname"];
if ([mySharedDefaults objectForKey:NOTIFICATIONS_UNREAD_SHARED]) {
if ([mySharedDefaults objectForKey:USERNAME]) {
self.bestAttemptContent.badge = [NSNumber numberWithInt:[[mySharedDefaults objectForKey:NOTIFICATIONS_UNREAD_SHARED] intValue]+1];
} else { // username somehow not set; reset badge to 0
self.bestAttemptContent.badge = @0;
}
} else { // notifications unread count not found for this user; reset badge to 0
self.bestAttemptContent.badge = @0;
}