iOS10通知框架UserNotification理解与应用(二)

简介: iOS10通知框架UserNotification理解与应用

三、进行通知用户权限申请与创建普通的本地通知


       要在iOS系统中使用通知,必须获取到用户权限,UserNotification框架中申请通知用户权限需要通过UNNotificationCenter来完成,示例如下:


//进行用户权限的申请

[[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:UNAuthorizationOptionBadge|UNAuthorizationOptionSound|UNAuthorizationOptionAlert|UNAuthorizationOptionCarPlay completionHandler:^(BOOL granted, NSError * _Nullable error) {

     //在block中会传入布尔值granted,表示用户是否同意

     if (granted) {

           //如果用户权限申请成功,设置通知中心的代理

           [UNUserNotificationCenter currentNotificationCenter].delegate = self;

     }

}];

申请用户权限的方法中需要传入一个权限内容的参数,其枚举定义如下:


typedef NS_OPTIONS(NSUInteger, UNAuthorizationOptions) {

   //允许更新app上的通知数字

   UNAuthorizationOptionBadge   = (1 << 0),

   //允许通知声音

   UNAuthorizationOptionSound   = (1 << 1),

   //允许通知弹出警告

   UNAuthorizationOptionAlert   = (1 << 2),

   //允许车载设备接收通知

   UNAuthorizationOptionCarPlay = (1 << 3),

};

获取到用户权限后,使用UserNotification创建普通的通知,示例代码如下:


   //通知内容类

   UNMutableNotificationContent * content = [UNMutableNotificationContent new];

   //设置通知请求发送时 app图标上显示的数字

   content.badge = @2;

   //设置通知的内容

   content.body = @"这是iOS10的新通知内容:普通的iOS通知";

   //默认的通知提示音

   content.sound = [UNNotificationSound defaultSound];

   //设置通知的副标题

   content.subtitle = @"这里是副标题";

   //设置通知的标题

   content.title = @"这里是通知的标题";

   //设置从通知激活app时的launchImage图片

   content.launchImageName = @"lun";

   //设置5S之后执行

   UNTimeIntervalNotificationTrigger * trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:5 repeats:NO];

   UNNotificationRequest * request = [UNNotificationRequest requestWithIdentifier:@"NotificationDefault" content:content trigger:trigger];

   //添加通知请求

   [[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {

     

   }];

效果如下面图示:

image.pngimage.png

           




四、通知音效类UNNotificationSound


       通知可以进行自定义的音效设置,其中方法如下:


//系统默认的音效

+ (instancetype)defaultSound;

//自定义的音频音效

/*

注意,音频文件必须在bundle中或者在Library/Sounds目录下

*/

+ (instancetype)soundNamed:(NSString *)name __WATCHOS_PROHIBITED;

五、通知触发器UNNotificationTrigger


       通知触发器可以理解为定义通知的发送时间,UNNotificationTrigger是触发器的基类,具体的触发器由它的四个子类实现,实际上,开发者在代码中可能会用到的触发器只有三种,UNPushNotificationTrigger远程推送触发器开发者不需要创建使用,远程通知有远程服务器触发,开发者只需要创建与本地通知有关的触发器进行使用。


1.UNTimeIntervalNotificationTrigger


       UNTimeIntervalNotificationTrigger是计时触发器,开发者可以设置其在添加通知请求后一定时间发送。


//创建触发器 在timeInterval秒后触发 可以设置是否循环触发

+ (instancetype)triggerWithTimeInterval:(NSTimeInterval)timeInterval repeats:(BOOL)repeats;

//获取下次触发的时间点

- (nullable NSDate *)nextTriggerDate;

2.UNCalendarNotificationTrigger


       UNCalendarNotificationTrigger是日历触发器,开发者可以设置其在某个时间点触发。


//创建触发器 设置触发时间 可以设置是否循环触发

+ (instancetype)triggerWithDateMatchingComponents:(NSDateComponents *)dateComponents repeats:(BOOL)repeats;

//下一次触发的时间点

- (nullable NSDate *)nextTriggerDate;

3.UNLocationNotificationTrigger


       UNLocationNotificationTrigger是地域触发器,开发者可以设置当用户进入某一区域时触发。


//地域信息

@property (NS_NONATOMIC_IOSONLY, readonly, copy) CLRegion *region;

//创建触发器

+ (instancetype)triggerWithRegion:(CLRegion *)region repeats:(BOOL)repeats __WATCHOS_PROHIBITED;

六、为通知内容添加附件


       附件主要指的是媒体附件,例如图片,音频和视频,为通知内容添加附件需要使用UNNotificationAttachment类。示例代码如下:


   //创建图片附件

   UNNotificationAttachment * attach = [UNNotificationAttachment attachmentWithIdentifier:@"imageAttach" URL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"2" ofType:@"jpg"]] options:nil error:nil];

   UNMutableNotificationContent * content = [UNMutableNotificationContent new];

   //设置附件数组

   content.attachments = @[attach];

   content.badge = @1;

   content.body = @"这是iOS10的新通知内容:普通的iOS通知";

   //默认的通知提示音

   content.sound = [UNNotificationSound defaultSound];

   content.subtitle = @"这里是副标题";

   content.title = @"这里是通知的标题";

   //设置5S之后执行

   UNTimeIntervalNotificationTrigger * trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:5 repeats:NO];

   UNNotificationRequest * request = [UNNotificationRequest requestWithIdentifier:@"NotificationDefaultImage" content:content trigger:trigger];

   [[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {

     

   }];

效果如下图:


     image.pngimage.png        


需要注意,UNNotificationContent的附件数组虽然是一个数组,但是系统的通知模板只能展示其中的第一个附件,设置多个附件也不会有额外的效果,但是如果开发者进行通知模板UI的自定义,则此数组就可以派上用场了。音频附件界面如下:


image.png


需要注意,添加附件的格式和大小都有一定的要求,如下表格所示:

image.png



创建通知内容附件UNNotificationAttachment实例的方法中有一个options配置字典,这个字典中可以进行配置的键值对如下:


//配置附件的类型的键 需要设置为NSString类型的值,如果不设置 则默认从扩展名中推断

extern NSString * const UNNotificationAttachmentOptionsTypeHintKey __IOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0);

