爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      iOS10通知框架UserNotification理解与应用

      首页 知识中心 云端实践 文章详情页

      iOS10通知框架UserNotification理解与应用

      2024-06-25 09:53:21 阅读次数:45

      iOS10通知框架UserNotification理解与应用

      一、引言

              关于通知,无论与远程Push还是本地通知,以往的iOS系统暴漏给开发者的接口都是十分有限的,开发者只能对标题和内容进行简单的定义,至于UI展示和用户交互行为相关的部分,开发者开发起来都十分困难。至于本地通知,iOS10之前采用的是UILocationNotification类,远程通知有苹果服务器进行转发,本地通知和远程通知其回调的处理都是通过AppDelegate中的几个回调方法来完成。iOS10系统中,通知功能的增强是一大优化之处,iOS10中将通知功能整合成了一个框架UserNotification,其结构十分类似于iOS8中的UIWebView向WebKit框架整合的思路。并且UserNotification相比之前的通知功能更加强大,主要表现在如下几点:

      1.通知处理代码可以从AppDelegate中剥离。

      2.通知的注册,设置,处理更加结构化,更易于模块化开发。

      3.UserNotification支持自定义通知音效和启动图。

      4.UserNotification支持向通知内容中添加媒体附件,例如音频,视频。

      5.UserNotification支持开发者定义多套通知模板。

      6.UserNotification支持完全自定义的通知界面。

      7.UserNotification支持自定义通知中的用户交互按钮。

      8.通知的触发更加容易管理。

      从上面列举的几点就可以看出,iOS10中的UsreNotification真的是一个大的改进,温故而知新

      二、UserNotification概览

              学习一个新的框架或知识模块时,宏观上了解其体系,大体上掌握其结构是十分必要的,这更有利于我们对这个框架或模块的整体把握与理解。UserNotification框架中拆分定义了许多类、枚举和结构体,其中还定义了许多常量,类与类之间虽然关系复杂,但脉络十分清晰,把握住主线,层层分析,边很容易理解和应用UserNotification框架。

              下图中列举了UserNotification框架中所有核心的类:

      iOS10通知框架UserNotification理解与应用

      如图中关系所示,UserNotification框架中的核心类列举如下:

      UNNotificationCenter:通知管理中心,单例,通知的注册,接收通知后的回调处理等,是UserNotification框架的核心。

      UNNotification:通知对象,其中封装了通知请求。

      UNNotificationSettings:通知相关设置。

      UNNotificationCategory:通知模板。

      UNNotificationAction:用于定义通知模板中的用户交互行为。

      UNNotificationRequest:注册通知请求,其中定义了通知的内容和触发方式。

      UNNotificationResponse:接收到通知后的回执。

      UNNotificationContent:通知的具体内容。

      UNNotificationTrigger:通知的触发器,由其子类具体定义。

      UNNotificationAttachment:通知附件类,为通知内容添加媒体附件。

      UNNotificationSound:定义通知音效。

      UNPushNotificationTrigger:远程通知的触发器,UNNotificationTrigger子类。

      UNTimeInervalNotificationTrigger:计时通知的触发器,UNNotificationTrigger子类。

      UNCalendarNotificationTrigger:周期通知的触发器,UNNotificationTrigger子类。

      UNLocationNotificationTrigger:地域通知的触发器,UNNotificationTrigger子类。

      UNNotificationCenterDelegate:协议,其中方法用于监听通知状态。

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

              要在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) {

      }];

      效果如下面图示:

      iOS10通知框架UserNotification理解与应用

      iOS10通知框架UserNotification理解与应用

      四、通知音效类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) {

      }];

      效果如下图:

      iOS10通知框架UserNotification理解与应用

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

      iOS10通知框架UserNotification理解与应用

      创建通知内容附件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);

      七、定义通知模板UNNotificationCategory

              聊天类软件在iOS系统中,常常采用后台推送的方式推送新消息,用户可以在不进入应用程序的情况下,直接在左面回复通知推送过来的信息,这种功能就是通过UNNotificationCategory模板与UNNotificationAction用户活动来实现的。关于文本回复框,UserNotification框架中提供了UNTextInputNotificationAction类,其是UNNotificationAction的子类。示例代码如下:

          //创建用户活动
      /*
      options参数可选如下:
      //需要在解开锁屏下使用
      UNNotificationActionOptionAuthenticationRequired
      //是否指示有破坏性
      UNNotificationActionOptionDestructive
      //是否允许活动在后台启动app
      UNNotificationActionOptionForeground
      //无设置
      UNNotificationActionOptionNone
      */
      UNTextInputNotificationAction * action = [UNTextInputNotificationAction actionWithIdentifier:@"action" title:@"回复" options:UNNotificationActionOptionAuthenticationRequired textInputButtonTitle:@"活动" textInputPlaceholder:@"请输入回复内容"];
      //创建通知模板
      UNNotificationCategory * category = [UNNotificationCategory categoryWithIdentifier:@"myNotificationCategoryText" actions:@[action] intentIdentifiers:@[] options:UNNotificationCategoryOptionCustomDismissAction];
      UNMutableNotificationContent * content = [UNMutableNotificationContent new];
      content.badge = @1;
      content.body = @"这是iOS10的新通知内容:普通的iOS通知";
      //默认的通知提示音
      content.sound = [UNNotificationSound defaultSound];
      content.subtitle = @"这里是副标题";
      content.title = @"这里是通知的标题";
      //设置通知内容对应的模板 需要注意 这里的值要与对应模板id一致
      content.categoryIdentifier = @"myNotificationCategoryText";
      //设置5S之后执行
      UNTimeIntervalNotificationTrigger * trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:5 repeats:NO];
      [[UNUserNotificationCenter currentNotificationCenter] setNotificationCategories:[NSSet setWithObjects:category, nil]];
      UNNotificationRequest * request = [UNNotificationRequest requestWithIdentifier:@"NotificationDefaultText" content:content trigger:trigger];

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

      }];

      需要注意,要使用模板,通知内容UNNotificationContent的categoryIdentifier要与UNNotificationCategory的id一致。效果如下:

      iOS10通知框架UserNotification理解与应用

      UNNotificationAction * action = [UNNotificationAction actionWithIdentifier:@"action" title:@"活动标题1" options:UNNotificationActionOptionNone];
      UNNotificationAction * action2 = [UNNotificationAction actionWithIdentifier:@"action" title:@"活动标题2" options:UNNotificationActionOptionNone];
      UNNotificationAction * action3 = [UNNotificationAction actionWithIdentifier:@"action" title:@"活动标题3" options:UNNotificationActionOptionNone];
      UNNotificationAction * action4 = [UNNotificationAction actionWithIdentifier:@"action" title:@"活动标题4" options:UNNotificationActionOptionNone];
      UNNotificationCategory * category = [UNNotificationCategory categoryWithIdentifier:@"myNotificationCategoryBtn" actions:@[action,action2,action3,action4] intentIdentifiers:@[] options:UNNotificationCategoryOptionCustomDismissAction];
      UNMutableNotificationContent * content = [UNMutableNotificationContent new];
      content.badge = @1;
      content.body = @"这是iOS10的新通知内容:普通的iOS通知";
      //默认的通知提示音
      content.sound = [UNNotificationSound defaultSound];
      content.subtitle = @"这里是副标题";
      content.title = @"这里是通知的标题";
      content.categoryIdentifier = @"myNotificationCategoryBtn";
      //设置5S之后执行
      UNTimeIntervalNotificationTrigger * trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:5 repeats:NO];
      UNNotificationRequest * request = [UNNotificationRequest requestWithIdentifier:@"NotificationDefault" content:content trigger:trigger];
      [[UNUserNotificationCenter currentNotificationCenter] setNotificationCategories:[NSSet setWithObjects:category, nil]];
      [[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {

      }];

      需要注意,系统模板最多支持添加4个用户交互按钮,如下图:

      iOS10通知框架UserNotification理解与应用

      八、自定义通知模板UI

              通过前边的介绍,我们发现通过UserNotification框架开发者已经可以完成许多从来很难实现的效果。然而这都不是UserNotification框架最强大的地方,UserNotification框架最强大的地方在于其可以完全自定义通知的UI界面。

              完全自定义通知界面是通过iOS扩展来实现的,首先创建一个新的target,如下图:

      iOS10通知框架UserNotification理解与应用

      创建完成后,会发现工程中多了一个Notification Content的扩展,其中自带一个storyboard文件和一个NotificationViewController类,开发者可以在storyboard文件或者直接在Controller类中进行自定义界面的编写。

          需要注意,NotificationViewController自动遵守了UNNotificationContentExtension协议,这个协议专门用来处理自定义通知UI的内容展示,其中方法列举如下:

      //接收到通知时会被调用
      /*
      开发者可以从notification对象中拿到附件等内容进行UI刷新
      */
      - (void)didReceiveNotification:(UNNotification *)notification;
      //当用户点击了通知中的用户交互按钮时会被调用
      /*
      response对象中有通知内容相关信息
      在回调block块completion中,开发者可以传入一个UNNotificationContentExtensionResponseOption参数来告诉系统如何处理这次用户活动
      UNNotificationContentExtensionResponseOption枚举中可选值如下:
      typedef NS_ENUM(NSUInteger, UNNotificationContentExtensionResponseOption) {
      //不关闭当前通知界面
      UNNotificationContentExtensionResponseOptionDoNotDismiss,
      //关闭当前通知界面
      UNNotificationContentExtensionResponseOptionDismiss,
      //关闭当前通知界面并将用户活动传递给宿主app处理
      UNNotificationContentExtensionResponseOptionDismissAndForwardAction,
      } __IOS_AVAILABLE(10_0) __TVOS_UNAVAILABLE __WATCHOS_UNAVAILABLE __OSX_UNAVAILABLE;
      */
      - (void)didReceiveNotificationResponse:(UNNotificationResponse *)response completionHandler:(void (^)(UNNotificationContentExtensionResponseOption option))completion;
      /*
      这个属性作为get方法进行实现 这个方法用来返回一个通知界面要显示的媒体按钮
      typedef NS_ENUM(NSUInteger, UNNotificationContentExtensionMediaPlayPauseButtonType) {
      //不显示媒体按钮
      UNNotificationContentExtensionMediaPlayPauseButtonTypeNone,
      //默认的媒体按钮 当点击按钮后 进行播放与暂停的切换 按钮始终显示
      UNNotificationContentExtensionMediaPlayPauseButtonTypeDefault,
      //Overlay风格 当点击按钮后,媒体播放,按钮隐藏 点击媒体后,播放暂停,按钮显示。
      UNNotificationContentExtensionMediaPlayPauseButtonTypeOverlay,
      } __IOS_AVAILABLE(10_0) __TVOS_UNAVAILABLE __WATCHOS_UNAVAILABLE __OSX_UNAVAILABLE;
      */
      @property (nonatomic, readonly, assign) UNNotificationContentExtensionMediaPlayPauseButtonType mediaPlayPauseButtonType;
      //返回媒体按钮的位置
      @property (nonatomic, readonly, assign) CGRect mediaPlayPauseButtonFrame;
      //返回媒体按钮的颜色
      @property (nonatomic, readonly, copy) UIColor *mediaPlayPauseButtonTintColor;
      //点击播放按钮的回调
      - (void)mediaPlay;
      //点击暂停按钮的回调
      - (void)mediaPause;
      //媒体开始播放的回调
      - (void)mediaPlayingStarted __IOS_AVAILABLE(10_0) __TVOS_UNAVAILABLE __WATCHOS_UNAVAILABLE __OSX_UNAVAILABLE;
      //媒体开始暂停的回调
      - (void)mediaPlayingPaused __IOS_AVAILABLE(10_0) __TVOS_UNAVAILABLE __WATCHOS_UNAVAILABLE __OSX_UNAVAILABLE;

      需要注意,自定义的通知界面上虽然可以放按钮,可以放任何UI控件,但是其不能进行用户交互,唯一可以进行用户交互的方式是通过协议中的媒体按钮及其回调方法。

              定义好了通知UI模板,若要进行使用,还需要再Notification Content扩展中的info.plist文件的NSExtension字典的NSExtensionAttributes字典里进行一些配置,正常情况下,开发者需要进行配置的键有3个,分别如下:

      UNNotificationExtensionCategory:设置模板的categoryId,用于与UNNotificationContent对应。

      UNNotificationExtensionInitialContentSizeRatio:设置自定义通知界面的高度与宽度的比,宽度为固定宽度,在不同设备上有差别,开发者需要根据宽度计算出高度进行设置,系统根据这个比值来计算通知界面的高度。

      UNNotificationExtensionDefaultContentHidden:是有隐藏系统默认的通知界面。

      配置info.plist文件如下:

      iOS10通知框架UserNotification理解与应用

      UNNotificationAction * action = [UNNotificationAction actionWithIdentifier:@"action" title:@"活动标题1" options:UNNotificationActionOptionNone];
      //根据id拿到自定义UI的模板
      UNNotificationCategory * category = [UNNotificationCategory categoryWithIdentifier:@"myNotificationCategoryH" actions:@[action] intentIdentifiers:@[] options:UNNotificationCategoryOptionCustomDismissAction];
      UNMutableNotificationContent * content = [UNMutableNotificationContent new];
      content.badge = @1;
      content.body = @"这是iOS10的新通知内容:普通的iOS通知";
      //默认的通知提示音
      content.sound = [UNNotificationSound defaultSound];
      content.subtitle = @"这里是副标题";
      content.title = @"这里是通知的标题";
      content.categoryIdentifier = @"myNotificationCategoryH";
      //设置5S之后执行
      UNTimeIntervalNotificationTrigger * trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:5 repeats:NO];
      UNNotificationRequest * request = [UNNotificationRequest requestWithIdentifier:@"NotificationDefaultCustomUIH" content:content trigger:trigger];
      [[UNUserNotificationCenter currentNotificationCenter] setNotificationCategories:[NSSet setWithObjects:category, nil]];
      [[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {

      }];

      效果如下图:

      iOS10通知框架UserNotification理解与应用

      九、通知回调的处理

              UserNotification框架对于通知的回调处理,是通过UNUserNotificationCenterDelegate协议来实现的,这个协议中有两个方法,如下:

      /*
      这个方法在应用在前台,并且将要弹出通知时被调用,后台状态下弹通知不会调用这个方法
      这个方法中的block块completionHandler()可以传入一个UNNotificationPresentationOptions类型的枚举
      有个这个参数,开发者可以设置在前台状态下,依然可以弹出通知消息,枚举如下:
      typedef NS_OPTIONS(NSUInteger, UNNotificationPresentationOptions) {
      //只修改app图标的消息数
      UNNotificationPresentationOptionBadge = (1 << 0),
      //只提示通知音效
      UNNotificationPresentationOptionSound = (1 << 1),
      //只弹出通知框
      UNNotificationPresentationOptionAlert = (1 << 2),
      } __IOS_AVAILABLE(10.0) __TVOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0);
      //什么都不做
      static const UNNotificationPresentationOptions UNNotificationPresentationOptionNone
      */
      - (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler __IOS_AVAILABLE(10.0) __TVOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0);
      /*
      这个方法当接收到通知后,用户点击通知激活app时被调用,无论前台还是后台
      */
      - (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler __IOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0) __TVOS_PROHIBITED;

      十、UserNotification框架中其他零散知识

              前面所介绍的内容基本涵盖了UserNotification框架中所有的内容,在以后的应用开发中,开发者可以在通知方面发挥更大的想象力与创造力,给用户更加友好的体验。除了前边所介绍过的核心内容外,UserNotification框架中还有一些零散的类、枚举等。

      1.错误码描述

      typedef NS_ENUM(NSInteger, UNErrorCode) {
      //通知不被允许
      UNErrorCodeNotificationsNotAllowed = 1,

      //附件无效url
      UNErrorCodeAttachmentInvalidURL = 100,
      //附件类型错误
      UNErrorCodeAttachmentUnrecognizedType,
      //附件大小错误
      UNErrorCodeAttachmentInvalidFileSize,
      //附件数据错误
      UNErrorCodeAttachmentNotInDataStore,
      UNErrorCodeAttachmentMoveIntoDataStoreFailed,
      UNErrorCodeAttachmentCorrupt,

      //时间无效
      UNErrorCodeNotificationInvalidNoDate = 1400,
      //无内容
      UNErrorCodeNotificationInvalidNoContent,
      } __IOS_AVAILABLE(10.0) __TVOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0);

      2.UNNotification类

      @interface UNNotification : NSObject <NSCopying, NSSecureCoding>
      //触发的时间
      @property (nonatomic, readonly, copy) NSDate *date;
      //内置的通知请求对象
      @property (nonatomic, readonly, copy) UNNotificationRequest *request;

      - (instancetype)init NS_UNAVAILABLE;

      @end

      3.UNNotificationSettings类

              UNNotificationSettings类主要用来获取与通知相关的信息。

      @interface UNNotificationSettings : NSObject <NSCopying, NSSecureCoding>
      //用户权限状态
      @property (NS_NONATOMIC_IOSONLY, readonly) UNAuthorizationStatus authorizationStatus;
      //音效设置
      @property (NS_NONATOMIC_IOSONLY, readonly) UNNotificationSetting soundSetting __TVOS_PROHIBITED;
      //图标提醒设置
      @property (NS_NONATOMIC_IOSONLY, readonly) UNNotificationSetting badgeSetting __WATCHOS_PROHIBITED;
      //提醒框设置
      @property (NS_NONATOMIC_IOSONLY, readonly) UNNotificationSetting alertSetting __TVOS_PROHIBITED;
      //通知中心设置
      @property (NS_NONATOMIC_IOSONLY, readonly) UNNotificationSetting notificationCenterSetting __TVOS_PROHIBITED;
      //锁屏设置
      @property (NS_NONATOMIC_IOSONLY, readonly) UNNotificationSetting lockScreenSetting __TVOS_PROHIBITED __WATCHOS_PROHIBITED;
      //车载设备设置
      @property (NS_NONATOMIC_IOSONLY, readonly) UNNotificationSetting carPlaySetting __TVOS_PROHIBITED __WATCHOS_PROHIBITED;
      //提醒框风格
      @property (NS_NONATOMIC_IOSONLY, readonly) UNAlertStyle alertStyle __TVOS_PROHIBITED __WATCHOS_PROHIBITED;

      @end

      UNNotificationSetting枚举如下:

      typedef NS_ENUM(NSInteger, UNNotificationSetting) {
      //不支持
      UNNotificationSettingNotSupported = 0,

      //不可用
      UNNotificationSettingDisabled,

      //可用
      UNNotificationSettingEnabled,
      }

      UNAuthorizationStatus枚举如下:

      typedef NS_ENUM(NSInteger, UNAuthorizationStatus) {
      //为做选择
      UNAuthorizationStatusNotDetermined = 0,

      // 用户拒绝
      UNAuthorizationStatusDenied,

      // 用户允许
      UNAuthorizationStatusAuthorized
      }

      UNAlertStyle枚举如下:

      typedef NS_ENUM(NSInteger, UNAlertStyle) {
      //无
      UNAlertStyleNone = 0,
      //顶部Banner样式
      UNAlertStyleBanner,
      //警告框样式
      UNAlertStyleAlert,
      }
      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/u_11643026/4282744,作者:珲少,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:前端框架Vue------>第一天学习、Vue学习的路径、Vue官网(1)

      下一篇:Nginx虚拟主机配置实践之nginx访问同一个地址方法(二)

      相关文章

      2024-06-25 09:53:21

      iOS10语音识别框架SpeechFramework应用

      iOS10系统是一个较有突破性的系统,其在Message,Notification等方面都开放了很多实用性的开发接口。

      2024-06-25 09:53:21
      2024-06-25 09:53:21

      iOS10为用户添加触摸反馈

      在iOS10中,UIKit框架中新增加了3个类,UIImpactFeedbackGenerator类、UINotificationFeedbackGenerator类与UISelectionFeedbackGenerator类。

      2024-06-25 09:53:21
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5243151

      查看更多

      最新文章

      iOS10语音识别框架SpeechFramework应用

      2024-06-25 09:53:21

      查看更多

      热门文章

      iOS10语音识别框架SpeechFramework应用

      2024-06-25 09:53:21

      查看更多

      热门标签

      客户端 实践 基础知识 Java 服务器 java 数据库 框架 python 服务端 学习 代码 简单 javascript 编程
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      iOS10语音识别框架SpeechFramework应用

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号