简而言之,iOS远程推送通知

什么是远程推送通知?

好吧,如果您问苹果公司的人,他们可能会将您定向到他们网站上的以下页面,该页面描述了以下通知:

Apple Push Notification服务 (APN)是远程通知功能的核心。 对于应用程序开发人员而言,它是一项强大,安全且高效的服务,可以将信息传播到iOS(以及间接地通过watchOS),tvOS和macOS设备。

我只是说“这是在提醒用户有关其在手机上安装了您的应用程序的事实”,这听起来有些怪异。 我在那里也看到:“更好地利用这个强大的功能,伙计/女士!”。 这正是我们在本指南中要做的!

推送通知可以做什么?

我将把“推送通知”称为“推送通知”,“ PN”,“ APN”,“通知”,“远程推送通知”,“远程通知”,我将始终牢记相同的概念。

这几天您可以使用APN进行以下操作:

  • 显示讯息
  • 播放声音
  • 在您的应用上设置徽章图标
  • 提供用户在打开或不打开应用程序时可以执行的操作
  • 显示图像或其他类型的媒体
  • 保持沉默,但要求应用程序在后台执行一些操作

方式可能太多,但全部有用。 尽管如此,随着文章标题的发展,我将专注于显示消息,媒体和动作 。 没人喜欢知道吗,对吧?

但是,在看到任何APN魔术发生之前,需要完成一些配置! 这将帮助我们保护珍贵的远程通知免遭可能的入侵者的侵害-定义确实健壮,安全且高效 ,现在听起来确实很吓人,但您不用担心!

APNS配置开始之前需要准备的东西

  • 真正的iOS设备。 模拟器无法接收通知。 我将在装有iOS 11的iPhone 8 Plus上进行测试。
  • Apple开发人员计划成员资格 -是的,您需要最终支付自己一直避免的费用。
  • 将通知有效负载发送到设备的一种方法是一种简便的安装和使用Pusher应用程序的好方法。

APNS配置和初步分步实施

步骤1,项目设置:与这些天您可能正在学习的有关iOS应用程序的其他任何事情一样,这一切都始于创建项目。 是的,我的名字叫独角兽。 这个想法很简单-当同一个独角兽用户看到独角兽并拍照时,每个用户都会在通知中收到该图片

第2步,启用APN:在Xcode中,转到“ 目标” ,在应用名称下,选择“ 功能”,然后在列表中找到“ 推送通知,然后切换 ON

步骤3,获取APNs证书:转到您的Apple Dev Member Center帐户并登录。单击“ 证书,ID和配置文件->标识符-> App ID” ,您应在其中看到所有应用程序标识符,选择要为其创建通知的标识符。 您将看到大量可用的应用程序服务推送通知应标记为可配置:

底部应该有一个“ 编辑”按钮 ,单击它,然后再次在该列表中找到“ 推送通知”

您需要的是开发SSL证书( 在本文末尾提供有关开发和生产证书的说明 ,单击“ 创建证书”按钮 ,然后按照说明创建CSR文件 。 简而言之,请按住CMD + Space键开始在Mac上进行聚焦搜索,编写Keychain Access ,然后按Enter键启动Keychain Access应用程序

按照Apple的指示进行下一步:

在“钥匙串访问”下拉菜单中,选择“钥匙串访问”>“证书助手”>“从证书颁发机构请求证书”。

正确填写证书信息,并确保将.certSigningRequest文件保存在易于找到的位置,因为这时需要在此处上传:

去做。 然后,您将获得以下屏幕:

下载生成的证书 ,双击 cer文件 ,找到它安装在您的Keychain Access中

这一步很长,但值得。 再次按照以下步骤操作, 证书,ID和配置文件->标识符->应用程序ID ,您应该看到现在已为开发启用了推送通知

步骤4,最后完成一些代码:我知道冗长的配置,但是正如前面提到的,安全就是安全。 该写代码了!

返回项目并打开AppDelegate.swift文件。 这是我们在尝试发送一些🦄之前要求用户授予从我们接收通知的权限的位置。

首先,在您的AppDelegate.swift文件上:

 导入用户通知 

然后在AppDelegate类中,添加以下函数:

图片是不言自明的,因此,请按Allow ,瞧,发送通知会收到! 但是,通常要记住一个陷阱-用户始终可以在电话设置中禁止推送通知授权。 我们现在不会考虑它,但是这种情况应该在生产应用程序中处理!

好的,让我们继续。 在看到任何Push Notification操作之前,要实现另外两个委托函数( 我相信它的目的很明显一个可以获取设备令牌,另一个可以检查是否存在错误 ):

有一个下拉菜单,其中Pusher自动检测您在Keychain Access中已经拥有的Push Certificate。 单击它,然后选择一个与您的应用程序相对应的应用程序,如下所示:

然后在下一个字段中,粘贴您的设备令牌 ,当授予发送PN的权限时,您应该在应用程序的每次启动时在Xcode控制台中看到该设备令牌请注意,删除并重新安装设备令牌可能会更改您设备上的应用 )。 我在控制台中获得的令牌是这样的:

