前言iOS 10 中废弃了 UILocalNotification ( UIKit Framework ) 这个类,采用了全新的 UserNotifications Framework 来推送通知,从此推送通知也有了自己的标签 UN (这待遇真是没别人了),以及对推送功能的一系列增强改进(两个 extension 和 界面的体验优化),简直是苹果的亲儿子,因此推送这部分功能也成为开发中的重点。
本文主要查看了 iOS 10 的相关文档,整理出了在 iOS 10 下的本地推送通知,由于都是代码,就不多做讲解,直接看代码及注释,有问题留言讨论哦。
新的推送注册机制注册通知( Appdelegate.m ):
#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
推送本地通知//使用 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 以前本地推送通知:
+ (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];}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。