IOS 10.2 Проблемы с пользовательскими уведомлениями на простых оповещениях и бейджах
Перед написанием этого поста я провел множество исследований в UserNotification Framework, который заменил UILocalNotification в IOS 10. Я также следовал этому руководству, чтобы узнать все об этой новой функции:http://useyourloaf.com/blog/local-notifications-with-ios-10/.
Сегодня я сталкиваюсь с таким большим количеством проблем при реализации таких тривиальных уведомлений, и, поскольку это недавно появившаяся новая функция, я не смог найти никаких решений (особенно в задаче C)! В настоящее время у меня есть 2 разных уведомления, однобдительный и одинЗначок обновления.
Оповещение о проблемеПеред обновлением моего телефона с IOS 10.1 до 10.2 я сделал предупреждение на Appdelegate, которое запускается сразу же, когда пользователь закрывает приложение вручную:
-(void)applicationWillTerminate:(UIApplication *)application {
NSLog(@"applicationWillTerminate");
// Notification terminate
[self registerTerminateNotification];
}
// Notification Background terminate
-(void) registerTerminateNotification {
// the center
UNUserNotificationCenter * notifCenter = [UNUserNotificationCenter currentNotificationCenter];
// Content
UNMutableNotificationContent *content = [UNMutableNotificationContent new];
content.title = @"Stop";
content.body = @"Application closed";
content.sound = [UNNotificationSound defaultSound];
// Trigger
UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:1 repeats:NO];
// Identifier
NSString *identifier = @"LocalNotificationTerminate";
// création de la requête
UNNotificationRequest *terminateRequest = [UNNotificationRequest requestWithIdentifier:identifier content:content trigger:trigger];
// Ajout de la requête au center
[notifCenter addNotificationRequest:terminateRequest withCompletionHandler:^(NSError * _Nullable error) {
if (error != nil) {
NSLog(@"Error %@: %@",identifier,error);
}
}];
}
До IOS 10.2 все работало нормально, когда я закрывал приложение вручную, появлялось предупреждение. Но так как я обновил до IOS 10.2, ничего не появляется без какой-либо причины, я ничего не меняю, и я не вижу, чего не хватает ..
Проблема с бейджемЯ также пытался (только в IOS 10.2 на этот раз) реализовать значок на значке моего приложения, который работал нормально, пока я не попытался удалить его. Вот функция, которая делает это:
+(void) incrementBadgeIcon {
// only increment if application is in background
if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground){
NSLog(@"increment badge");
// notif center
UNUserNotificationCenter *notifCenter = [UNUserNotificationCenter currentNotificationCenter];
// Content
UNMutableNotificationContent *content = [UNMutableNotificationContent new];
content.badge = [NSNumber numberWithInt:1];
// Trigger
UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:1 repeats:NO];
// Identifier
NSString *identifier = @"LocalNotificationIncrementBadge";
// request
UNNotificationRequest *incrementBadgeRequest = [UNNotificationRequest requestWithIdentifier:identifier content:content trigger:trigger];
// Ajout de la requête au center
[notifCenter addNotificationRequest:incrementBadgeRequest withCompletionHandler:^(NSError * _Nullable error) {
if (error != nil) {
NSLog(@"Error %@: %@",identifier,error);
}
}];
}
}
На данный момент он не увеличивает номер значка, как следует из его названия, а просто устанавливает номер значка на 1. Документация говорит, что если вы установитеcontent.badge до 0, он удаляет его, но это не работает. Я пытался с другими числами, когда я вручную изменяю его на «2», «3» и т. Д. ... он меняется, но если я устанавливаю его на 0, он не работает.
Кроме того, в уроке, который я связал ранее, упоминается несколько функций:getPendingNotificationRequests: completionHandler: а такжеgetDeliveredNotificationRequests: completionHandler:, Я заметил, что когда я вызываю эти функции сразу после вызоваincrementBadgeIcon, если для content.badge задано значение «1», «2» и т. д., оно появляется в списке ожидающих уведомлений. Однако, когда я установил его на 0, он нигде не появляется. Я не получаю ни ошибки, ни предупреждения в XCode, и мой значок приложения все еще остается.
Кто-нибудь знает, как я могу исправить эти два оповещения?
Заранее спасибо
PS: я тоже пытался использоватьremoveAllPendingNotificationRequests а такжеremoveAllDeliveredNotifications для обоих без успеха.