1、简介
iOS10之后苹果对推送进行了封装,UNUserNotificationCenter就这样产生了。简单介绍本地推送的使用UserNotifications官方文档说明!
2、简单使用UNUserNotificationCenter
一、创建UNUserNotificationCenter,设置推送模式和代理!
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert|UNAuthorizationOptionSound|UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error) { if (!error) { NSLog(@"succeeded!"); } }]; center.delegate = self;
二、设置推送内容
UNMutableNotificationContent *content = [UNMutableNotificationContent new]; content.title = @"推送中心标题"; content.subtitle = @"副标题"; content.body = @"这是UNUserNotificationCenter信息中心"; content.badge = @20; content.categoryIdentifier = @"categoryIdentifier"; // 需要解锁显示,红色文字。点击不会进app。 // UNNotificationActionOptionAuthenticationRequired = (1 << 0), // // 黑色文字。点击不会进app。 // UNNotificationActionOptionDestructive = (1 << 1), // // 黑色文字。点击会进app。 // UNNotificationActionOptionForeground = (1 << 2), UNNotificationAction *action = [UNNotificationAction actionWithIdentifier:@"enterApp" title:@"进入应用" options:UNNotificationActionOptionForeground]; UNNotificationAction *clearAction = [UNNotificationAction actionWithIdentifier:@"destructive" title:@"忽略2" options:UNNotificationActionOptionDestructive]; UNNotificationCategory *category = [UNNotificationCategory categoryWithIdentifier:@"categoryIdentifier" actions:@[action,clearAction] intentIdentifiers:@[requestID] options:UNNotificationCategoryOptionNone]; [center setNotificationCategories:[NSSet setWithObject:category]];
三、设置推送方式
UNTimeIntervalNotificationTrigger *timeTrigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:60 repeats:YES]; UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:requestID content:content trigger:timeTrigger];
trigger的其它用法:
//1分钟后提醒 UNTimeIntervalNotificationTrigger *trigger1 = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:60 repeats:NO]; //每小时重复 1 次 UNTimeIntervalNotificationTrigger *trigger2 = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:3600 repeats:YES]; //周日早8点 NSDateComponents *components = [[NSDateComponents alloc] init]; components.weekday = 1; components.hour = 8; UNCalendarNotificationTrigger *trigger3 = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:components repeats:YES]; //#import <CoreLocation/CoreLocation.h> CLRegion *region = [[CLRegion alloc] init]; UNLocationNotificationTrigger *trigger4 = [UNLocationNotificationTrigger triggerWithRegion:region repeats:NO];
四、添加推送request
[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) { }];
3、UNUserNotificationCenter的Delegate
//将要推送 - (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{ NSLog(@"----------willPresentNotification"); } //已经完成推送 - (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler{ NSLog(@"============didReceiveNotificationResponse"); NSString *categoryID = response.notification.request.content.categoryIdentifier; if ([categoryID isEqualToString:@"categoryIdentifier"]) { if ([response.actionIdentifier isEqualToString:@"enterApp"]) { if (@available(iOS 10.0, *)) { } else { // Fallback on earlier versions } }else{ NSLog(@"No======"); } } completionHandler(); }
4、移除推送
[center removePendingNotificationRequestsWithIdentifiers:@[requestID]];
[center removeAllDeliveredNotifications];
附录:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. if (@available(iOS 10.0, *)) { //第一步:获取推送通知中心 UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert|UNAuthorizationOptionSound|UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error) { if (!error) { NSLog(@"succeeded!"); } }]; center.delegate = self; //第二步:设置推送内容 UNMutableNotificationContent *content = [UNMutableNotificationContent new]; content.title = @"推送中心标题"; content.subtitle = @"副标题"; content.body = @"这是UNUserNotificationCenter信息中心"; content.badge = @20; content.categoryIdentifier = @"categoryIdentifier"; // 需要解锁显示,红色文字。点击不会进app。 // UNNotificationActionOptionAuthenticationRequired = (1 << 0), // // 黑色文字。点击不会进app。 // UNNotificationActionOptionDestructive = (1 << 1), // // 黑色文字。点击会进app。 // UNNotificationActionOptionForeground = (1 << 2), UNNotificationAction *action = [UNNotificationAction actionWithIdentifier:@"enterApp" title:@"进入应用" options:UNNotificationActionOptionForeground]; UNNotificationAction *clearAction = [UNNotificationAction actionWithIdentifier:@"destructive" title:@"忽略2" options:UNNotificationActionOptionDestructive]; UNNotificationCategory *category = [UNNotificationCategory categoryWithIdentifier:@"categoryIdentifier" actions:@[action,clearAction] intentIdentifiers:@[requestID] options:UNNotificationCategoryOptionNone]; [center setNotificationCategories:[NSSet setWithObject:category]]; //第三步:设置推送方式 UNTimeIntervalNotificationTrigger *timeTrigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:60 repeats:YES]; UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:requestID content:content trigger:timeTrigger]; //第四步:添加推送request [center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) { }]; [center removePendingNotificationRequestsWithIdentifiers:@[requestID]]; [center removeAllDeliveredNotifications]; // [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) { // NSLog(@"settings===%@",settings); // }]; } else { } return YES; } #pragma mark - UNUserNotificationCenterDelegate //将要推送 - (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{ NSLog(@"----------willPresentNotification"); } //已经完成推送 - (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler{ NSLog(@"============didReceiveNotificationResponse"); NSString *categoryID = response.notification.request.content.categoryIdentifier; if ([categoryID isEqualToString:@"categoryIdentifier"]) { if ([response.actionIdentifier isEqualToString:@"enterApp"]) { if (@available(iOS 10.0, *)) { } else { // Fallback on earlier versions } }else{ NSLog(@"No======"); } } completionHandler(); }