美文网首页
本地推送UNUserNotificationCenter

本地推送UNUserNotificationCenter

作者: 被吹落的风 | 来源:发表于2018-10-24 11:08 被阅读20次

iOS10之后苹果对推送进行了封装,UNUserNotificationCenter就这样产生了。

UNUserNotificationCenter简单使用

1.创建UNUserNotificationCenter,设置推送模式和代理!

UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert|UNAuthorizationOptionSound|UNAuthorizationOptionBadge)
                              completionHandler:^(BOOL granted, NSError * _Nullable error) {
                                  if (!error) {
                                      NSLog(@"succeeded!");
                                  }
 }];
center.delegate = self;

2.设置推送内容

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]];

3.设置推送方式

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];

4.添加推送request

[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) { }];

5.移除推送

[center removePendingNotificationRequestsWithIdentifiers:@[requestID]];
[center removeAllDeliveredNotifications];

6.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();
}

实例

- (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();
}

相关文章

网友评论

      本文标题:本地推送UNUserNotificationCenter

      本文链接:https://www.haomeiwen.com/subject/hhyttqtx.html