zoukankan      html  css  js  c++  java
  • iOS开发本地推送(iOS10)UNUserNotificationCenter

    https://www.cnblogs.com/xianfeng-zhang/p/8310394.html

    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();
    }
  • 相关阅读:
    [Design]设计模式结构模式
    [Design] 设计模式行为模式
    [Design] Decorator Pattern
    ILIST<T>和LIST<T> 枫
    js 如何调用Windows自带的配色控件 枫
    WML语法全接触 WAP建站语言 枫
    Asp.net模板引擎技术 枫
    smarty内建函数 枫
    NameValueCollection详解 枫
    smarty循环调用问题 枫
  • 原文地址:https://www.cnblogs.com/itlover2013/p/14072628.html
Copyright © 2011-2022 走看看