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();
    }
  • 相关阅读:
    HDU 4348 To the moon(可持久化线段树)
    HDU 5875 Function 大连网络赛 线段树
    HDU 5877 2016大连网络赛 Weak Pair(树状数组,线段树,动态开点,启发式合并,可持久化线段树)
    HDU 5876 大连网络赛 Sparse Graph
    HDU 5701 中位数计数 百度之星初赛
    CodeForces 708B Recover the String
    Java实现 蓝桥杯 算法提高 套正方形(暴力)
    ASP.NET生成验证码
    ASP.NET生成验证码
    ASP.NET生成验证码
  • 原文地址:https://www.cnblogs.com/itlover2013/p/14072628.html
Copyright © 2011-2022 走看看