音乐搜索器-多站合一
通知是一种在新数据可用于该应用时通知用户的方法,即使该应用未在前台运行也是如此。
例如,消息收发应用程序可能会在新消息到达时通知用户,而日历应用程序可能会通知用户即将到来的约会。
随着iOS-10的发布, Apple引入了全新的框架来支持本地或远程通知。 自定义通知是此版本重点关注的内容。
不要浪费任何时间,让我们快速跳到细节上。
我们可以将通知大致分为两类,
在本文的进一步部分,我们将看到如何掌握两种通知类型。 首先让我们开始介绍可以用于事业的全新通知框架。
随着iOS-10的发布,Apple引入了2个新框架来处理通知,
我们将使用这2个框架和一些特定于平台的API来配置我们的通知。
除框架外, Notification service应用程序扩展 还引入了允许在传递远程通知之前对其进行修改的内容。
Apple还允许通过Notification内容扩展名自定义通知UI 。
记住太多了吗? 是的。肯定是。 但是,不用担心。 我们将逐步查看所有内容以及相关代码。 放轻松..😉
为了让我们的应用程序收到任何通知,我们首先需要知道使用它的人是否真的想要它。 也许是他不喜欢手机一直响并且显示警报😖..或者也许他实际上是想要更新但不想要那种令人讨厌的声音..naahhh .. !!!☠️
因此,首先,我们需要从我们要通知的人那里获得许可。 这很简单,只需两行代码,我们就完成了。
您需要先从AppDelegate的方法中编写该代码-application:didFinishLaunchingWithOptions :,然后再从其中返回。
注意事项:由于系统保存用户的响应,因此在后续启动期间对requestAuthorization(options:completionHandler :)方法的调用不会再次提示用户。
用户通知框架支持向通知添加类别和操作。
类别 -定义应用程序支持的通知类型,并向系统传达我们希望如何显示通知的方式。
动作 -每个类别最多可以有四个关联的动作。 动作基本上是自定义按钮,轻按一下即可关闭通知界面,并将选定的动作转发给应用程序以立即进行处理。
好吧.. !!! 那是什么意思.. ?????🤔一些代码可以帮助您更好地理解。
在上面的代码中,我们简单地创建了一个名为INVITATION的类别,该类别具有4种不同的动作-alertLater,accept,拒绝,comment 。
类别和动作由其标识符唯一标识。 每当传递带有类别的通知时,一旦用户展开该类别,系统就会显示该通知以及与该类别相关的所有动作。 这就是👇的样子,
在您在application:didFinishLaunchingWithOptions:方法中配置通知的位置下面,定义所有类别和操作。
在安排本地或远程通知时,请包括类别标识符(例如INVITATION )。 我们将在下一节中看到如何执行此操作。
现在我们已经完成了配置通知的操作,让我们看看如何在app中实际安排一个通知。
安排本地通知只是3个简单的步骤,
让我们快速开始编写代码,这样我们就不会对这里发生的一切感到困惑。 哈哈😝
在上面的代码以及其他内容中,我们还提供了categoryIdentifier以支持可操作的通知。 如果我们不这样做,系统将采用其默认行为。
而已。 这就是全部。 是的,它绝对有效。.呵呵呵.😝试一试,然后再继续。 您可以从此处下载示例。
每当传递通知时,应用程序在后台和前台状态下的行为都会有所不同。
当通知发送时应用程序处于前台时,我们将在UNUserNotificationCenterDelegate的方法中获取回调— userNotificationCenter(_:willPresent:withCompletionHandler :) ,您可以在其中决定是静默处理通知还是向用户发出警报。
不要忘记使AppDelegate符合UNUserNotificationCenterDelegate协议,并将其设置为application:didFinishLaunchingWithOptions:中的UNUserNotificationCenter共享对象的委托。
let center = UNUserNotificationCenter.current()
center.delegate = self
目前,我们已经完成了本地通知。 让我们继续介绍如何从应用程序外部安排通知。 在此之前,让我们看一下如何响应自定义操作。
配置通知?? ✔安排通知? ✔
点击通知或通知中的任何自定义操作怎么办? 它会导致什么? —在这两种情况下,系统都会将用户的选择通知应用程序。
每当用户在通知中执行任何操作时,响应就会发送到UNUserNotificationCenterDelegate的方法— userNotificationCenter(_:didReceive:withCompletionHandler :) ,在该方法中,我们可以为每个操作提供特定的处理。
需要注意的一点 -如果收到响应后应用未运行,则系统会在后台启动该应用以处理响应。
推送通知或远程通知,无论我们称之为什么,它都是使用频率最高的应用程序之一,具有很多用例。
无论是社交媒体,日历还是任何实用程序应用程序,我们几乎都可以看到它们。 新闻应用会通知我们最新内容,媒体本身会提醒我们最新发表的文章。
有没有想过他们怎么做到这一点? 本地通知???🤔可能是..它做同样的事情..对吗? 也许我们可以在本地本身中进行更多配置并使其正常工作? 但是例如,由于中等程度,无法在我们的个人设备上访问该应用程序,那么它如何安排任何通知? 究竟!!! 不行 这是不同的东西,不仅仅是本地的东西。
从某个点发送通知并在其他点显示它-这是否可以回答我们的问题? 是的。肯定会。 但是该怎么做呢? 它是远程通知 。 这正是它的作用。 这是解决了“保持最新”的大问题的功能。
切勿在您的应用程序中缓存设备令牌; 而是在需要时从系统中获取它们。
当某些事件发生时,APN会向您的应用发布新的设备令牌。 保证设备令牌是不同的,例如,当用户从备份中还原设备时,当用户在新设备上安装您的应用程序以及当用户重新安装操作系统时。
当您尝试获取设备令牌但尚未更改时,fetch方法将快速返回。
需要指出的一点-APNs可以向未运行的应用程序传递远程通知的功能要求该应用程序至少已启动一次。
以下是有关上述所有技术如何协同工作以完成远程通知工作流的简短概述。
如果在设备开机但未运行应用程序的情况下收到有关您应用程序的通知,则系统仍可以显示该通知。 如果在APN发送通知时关闭设备电源,则APN会保留该通知并稍后重试。
既然我们已经知道了什么是远程通知,以及使它工作所需的一切,现在让我们继续介绍如何使我们的应用程序支持它。 显然,nothing没有任何React。 我们需要对它们进行一些配置。 为了能够处理远程通知,我们的应用程序必须:
2. 向Apple Push Notification Service(APN)注册并接收特定于应用程序的设备令牌
要求向APN注册很容易。 只需在UIApplicationDelegate的方法中添加以下代码(application:didFinishLaunchingWithOptions :),然后再从中返回即可。
isterForRemoteNotifications()
现在有两种可能,要么我们成功注册,要么过程失败。
成功注册后,APN将使用UIApplicationDelegate的方法application:didRegisterForRemoteNotificationsWithDeviceToken:将特定于应用程序的设备令牌发送到设备。
如果出现故障,我们会在UIApplicationDelegate的方法中收到一个回调:application:didFailToRegisterForRemoteNotificationsWithError:。
3.将设备令牌发送到通知提供者服务器
到目前为止,我们已经从APN收到了设备令牌。 现在,我们需要将此令牌发送给我们的提供商,该提供商将在将任何通知推送到我们的设备时使用它。
由于我们没有提供者,因此现在我们可以使用Easy APNs Provider来测试我们的推送通知。 在本节的后续部分,我们将看到如何精确地使用此工具。
现在,只需下载并将其安装在Mac上即可。
4.实施对处理传入的远程通知的支持
我们已经获得了设备令牌,我们的提供商也对此有所了解。 接下来,提供商将发送包含此令牌和其他信息的通知,我们将在设备上获取该通知。
怎么办? 当它到达时会发生什么? 它将如何出现在设备上? 当我们点击它会发生什么? 那么我们之前配置的所有操作呢? 我们可以把它们送到这里吗?
question ..好吧,不用担心。 我们将一一解答所有问题。
我们已经介绍了将推送通知集成到我们的应用程序中所需的大部分内容。 尽管我们知道如何在应用程序中处理它,但仍然缺少在提供程序上处理它的方法。
我们有提供者。 它知道要使用的设备令牌,但这完全不会在我们的设备上弹出带有一些标题和其他详细信息的通知。 也不会使任何动作出现。 因此,推送来自提供商的通知需要以下各项,
让我们看看JSON字典的全部内容,
在这里,您可以阅读有关根据需要自定义有效负载的更多信息。 这是对我们可以在aps字典中添加的键的引用
到现在为止,我们知道什么是远程通知 。它们是如何工作的。我们需要什么来使其正常工作。一切都可以使它们完美地工作。
现在的问题是,如果我们要在从提供商那里收到的通知中修改某些内容,然后再将其显示在设备上怎么办? 如果通知中包含一些我们需要下载的图像链接,然后发送给用户该怎么办? 我们能用我们已经知道的做吗? 我们无权访问提供商。.那我们将如何?
我们实际上不能。 我们不能改变我们得到的..但是我们绝对可以改变我们所呈现的。
这就是Notification Service App Extension的全部目的- 在交付前修改远程通知的内容 。 它看起来很简单。 没有花哨的代码..没什么..很简单。
xcode项目中的扩展被添加为目标。 选择文件 - 新建 - 目标 - 通知服务扩展。
在我们开始修改内容之前,对何时允许修改内容有一些限制。 仅在以下情况下才能修改内容:
我们无法修改静默通知或仅播放声音或标记应用程序图标的通知。
因此,为了支持对通知内容的任何修改,必须满足这些条件。
Xcode提供的默认通知服务扩展目标包含UNNotificationServiceExtension类的子类,供我们修改。
它包含2种方法:
让我们来看一个例子。 我们将代码片段中的有效载荷中的主体 — 7更改为“ 地址:孟买Sea Shells Apartments ”。
扩展本身提供了这两种方法的所有默认实现。 我们只需要进行所需的更改即可,例如上述代码段的第8行。 现在只需一行代码。 同样,您可以根据需要修改其他字段。
拥有醒目的UI总是比默认的简单UI更好。 添加一些颜色..一些漂亮的字体从来都不是一个坏主意。 我们将对通知进行同样的操作,使它们看起来像哇。
而且还有…… 苹果再次在这里为我们解救。 通知内容扩展名 —提供用于传递的本地或远程通知的自定义界面。
我认为我们已经知道该怎么做。 是不是 我们将进行与添加Notification Service Extension相同的操作 。 选择文件 - 新建 - 目标 - 通知内容扩展。
为了支持本地和远程通知的自定义UI,我们需要在内容扩展的Info.plist文件中进行一些更改。
这是一个可以帮助我们更好地理解上述键的插图。
在上图中, Info.plist中的键配置为:
通知内容扩展,向我们提供一个符合UNNotificationContentExtension协议的UIViewController。 该控制器显示通知的界面。 扩展中的Storyboard文件包含一个ViewController,我们可以使用它创建希望通知呈现的任何UI。
创建UI后,我们需要在NotificationViewController中连接元素以填写详细信息。 每当有预期类别的通知到达时,我们都会在UNNotificationContentExtension的方法didReceive (_ :)中收到回调。 在这里,我们可以向自定义UI添加详细信息。
通知的自定义UI几乎完成了。 再多1件。 由于自定义UI附加在通知类别中 ,因此可能附加了一些操作。 和..你说的没错.. !!! 🤘我们将自动执行操作,而无需任何自定义处理。 很棒.. !!!👏
内容+漂亮的用户界面+自定义操作 -完成所有操作。 我们还能要求什么。 苹果 ..你很棒.. !!!🤩
最后一点,我们也可以为扩展中的自定义操作添加处理。 系统调用didReceive(_:completionHandler :)方法来响应任何选定的动作。 如果我们的视图控制器未实现该方法,则系统会将选定的操作传递给您的应用以进行处理。
如果实施,我们需要处理此方法中所有可能的操作。 这里重要的一件事是完成关闭。
完成
完成执行动作后要执行的块。 在实现过程中,必须在某个时候调用此块。 该块没有返回值
该闭包接受类型为UNNotificationContentExtensionResponseOption的单个参数解除。 我们提供以下选项:
总结了我们的通知。 记不清了吗? 实践取得进展🙂 。 尝试制作自己的通知。
您可以从此处下载示例项目。
可以在此处找到Notification Content Extension的示例项目。
不要忘记阅读我的其他文章:
如有任何疑问,请随时发表评论。
翻译自:
音乐搜索器-多站合一
本文发布于:2024-02-04 20:38:51,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170715928659409.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |