带附件的iOS 10通知以及更多其他内容

这是关于iOS 10通知的两部分文章的第二部分。 今天,我们将详细介绍如何实现通知附件的技术细节以及iOS 10中引入的许多更复杂的功能。

首先,Apple已将通知处理移至名为UserNotifications的新框架。 请参阅https://medium.com/@prianka.kariat/ios-10-notifications-an-overview-8e88b7f3436b#.1yk3ij8j4了解iOS 10通知中的新功能。

本文将分为以下几部分

  1. 权限处理
  2. 带有附件和通知处理的本地通知
  3. 带有附件的远程通知
  4. 自定义通知的UI

1.权限处理

为了使您的应用能够将通知发送到设备,它应该向用户询问权限。 可以使用UserNotifications框架按以下说明进行操作

不同的通知可能具有不同的操作。 如果您可以从应用程序发送短信和电子邮件会话,则在收到每种消息时必须响应的动作将有所不同。 因此,我们有通知类别。 稍后您将了解到,当您想为不同的通知实现自定义界面时,这些类别也很重要。

UNUserNotificationCenterDelegate

如果用户在取消通知或单击操作按钮后打开应用程序,则您的应用程序应实现此委托以在前台接收通知并进行任何处理。

我有一个可以删除通知的按钮。 我将仅在用户使用“发送”按钮发送通知后启用该按钮。

我们有一个文本字段,可让用户输入通知的正文。 我们仅发送带有单个标识符的通知。 因此,当收到新通知时,它将更新现有通知,而不会使通知中心混乱。

我们为通知触发器指定了10秒的间隔。 如果用户选择在发送通知之前选择发送带有修改主体的通知,则通知中心安排的旧通知将被更新。

删除通知

您可以删除传递的通知以及应用程序发送的未决通知。

附件应该很小!

使附件保持最小尺寸,尤其是在下载内容时。 短时间间隔后,操作系统将终止服务扩展。 因此,您必须确保在分配的时间之前完成处理。

我们将向用户显示食谱供稿,以作为通知。

此通知将包括以下部分。

  1. 食谱标题
  2. 字幕 -谁张贴了食谱
  3. 正文 -食谱的简短说明
  4. 视频附件 –显示配方过程

因此,当前的工作是将视频附加到服务扩展中的通知上。

您的服务扩展名有两个文件Info.plistNotificationService.swift

您将在NotificationService中获得一些样板代码。 不过,让我们编写用于下载视频和设置通知内容的代码。

在此之前,只需确保要发送的有效负载如下。

4.自定义通知的UI

上面交付给用户的UI是带有视频附件的通知的默认UI。 iOS 10添加了自定义此UI的功能。

现在,自定义通知UI时有些事情看起来是不可能的。

  1. 动画。
  2. 它不接收任何触摸。

如果需要动画,则可以将gif替代为您尝试模仿的一些基本动画。

要执行某些必须由用户启动的操作,可以使用通知操作。

但除此之外,它是一个可以嵌入任何视图的简单视图控制器。 要自定义通知界面,您需要Notification Content Extension

创建内容扩展后,您将获得MainInterface.storyboardNotificationViewController.swiftInfo.plist

Info.plist应该指出您要自定义的通知界面属于哪个类别。

UNNotificationExtensionCategory —指定我们的通知内容扩展所属的类别。 仅当传递的通知属于此处指定的类别时,内容扩展名才会被调用。

UNNotificationExtensionDefaultContentHidden —在自定义UI下方显示了由标题,字幕,正文组成的默认内容。 如果您已经在自定义用户界面中显示这些内容,则可以在此处将其隐藏。

UNNotificationExtensionContentSizeRatio —指定通知的大小。 如果为1,则宽度和高度将相同。 您可以使用preferredContentSizeautolayout约束来覆盖它。

MainInterface.storyboard中 ,拖动必要的元素,并将出口连接到NotificationViewController

与其他任何视图控制器一样, NotificationViewController具有viewDidLoad() ,可以在其中进行任何填充。

NotificationViewController应该扩展UNNotificationContentExtension,以便它可以基于作为通知一部分接收的内容填充通知中的内容。

通知到达时将调用func didReceive(UNNotification) 。 这是应该填充您的内容的地方。

我们有标题,副标题和描述标签,分别包含标题副标题和通知正文

我们已经使用通知服务扩展程序附加了视频。 因此,该视频将作为bestAttemptContent的附件之一提供

我有一个VideoPlayer类,该类封装了在给定视图中设置AVPlayer并播放视频的所有操作。 这是通过上述方法完成的。

要设置视频播放器,请在源代码中使用VideoPlayer类,然后为要播放的视频指定本地URL。 然后调用setUpPlayerInView(view: UIView)play()函数。

不要忘记在类检查器中将用于播放的视图的类更改为PlayerView

如果您还记得的话,对于“食谱”类别,我们指定了两个动作“喜欢”“评论” 。 对于评论操作,将显示文本字段。

要在用户单击其中一项操作时执行任何功能,请使用以下UNNotificationContentExtension方法。

一旦显示并关闭了文本字段,我们就可以简单地取消该通知。

完成处理程序采用单个类型的参数

UNNotificationContentExtensionResponseOption。

在这里,我们只是选择关闭通知。 如果您希望对操作进行任何应用内处理,则可以选择不关闭通知或将操作转发给应用。 你可以在这里参考更多。

总结了我们的教程,它解释了iOS 10中处理通知的不同方法。请给我您的宝贵建议。 请随时查看源代码

PS: 休斯顿

我使用休斯顿发送远程通知。 大多数第三方远程通知服务都没有提供将它们引入到apns有效负载中的那些额外密钥添加的规定。 您可以简单地下载houston并修改Ruby的基本知识就可以修改notification.rb文件,以合并所需的密钥。

参考文献

通知简介

进阶通知

用户通知| Apple开发人员文档
UserNotifications框架(UserNotifications.framework)支持本地和远程的交付和处理。