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

自定义 App 通知的外观

原文链接:Customizing the Appearance of Notifications

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

框架

  • UserNotificationsUI

目录

概述

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

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

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

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

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

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

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

注意: 通知内容附加应用信息仅支持 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文件

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

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

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

隐藏默认通知界面

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

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

图 3

通知界面的布局

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

将媒体融入到你的界面中

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

系统为您绘制媒体按钮,并且处理所有用户交互。当按下按钮时,它会调用 mediaPlaymediaPause 方法,这样一来,你就可以控制开始和停止播放了。

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

支持交互式控件

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

若要启用用户交互:

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

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

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

图 4

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

了解更多

通知内容应用扩展

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值