iOS 12 通知新特性 —— 自定义 App 通知的外观

自定义 App 通知的外观

原文连接:Customizing the Appearance of Notificationshtml

使用通知内容应用扩展程序来自定义 iOS 应用的通知提醒的外观。编程

框架数组

  • UserNotificationsUI

目录网络

概述

当 iOS 设备收到包含提醒的通知时,系统将分两个阶段显示提醒内容。一开始的时候,它会显示带有标题,副标题和来自通知的两到四行正文文本的缩写的横幅。若是用户按下横幅,iOS 会显示完整的通知界面,包括任何与通知相关的操做。系统为缩略横幅提供界面,但你可使用通知内容应用扩展程序自定义完整界面。app

Screenshots showing the abbreviated banner and the full notification.

通知内容应用扩展管理能够显示你的自定义通知界面的视图控制器。该视图控制器能够补充或替换你的通知的默认系统界面。你可使用你的视图控制器来:框架

  • 自定义各项的位置,包括提醒的标题、副标题和正文。iview

  • 用不一样的字体或样式替换界面元素。ide

  • 显示特定于应用的数据(例如,存储在通知有效内容的特定键中的数据。)布局

  • 包含自定义图片或品牌。字体

应用扩展必须使用现有的数据来配置其视图控制器,例如通知的内容和应用扩展包中存在的文件。若是使用应用程序组在应用和扩展之间共享数据,那么还可使用在应用程序组中的任何文件。为了确保可以及时提交通知,须要尽量早地布局视图。请不要执行任何长期运行的任务,好比尝试经过网络检索数据。

注意: 通知内容附加应用信息仅支持 iOS 应用。有关如何自定义 watchOS 中的通知外观的信息,请参见 watchOS 的应用程序编程指南.

将通知内容应用扩展添加到你本身的项目

向 iOS 应用添加通知内容应用程序

  1. 在 Xcode 选择 File > New > Target

  2. 从 iOS 应用扩展中选择通知内容扩展。

  3. 点击 Next

  4. 命名。

  5. 点击 Finish

注意: 你能够向项目同时添加多个通知内容应用扩展,但每一个扩展都必须支持一组惟一的通知类别。你能够在其 Info.plist 文件中指定应用扩展的类别,如声明支持的通知类型中所述。

将视图添加到视图控制器中

Xcode 提供的模板包含一个 storyboard 和一个视图控制器供你配置。经过向视图控制器添加视图来构建自定义通知界面。例如,使用 label 显示通知的标题,副标题和正文。你还能够添加显示非交互式内容的 ImageViewView。你无需为视图提供任何初始内容。

你能够在 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。标识符字符串会区分大小写。

图 2Info.plist 文件中显示了两种不一样通知类型的通知内容应用扩展。因为它支持两种类型,UNNotificationExtensionCategory 键的值由一个数组组成,其中字符串为 GENERALPLANE_AVAILABLE。若是收到任何一种类型的通知,系统都将显示来自此通知内容应用扩展的界面。

图 2

配置通知内容应用扩展的 Info.plist文件

A screenshot of the plist editor, showing the UNNotificaitonExtensionCategory for two notification types.

注意 UNNotificationExtensionClass 键的值默认是一个字符串,它容许你的通知内容应用扩展只支持一种通知类型。若要支持多种类型,请将字符串类型更改成字符串数组。

对于本地通知,请将其类别字符串放入 UNMutableNotificationContent 对象的categoryIdentifier 属性中。对于远程通知,将字符串放入 JSON 的 category 键中。有关声明应用程序的通知类型的信息,请参阅声明可操做的通知类型

有关 Info.plist 文件中键的更多信息,请参阅 UNNotificationContentExtension

隐藏默认通知界面

系统会在每一个通知中显示一些默认信息,包括自定义界面的信息。系统始终显示包含应用名称和图标。系统还会显示带有标题,副标题和通知正文的界面,但若是你愿意,能够隐藏该界面的这一部分。

例如,若是你自定义的界面显示来相同的信息,则可能会隐藏默认通知界面。图 3 说明了包含和不包含默认内容的通知界面的布局。

图 3

通知界面的布局

The default interface displays a header, followed by your custom content, followed by the default system content. If you hide the default system content, only the header and your custom interface are displayed.

若要删除默认系统内容,请将 UNNotificationExtensionDefaultContentHidden 键添加到扩展的 Info.plist 文件中,并将该键的值设置为 true。有关此键的更多信息,请参见 UNNotificationContentExtension

将媒体融入到你的界面中

为了支持从自定义通知接口播放音频或视频,请实现如下操做:

系统为您绘制媒体按钮,而且处理全部用户交互。当按下按钮时,它会调用 mediaPlaymediaPause 方法,这样一来,你就能够控制开始和中止播放了。

若要以编程方式来启动或中止播放媒体文件,请调用当前的 NSExtensionContext 对象的 mediaPlayingStartedmediaPlayingPaused 方法。使用视图控制器的 extensionContext 属性来访问扩展上下文。

支持交互式控件

在 iOS 12及更高版本中,你能够在自定义通知中启用用户交互。你能够将交互式控件(如按钮和开关)添加到自定义界面中。

若要启用用户交互:

  1. 打开你的通知内容扩展的 info.plist 文件。

  2. UNNotificationExtensionUserInteractionEnabled 键添加到你的扩展属性中。给它一个布尔值,设置为 YES

图 4 展现了 info.plist 文件,并启用通知。

图 4

在通知扩展的 info.plist 文件中启用用用交互功能

A screenshot of the plist editor, showing the UNNotificationExtensionUserInteractionEnabled key added to the NSExtensionAttributes dictionary.

了解更多

通知内容应用扩展

UNNotificationContentExtension :为传递本地或远程的通知提供自定义接口的对象。

相关文章
相关标签/搜索