幸运的是,Pusher附带了一个非常简单的默认有效负载,它只是一个带有特定Apple定义键的JSON字典( 不用担心,它们可以超过三个 )。 Pusher提供的JSON密钥是什么意思?

  • 警报键将仅显示标准警报,并显示一条消息“ Testing…。”。
  • 徽章密钥只会修改您应用图标的徽章,这次更改为数字1( 实际上可以是任何数字 )。
  • 声音键非常明显,通知将只播放默认声音。

好了,该应用程序已在我们的真实设备上构建并运行,添加了所需的证书,也添加了设备令牌,让我们按下Pusher中Push按钮 ,看看发生了什么魔术:

是的,它有效。 由于没有独角兽,所以效果不佳。 嗯,我们会到达那里! ( 如果您想知道通知负载可以携带的内容,请 在此处 此处 阅读

添加媒体附件

好吧,好吧,我们实际上是发送了带有警报的通知。 不错,但是可以肯定的是,我们大多数人都收到了更复杂的通知( 图片,gif等 ),对吗? 那么,该怎么做呢? 我为您提供两个词- 服务扩展服务扩展会拦截来自应用程序的推送有效载荷,并让您有机会在通知内容出现之前对其进行更改。

正如在Apple网站上所写:

应用程序扩展使用户可以在整个iOS和macOS中访问您应用程序的功能和内容。

这就是服务扩展将为我们和我们的通知所做的-它将帮助我们向用户提供外观更漂亮的通知🎊。

足够多的jibber-jabber和更多的工作! 在Xcode中,转到File-> New-> Target…,如下所示:

然后在下一个菜单的iOS下, 过滤“ 服务”,然后选择Notification Service Extension,如下所示:

单击下一步按钮,并为其选择一个名称。 我将命名为NotificationService 。 点击完成 。 我们将得到的是为我们创建的两个文件的新组:

继续并打开NotificationService.swift文件。 花点时间检查一下Xcode为我们编写的代码。 didReceive(_:withContentHandler :)函数更为重要,因为在这里我们可以根据自己的喜好修改通知。

在此之前,我们需要转到有效负载aps字典 ,并确保如果我们实际上想使用任何类型的通知扩展名 ,请添加此键值对:

  “可变内容”:1 

表示操作系统应启动应用程序的服务扩展并进行一些额外的处理。

我现在要添加到有效负载中的另一件事是示例独角兽图片URL。 我会想象有人拍了一张独角兽的照片并将其上传到服务器,这就是为什么我作为用户收到通知的原因。 这是最终的有效负载:

  { 
“ aps”:{
“ alert”:“正在测试..(0)”,
“徽章”:1,
“ sound”:“默认”,
“可变内容”:1,
“ attachment-url”:“ https://tinyurl.com/y9exh3by”
}
}

现在是时候返回NotificationService.swift文件并将其切换一点了。 苹果团队确实为我们提供了一些代码,但是我想对其进行更改,以便它可以正确处理仅URL到图像附件的转换。 为此,我将需要此特定功能( 在侧面添加了注释,因此更有意义 ):

添加自定义动作

好吧,到目前为止,我要说的不错。 还是,我们想让事情变得更加幻想,比如添加一些自定义动作? 我想到的是“ 喜欢”和“ 保存”操作 -分别用于喜欢图片和保存图片。

好的,返回到NotificationService.swift文件,并在// 4.和// 5之间添加// 6.,如下所示:

老实说,我们还没有准备好,因为如果您考虑一下,我们将不会在任何地方处理这些自定义操作。 该操作位于AppDelegate.swift文件中。 只需在关闭AppDelegate类之前添加此可选功能即可:

  func userNotificationCenter(_ center:   UNUserNotificationCenter   ,didReceive响应:   UNNotificationResponse   ,withCompletionHandler completeHandler:@escaping()->  空洞 

它所做的是为我们拦截通知响应。 在响应中,我们可以检查用户是否选择了提供的任何自定义操作,并根据该操作继续进行应用逻辑。 我处理动作的方式(仅出于演示目的)仅是通过在控制台上打印出语句,如下所示:

结论

经过大量的工作之后,最好是简短总结一下,对吧? 也就是说,我希望我不仅可以帮助您熟悉APN,还可以让您将“ 深入了解APN并发挥一些想法 ”的话题列入您的清单! 因为相信我,所以还有更多的东西😃。


更新提供有关APNs证书的更多说明

我收到了一些积极的批评,指出我在设置Unicorner演示应用的APNs证书时不够清楚。 是的,我需要强调一点,当使用Xcode测试和构建应用程序时,我使用了开发证书如果您决定使用TestFlight发布测试版,或在AppStore中发布生产版本,则需要使用生产证书而不是开发证书

还值得一提的是,还有另一种设置推送通知的方法 ,即使用APNs Auth Key 。 这样做有两个主要好处:

  • 无需每年重新生成推送证书。
  • 一个身份验证密钥可用于您的所有应用程序-避免了维护不同证书的复杂性。

如果您认为APNS身份验证密钥更适合您,请按照以下简单的设置说明进行操作。


资料来源

  • 苹果
  • raywenderlich.com
  • Veronika在pluralsight.com上
  • pusher.com
  • makeapppie.com
  • developer.clevertap.com