使用通知内容应用扩展程序来自定义 iOS 应用的通知提醒的外观。编程
框架数组
目录网络
当 iOS 设备收到包含提醒的通知时,系统将分两个阶段显示提醒内容。一开始的时候,它会显示带有标题,副标题和来自通知的两到四行正文文本的缩写的横幅。若是用户按下横幅,iOS 会显示完整的通知界面,包括任何与通知相关的操做。系统为缩略横幅提供界面,但你可使用通知内容应用扩展程序自定义完整界面。app
通知内容应用扩展管理能够显示你的自定义通知界面的视图控制器。该视图控制器能够补充或替换你的通知的默认系统界面。你可使用你的视图控制器来:框架
自定义各项的位置,包括提醒的标题、副标题和正文。iview
用不一样的字体或样式替换界面元素。ide
显示特定于应用的数据(例如,存储在通知有效内容的特定键中的数据。)布局
包含自定义图片或品牌。字体
应用扩展必须使用现有的数据来配置其视图控制器,例如通知的内容和应用扩展包中存在的文件。若是使用应用程序组在应用和扩展之间共享数据,那么还可使用在应用程序组中的任何文件。为了确保可以及时提交通知,须要尽量早地布局视图。请不要执行任何长期运行的任务,好比尝试经过网络检索数据。
注意: 通知内容附加应用信息仅支持 iOS 应用。有关如何自定义 watchOS 中的通知外观的信息,请参见 watchOS 的应用程序编程指南.
向 iOS 应用添加通知内容应用程序
在 Xcode 选择 File > New > Target
。
从 iOS 应用扩展中选择通知内容扩展。
点击 Next
。
命名。
点击 Finish
。
注意: 你能够向项目同时添加多个通知内容应用扩展,但每一个扩展都必须支持一组惟一的通知类别。你能够在其
Info.plist
文件中指定应用扩展的类别,如声明支持的通知类型中所述。
Xcode 提供的模板包含一个 storyboard
和一个视图控制器供你配置。经过向视图控制器添加视图来构建自定义通知界面。例如,使用 label
显示通知的标题,副标题和正文。你还能够添加显示非交互式内容的 ImageView
和 View
。你无需为视图提供任何初始内容。
你能够在 iOS 12 及更高的版本中添加交互式控件(例如按钮或开关)。有关更多信息,请参阅支持交互式控件。
重要提醒: 千万不要将其余视图控制器添加到你的应用扩展或
storyboard
文件。你的应用扩展必须只包含一个视图控制器。
你可使用视图控制器的 didReceiveNotification:
方法来更新其 label
和其余视图。通知的有效内容中包含了配置视图控制器时所须要使用的数据。你还可使用应用扩展中的其余文件的数据。列表 1 展现了这个方法的一个版本,它从通知内容中检索标题和正文,并将字符串赋给两个 UILabel
控件,这些控件会做为输出存储在视图控制器上。
列表 1
在运行时配置通知接口:
func didReceive(_ notification: UNNotification) {
self.bodyText?.text = notification.request.content.body
self.headlineText?.text = notification.request.content.title
}
复制代码
若是在视图控制器已经可见的状况下,收到第二次通知,那么系统会再次使用新的通知内容来调用 didReceiveNotification:
方法。
你须要指定通知内容的应用扩展为其提供界面的通知类型。当它收到通知时,系统会将通知的类别值(类型)与你的应用中任何通知内容应用扩展的声明类别进行匹配。若是找到匹配项,系统将加载相应的应用程序扩展。
在通知内容应用扩展的 Info.plist
文件中,使用你的扩展所支持的通知的类别字符串来配置 UNNotificationExtensionCategory
键。类别字符串是你从 iOS 应用注册的 UNNotificationCategory
对象中包含的标识符。你可使用这些字符串来区分应用能够接收的通知类型。例如,能够在任何指定收到新会议邀请的通知中包含字符串 MEETING_INVITE
。标识符字符串会区分大小写。
图 2 的Info.plist
文件中显示了两种不一样通知类型的通知内容应用扩展。因为它支持两种类型,UNNotificationExtensionCategory
键的值由一个数组组成,其中字符串为 GENERAL
和 PLANE_AVAILABLE
。若是收到任何一种类型的通知,系统都将显示来自此通知内容应用扩展的界面。
图 2
配置通知内容应用扩展的 Info.plist
文件
注意
UNNotificationExtensionClass
键的值默认是一个字符串,它容许你的通知内容应用扩展只支持一种通知类型。若要支持多种类型,请将字符串类型更改成字符串数组。
对于本地通知,请将其类别字符串放入 UNMutableNotificationContent
对象的categoryIdentifier
属性中。对于远程通知,将字符串放入 JSON 的 category
键中。有关声明应用程序的通知类型的信息,请参阅声明可操做的通知类型。
有关 Info.plist
文件中键的更多信息,请参阅 UNNotificationContentExtension
。
系统会在每一个通知中显示一些默认信息,包括自定义界面的信息。系统始终显示包含应用名称和图标。系统还会显示带有标题,副标题和通知正文的界面,但若是你愿意,能够隐藏该界面的这一部分。
例如,若是你自定义的界面显示来相同的信息,则可能会隐藏默认通知界面。图 3 说明了包含和不包含默认内容的通知界面的布局。
图 3
通知界面的布局
若要删除默认系统内容,请将 UNNotificationExtensionDefaultContentHidden
键添加到扩展的 Info.plist
文件中,并将该键的值设置为 true
。有关此键的更多信息,请参见 UNNotificationContentExtension
。
为了支持从自定义通知接口播放音频或视频,请实现如下操做:
在视图控制器的 mediaPlayPauseButtonType
属性中,返回所需的按钮类型。
在视图控制器的 mediaPlayPauseButtonFrame
属性中,返回所需的按钮大小。
在 mediaPlay
方法中,开始播放媒体文件。
在 mediaPause
方法中,中止播放媒体文件。
系统为您绘制媒体按钮,而且处理全部用户交互。当按下按钮时,它会调用 mediaPlay
和 mediaPause
方法,这样一来,你就能够控制开始和中止播放了。
若要以编程方式来启动或中止播放媒体文件,请调用当前的 NSExtensionContext
对象的 mediaPlayingStarted
和 mediaPlayingPaused
方法。使用视图控制器的 extensionContext
属性来访问扩展上下文。
在 iOS 12及更高版本中,你能够在自定义通知中启用用户交互。你能够将交互式控件(如按钮和开关)添加到自定义界面中。
若要启用用户交互:
打开你的通知内容扩展的 info.plist
文件。
将 UNNotificationExtensionUserInteractionEnabled
键添加到你的扩展属性中。给它一个布尔值,设置为 YES
。
图 4 展现了 info.plist
文件,并启用通知。
图 4
在通知扩展的 info.plist
文件中启用用用交互功能
UNNotificationContentExtension
:为传递本地或远程的通知提供自定义接口的对象。