iOS開發本地推送(iOS10)UNUserNotificationCenter

來源:互聯網
上載者:User

標籤:完成   產生   alert   link   nbsp   設定   第一步   ima   options   

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

 

iOS開發本地推送(iOS10)UNUserNotificationCenter

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.