iOS10 添加本地推送(Local Notification)

    xiaoxiao2021-03-25  102

    转: http://blog.csdn.net/lincsdnnet/article/details/52970747

    iOS10 添加本地推送(Local Notification)

    新的推送注册机制

    [objc]   view plain  copy   #import <UserNotifications/UserNotifications.h>   #import "AppDelegate.h"   @interface AppDelegate ()<UNUserNotificationCenterDelegate>      @end      @implementation AppDelegate      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {       // 使用 UNUserNotificationCenter 来管理通知       UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];       //监听回调事件       center.delegate = self;              //iOS 10 使用以下方法注册,才能得到授权       [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert + UNAuthorizationOptionSound)                             completionHandler:^(BOOL granted, NSError * _Nullable error) {                                 // Enable or disable features based on authorization.                             }];              //获取当前的通知设置,UNNotificationSettings 是只读对象,不能直接修改,只能通过以下方法获取       [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {                  }];       return YES;   }      #pragma mark - UNUserNotificationCenterDelegate   //在展示通知前进行处理,即有机会在展示通知前再修改通知内容。   -(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{       //1. 处理通知              //2. 处理完成后条用 completionHandler ,用于指示在前台显示通知的形式       completionHandler(UNNotificationPresentationOptionAlert);   }   @end  

    推送本地通知

    [objc]   view plain  copy   //使用 UNNotification 本地通知   +(void)registerNotification:(NSInteger )alerTime{              // 使用 UNUserNotificationCenter 来管理通知       UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter];              //需创建一个包含待通知内容的 UNMutableNotificationContent 对象,注意不是 UNNotificationContent ,此对象为不可变对象。       UNMutableNotificationContent* content = [[UNMutableNotificationContent alloc] init];       content.title = [NSString localizedUserNotificationStringForKey:@"Hello!" arguments:nil];       content.body = [NSString localizedUserNotificationStringForKey:@"Hello_message_body"    arguments:nil];       content.sound = [UNNotificationSound defaultSound];              // 在 alertTime 后推送本地推送       UNTimeIntervalNotificationTrigger* trigger = [UNTimeIntervalNotificationTrigger    triggerWithTimeInterval:alerTime repeats:NO];          UNNotificationRequest* request = [UNNotificationRequest requestWithIdentifier:@"FiveSecond"    content:content trigger:trigger];              //添加推送成功后的处理!       [center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {           UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"本地通知" message:@"成功添加推送" preferredStyle:UIAlertControllerStyleAlert];           UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];           [alert addAction:cancelAction];           [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:alert animated:YES completion:nil];       }];   }  

    iOS 10 以前本地推送通知:

    [objc]   view plain  copy   + (void)registerLocalNotificationInOldWay:(NSInteger)alertTime {       // ios8后,需要添加这个注册,才能得到授权       // if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {       // UIUserNotificationType type = UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound;       // UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type       // categories:nil];       // [[UIApplication sharedApplication] registerUserNotificationSettings:settings];       // // 通知重复提示的单位,可以是天、周、月       // }              UILocalNotification *notification = [[UILocalNotification alloc] init];       // 设置触发通知的时间       NSDate *fireDate = [NSDate dateWithTimeIntervalSinceNow:alertTime];       NSLog(@"fireDate=%@",fireDate);              notification.fireDate = fireDate;       // 时区       notification.timeZone = [NSTimeZone defaultTimeZone];       // 设置重复的间隔       notification.repeatInterval = kCFCalendarUnitSecond;              // 通知内容       notification.alertBody =  @"该起床了...";       notification.applicationIconBadgeNumber = 1;       // 通知被触发时播放的声音       notification.soundName = UILocalNotificationDefaultSoundName;       // 通知参数       NSDictionary *userDict = [NSDictionary dictionaryWithObject:@"开始学习iOS开发了" forKey:@"key"];       notification.userInfo = userDict;              // ios8后,需要添加这个注册,才能得到授权       if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {           UIUserNotificationType type =  UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound;           UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type                                                                                    categories:nil];           [[UIApplication sharedApplication] registerUserNotificationSettings:settings];           // 通知重复提示的单位,可以是天、周、月           notification.repeatInterval = NSCalendarUnitDay;       } else {           // 通知重复提示的单位,可以是天、周、月           notification.repeatInterval = NSDayCalendarUnit;       }              // 执行通知注册       [[UIApplication sharedApplication] scheduleLocalNotification:notification];   }  

    效果图

    转载请注明原文地址: https://ju.6miu.com/read-26414.html

    最新回复(0)