//配置是否隐藏缩略图的键 需要配置为NSNumber 0或者1

extern NSString * const UNNotificationAttachmentOptionsThumbnailHiddenKey __IOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0);

//配置使用一个标准的矩形来对缩略图进行裁剪,需要配置为CGRectCreateDictionaryRepresentation(CGRect)创建的矩形引用

extern NSString * const UNNotificationAttachmentOptionsThumbnailClippingRectKey __IOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0);

//使用视频中的某一帧作为缩略图 配置为NSNumber时间

extern NSString * const UNNotificationAttachmentOptionsThumbnailTimeKey __IOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0);


目录
相关文章
|
1月前
|
搜索推荐 数据管理 定位技术
iOS应用开发中有多种主流框架
iOS应用开发中有多种主流框架
182 60
|
1月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
161 4
|
10天前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
95 66
|
2月前
|
设计模式 安全 Swift
探索iOS开发:打造你的第一个天气应用
【9月更文挑战第36天】在这篇文章中,我们将一起踏上iOS开发的旅程,从零开始构建一个简单的天气应用。文章将通过通俗易懂的语言,引导你理解iOS开发的基本概念,掌握Swift语言的核心语法,并逐步实现一个具有实际功能的天气应用。我们将遵循“学中做,做中学”的原则,让理论知识和实践操作紧密结合,确保学习过程既高效又有趣。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你打开一扇通往iOS开发世界的大门。
|
2月前
|
搜索推荐 IDE API
打造个性化天气应用:iOS开发之旅
【9月更文挑战第35天】在这篇文章中,我们将一起踏上iOS开发的旅程,通过创建一个个性化的天气应用来探索Swift编程语言的魅力和iOS平台的强大功能。无论你是编程新手还是希望扩展你的技能集,这个项目都将为你提供实战经验,帮助你理解从构思到实现一个应用的全过程。让我们开始吧,构建你自己的天气应用,探索更多可能!
77 1
|
1月前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
33 2
|
1月前
|
iOS开发 开发者
探索iOS开发中的SwiftUI框架
【10月更文挑战第39天】在苹果的生态系统中,SwiftUI框架以其声明式语法和易用性成为开发者的新宠。本文将深入SwiftUI的核心概念,通过实际案例展示如何利用这一框架快速构建用户界面,并探讨其对iOS应用开发流程的影响。
|
1月前
|
JSON 前端开发 API
探索iOS开发之旅:打造你的第一个天气应用
【10月更文挑战第36天】在这篇文章中,我们将踏上一段激动人心的旅程,一起构建属于我们自己的iOS天气应用。通过这个实战项目,你将学习到如何从零开始搭建一个iOS应用,掌握基本的用户界面设计、网络请求处理以及数据解析等核心技能。无论你是编程新手还是希望扩展你的iOS开发技能,这个项目都将为你提供宝贵的实践经验。准备好了吗?让我们开始吧!
|
1月前
|
Swift iOS开发 UED
如何使用Swift和UIKit在iOS应用中实现自定义按钮动画
本文通过一个具体案例,介绍如何使用Swift和UIKit在iOS应用中实现自定义按钮动画。当用户点击按钮时,按钮将从圆形变为椭圆形,颜色从蓝色渐变到绿色;释放按钮时,动画以相反方式恢复。通过UIView的动画方法和弹簧动画效果,实现平滑自然的过渡。
59 1
|
1月前
|
开发框架 Dart Android开发
安卓与iOS的跨平台开发:Flutter框架深度解析
在移动应用开发的海洋中,Flutter作为一艘灵活的帆船,正引领着开发者们驶向跨平台开发的新纪元。本文将揭开Flutter神秘的面纱,从其架构到核心特性,再到实际应用案例,我们将一同探索这个由谷歌打造的开源UI工具包如何让安卓与iOS应用开发变得更加高效而统一。你将看到,借助Flutter,打造精美、高性能的应用不再是难题,而是变成了一场创造性的旅程。