带附件的iOS 10通知以及更多其他内容
这是关于iOS 10通知的两部分文章的第二部分。 今天,我们将详细介绍如何实现通知附件的技术细节以及iOS 10中引入的许多更复杂的功能。
首先,Apple已将通知处理移至名为UserNotifications的新框架。 请参阅https://medium.com/@prianka.kariat/ios-10-notifications-an-overview-8e88b7f3436b#.1yk3ij8j4了解iOS 10通知中的新功能。
本文将分为以下几部分
- 权限处理
- 带有附件和通知处理的本地通知
- 带有附件的远程通知
- 自定义通知的UI
1.权限处理
为了使您的应用能够将通知发送到设备,它应该向用户询问权限。 可以使用UserNotifications框架按以下说明进行操作 。
不同的通知可能具有不同的操作。 如果您可以从应用程序发送短信和电子邮件会话,则在收到每种消息时必须响应的动作将有所不同。 因此,我们有通知类别。 稍后您将了解到,当您想为不同的通知实现自定义界面时,这些类别也很重要。
UNUserNotificationCenterDelegate
如果用户在取消通知或单击操作按钮后打开应用程序,则您的应用程序应实现此委托以在前台接收通知并进行任何处理。
我有一个可以删除通知的按钮。 我将仅在用户使用“发送”按钮发送通知后启用该按钮。
我们有一个文本字段,可让用户输入通知的正文。 我们仅发送带有单个标识符的通知。 因此,当收到新通知时,它将更新现有通知,而不会使通知中心混乱。
我们为通知触发器指定了10秒的间隔。 如果用户选择在发送通知之前选择发送带有修改主体的通知,则通知中心安排的旧通知将被更新。
删除通知
您可以删除传递的通知以及应用程序发送的未决通知。
附件应该很小!
使附件保持最小尺寸,尤其是在下载内容时。 短时间间隔后,操作系统将终止服务扩展。 因此,您必须确保在分配的时间之前完成处理。
我们将向用户显示食谱供稿,以作为通知。
此通知将包括以下部分。
- 食谱标题
- 字幕 -谁张贴了食谱
- 正文 -食谱的简短说明
- 视频附件 –显示配方过程
因此,当前的工作是将视频附加到服务扩展中的通知上。
您的服务扩展名有两个文件Info.plist和NotificationService.swift
您将在NotificationService中获得一些样板代码。 不过,让我们编写用于下载视频和设置通知内容的代码。
在此之前,只需确保要发送的有效负载如下。
4.自定义通知的UI
上面交付给用户的UI是带有视频附件的通知的默认UI。 iOS 10添加了自定义此UI的功能。
现在,自定义通知UI时有些事情看起来是不可能的。
- 动画。
- 它不接收任何触摸。
如果需要动画,则可以将gif替代为您尝试模仿的一些基本动画。
要执行某些必须由用户启动的操作,可以使用通知操作。
但除此之外,它是一个可以嵌入任何视图的简单视图控制器。 要自定义通知界面,您需要Notification Content Extension 。
创建内容扩展后,您将获得MainInterface.storyboard , NotificationViewController.swift和Info.plist
Info.plist应该指出您要自定义的通知界面属于哪个类别。
UNNotificationExtensionCategory —指定我们的通知内容扩展所属的类别。 仅当传递的通知属于此处指定的类别时,内容扩展名才会被调用。
UNNotificationExtensionDefaultContentHidden —在自定义UI下方显示了由标题,字幕,正文组成的默认内容。 如果您已经在自定义用户界面中显示这些内容,则可以在此处将其隐藏。
UNNotificationExtensionContentSizeRatio —指定通知的大小。 如果为1,则宽度和高度将相同。 您可以使用preferredContentSize或autolayout约束来覆盖它。
在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)支持本地和远程的交付和处理。