在写这篇文章之前,我对 UserNotification 框架进行了很多研究,它在 IOS 10 中取代了 UILocalNotification。我还按照本教程学习了关于这个新功能的所有内容:http: //useyourloaf.com/blog/local-notifications-with- IOS-10/。
今天我在实现这种微不足道的通知时遇到了很多麻烦,而且由于它是最近的新功能,我找不到任何解决方案(尤其是在目标 C 中)!我目前有 2 个不同的通知,一个Alert和一个Badge update。
警报问题
在将我的手机从 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都没有成功。