用 Swift 实现通知推送的新手指南

“推送通知?哦,不!”。是的,这就是我被叫去实现一个 iOS 应用中的推送通知功能时,脑海中闪过的第一念头,并且我相信大家也曾经有过这样的想法。这不是由于推送通知很难使用,而是在可以测试推送一条单独的通知前有不少步操做须要完成,这些操做步骤最终几乎把全部开发者弄得晕头转向。不过咱们再坚持一下子,从头开始把事情想明白。html

当应用不在运行时,咱们常常须要把用户的注意力吸引过来。正如咱们所知道的那样,这能够经过 通知 实现。做为一名 iOS 开发者,你应该知道 iOS 支持两种类型的通知: 本地的 和 推送的 (或者叫 远程的 )。在以前的例子中,通知由应用本身 注册 并 管理 ,这种通知很容易实现。事实上,你能够在 这里 和 这里 找到一些先前介绍本地通知的教程。 ios

不过推送通知不是由应用本身管理的。它们由另一个服务(叫作 Provider )触发,一般状况下这个角色由 web 服务器扮演,这些通知每每同时被发往多个设备。有了推送通知,应用开发者能够在须要的时候给用户发送消息,消息既能够在随机的时间点被发送,也能够按计划时间发送,消息主体能够是默认的或自定义的。 这里 是一份很好的资源,它提供了一些关于苹果推送通知的基本信息。 web

每个推送通知由 provider 通过一条强制指定的路径发往一个或多个目标设备。这条路径必须通过 Apple Push Notification Servers ,或者简称 APN servers 。实际上,这些服务器会为推送通知规划路径,从而发往正确的设备。一般状况下,消息在由 provider 发送给服务器的几秒钟内,被服务器投递给目标设备。简而言之,远程通知的生命周期能够总结以下: 编程

Provider >> APN servers >> 目标设备

我建议你查阅 官方文档 ,文档中有不少有用的细节,介绍了推送通知的工做原理。 swift

在应用能够收到推送通知以前须要几个步骤的配置,这些步骤整体上能够被分为两类:编程方面的准备和建立各类证书,provisioning profile 等。编程部分很容易,它只包含几段必须添加到项目中的标准代码。容易引发混淆的是第二部分,这些操做须要在不一样的地方被执行,好比 Mac OS Keychain Access 程序,Xcode 项目和 Apple Developer Member Center 网站。 数组

除此之外,远程通知能够被分为两种,一种是 沙盒 通知,这种通知能够在开发阶段使用,所以它能够用于调试。另外一种是 实时 通知,这意味着它只能在产品发布阶段使用。若是你成功的在应用中接收到了沙盒通知,而且正确的执行了此前提到的各类操做,那么就能够放心的认为实时推送通知也能够正常使用了。毫无疑问,Apple 为发送沙盒通知提供了专门的测试服务器,这并非由生产环境下的 APN 服务器负责的。 服务器

这篇教程的目的很简单:咱们但愿为一个 demo 应用实现推送通知功能,并发送一些沙盒通知以确保通知推送功能正常运行。但愿下次你为应用添加推送通知功能时,这篇教程能帮上你。最重要的是,实现推送通知功能事先须要各类繁琐的配置,这篇教程能够指引你走出这种困境。并发

关于 Demo 应用

在正式开始一篇教程以前,我老是会给出一些信息,介绍将要实现的 demo 应用。我常常会提供一个初始项目,不过此次不会。app

要想建立这篇教程的 demo,你只须要在 Xcode 中建立一个新的 iOS 项目就能够了。你不须要额外添加任何内容或控制,由于这个项目并不是用来测试应用内的功能,它只是做为一个通知推送的目标。框架

你能够随便给项目起个名字,好比我把它命名为 PNDemo 。 

因此在这一步中,咱们建立了一个新的 iOS 项目,咱们继续接下来的步骤。

重要通知:

在开始讲解这篇教程的细节概念以前,我必须说明清楚,基于某些会遇到的状况,我作了一些假设。咱们约定:

  1. 你有一个付费的开发者帐户,或者至少可以获取一个这样的帐户。
  2. 在 Apple Developer Member Center 网站中已经至少有一个 iOS Development Certificate,不然你能够看一看 这篇文章 ,若是你须要使用 Code Signing Request (CSR) 文件,请阅读下一部份内容来学习如何建立它。 
  3. 你明白我在这篇文章中所说的推送消息仅仅是指 Apple 公司的推送消息。
  4. 你明白当我说“苹果开发者网站”时,我其实指的是“Apple Developer Member Center”网站。
  5. 你知道通知的载荷(payload)是什么(内容、badge、声音以及其余额外的数据),而且知道如何处理它们。查看 这篇文章 能够复习关于通知的知识。 

步骤一:证书签名请求

既然你已经建立好了 demo 项目,那么暂时先把它搁置一下子,准备进行整个流程的第一步。咱们的目标是建立一个 Certificate Signing Request (CSR) 文件,这个文件稍后将被用于建立推送通知的 SSL 证书。 

在这一步中,你须要使用 Mac 上的 Keychain Access 应用。你可使用 Launchpad 或 Spotlight 来找到并打开这个应用。若是你不熟悉这个应用,确保你没有无心中删除任何已有的文件。 

打开 Keychain Access 应用后,以下图所示,依次打开这些菜单 Keychain Access > Certificate Assistant > Request a Certificate From a Certificate Authority… ,以下图所示: 

在打开的窗口中,你必须填写 User Email Address 和 User Email Address 。除此之外,还须要选中 Saved to disk 选项,这样你能够把文件保存到磁盘中,这个文件稍后在苹果开发者网站上会用到。 

点击 Continue ,你能够选择这个 CSR 文件的文件名和存储位置。我把这个教程中建立的全部文件都保存在一个新建的文件夹中(文件夹的名字是 PNDemo Files ,我但愿你也这么作),CSR 文件名使用的是默认的文件名。 

当你看到一条消息,提示你的证书请求文件已经被建立时,点击 完成 按钮,而后你就…完成了。咱们刚刚申请并保存的这个证书将被用于在苹果开发者网站上为其余证书签名。 

步骤二: 建立一个 App ID

咱们的下一步操做是在苹果开发者网站上建立一个新的 App ID。这个 App ID 是将你的应用和其余应用区分开来的惟一标志,它能够帮助 APN 服务器正确的规划发送通知的路径。实际上,你将会看到咱们会把这个 App ID 和其它几样东西关联起来:一个用于推送通知的新证书,一个容许咱们在测试设备上运行应用的 provisioning profile。

先完成最重要的事,咱们前往 Apple Developer Member Center ,输入用户名密码后登录。而后点击 Certificates, Identifiers & Profiles 连接,因而你会跳转到合适的页面。 

进入到新的页面后,点击 iOS Apps 那一节中的 Identifiers 连接。 

你会看到 App IDs 选项是事先就选中的(在左侧菜单的 Identifiers 目录中),在主窗口中列出了全部已存在的 App ID 。咱们新建立的 App ID 也会被添加到这个列表中,不过首先得点击右上角的加号按钮。 

如今,咱们要为 demo 建立一个新的 App ID,对新手来讲,咱们须要填写两部份内容:

  1. 新 App ID 的描述介绍。在这个例子中,你输入的内容并非很重要,不过最好仍是要作到语言清晰,具备实际意义。
  2. 应用的 Bundle ID,你能够直接从 Xcode 项目中复制并粘贴到这里。

你会发现,在这两个值之间还有一个须要设置的值,它叫作 App ID Prefix 。一般状况下,你不须要修改这里的默认值,可是若是你确实须要选择一个不一样的前缀,也别犹豫。在这篇教程中,我选择使用默认值。 

在这一步中,你要记住一个很重要的细节:实现通知推送功能须要选择 explicit App ID ,由于这个 App ID 必须匹配某个具体的 Bundle ID。在这种状况下,苹果不容许咱们使用通配的 App ID(以星号 * 结尾的 App ID)。不管应用具备怎样的特色,我我的老是认为使用 explicit App ID 比通配 App ID 更好。这样会让你在 App ID 列表中,很清楚的区分开每个 App ID。 

设置好以上内容后,向下滚动网页到 App Services 区域。在全部提供的服务的底部,勾选 Push Notifications 选项,在你开始下一个操做前务必反复检查,确保这个选项确实已经被选中。 

接下来,点击 Continue 按钮并等待确认页面出现。检查全部的信息是否都正确无误,而后点击 Submit 按钮提交信息。若是你检查到错误,能够回退到前面的页面,修改任何一个有错的值。 

在最后一步中,你会看到 Registration Complete 页面,只要点击 Done 按钮便可,你会看到新的 App ID 已经被添加到 App ID 列表中。 

步骤三:配置推送通知的 App ID

注意到没有,尽管此前在建立 App ID 时咱们勾选了 Push Notifications 服务,可是它在 Development 和 Distribution 模式下都被标记为 Configurable 而不是 Enabled。这说明咱们还须要进行一些额外的操做,将通知推送服务切换到合适的状态。 

在这个教程中,咱们不会在生产环境中测试推送任何通知,也就是彻底不涉及 Distribution 模式。出于这一点考虑,咱们只会配置 Development 模式下的推送通知。不过接下来的操做对于 Distribution 模式下的配置彻底适用。在一个实际的应用中,你显然须要配置 Distribution 模式,不然在应用上架App Store 后,推送通知的功能就会失效。

如今,咱们点击列表中刚刚建立的 App ID,在展开的服务列表中,点击 Edit 按钮进行下一步操做。 

向下滑动到 Push Notifications 一节,你会发现两个按钮,分别用于建立开发环境和生产环境下的 SSL 证书 。由于咱们只关心 Development 模式,因此点击下图中的第一个按钮: 

“好久”之前经过 Keychain Access 建立的 Certificate Signing Request 文件是时候登场亮相了。接下来,咱们首先点击 Continue 按钮。若是你尚未建立 CSR 文件,这几条指令会教你如何建立它。 (校对同窗看看这句话什么意思)

接下来,点击 Choose File… 按钮并找到你在第一步中建立的 CSR 文件。若是你没有修改文件的默认名字,那么你要找的文件的名字就是 CertificateSigningRequest.certSigningRequest 。 

最后,点击蓝色的 Generate 按钮,以下图所示: 

棒!你已经成功建立了一个新的证书,它能够在 development(sandbox)模式下推送通知。如今你须要把它下载下来,而后添加到钥匙串(Mac 上的 Keychain Access 应用) 中,因此接下来你须要点击 Download 按钮。 

你刚刚下载的文件名是 aps_development.cer 。在 Downloads 文件夹中找到它,双击打开这个证书并将它添加到 Keychain Access 的证书列表中。 

重要通知: 双击打开 .cer 文件并将它添加到 Keychain Access 中时,请确保它被添加到 login 而不是 System 或其余钥匙串中。若是加入的钥匙串有错,你只须要把证书拖动到 login 钥匙串中便可。这对下一步操做很重要。 

把证书添加到 KeyChain 中后,右键点击这个证书,而后选择 Export “…” 选项 

导出格式要选择成 .p12 文件,而后点击 Save 按钮。 

若是你不想设置密码,能够直接点击 OK 按钮跳过这一步。若是你设置了密码,那么就要记住它或者把它写在某个地方,不然一旦忘记了密码,这个文件也就没用了。 

在这个教程中,咱们不会用到这个导出的文件。但若是你想在远程服务器上(好比 Parse)测试推送通知功能,你就须要在推送第一条通知之前提供 .p12 格式的文件。因此目前你把这个 .p12 文件和其余文件一块儿保存着就好。这一步的关键在于你可以意识到开发模式下建立 .p12 文件的方法一样适用于生产环境。

步骤四:注册设备

首先,我须要说明这一步仅对测试沙盒模式的推送通知有用,在实际的生产环境下不须要这一步。如今,咱们去苹果开发者网站上注册用于测试的设备,若是你曾经注册过设备,也就是列表中能够找到这个设备,那么你能够跳过这一步。

假设你如今是第一次添加设备,首先你须要将设备与 Mac 连接,而后在 Xcode 中打开 Window > Devices 菜单,在打开的窗口中列出了全部的设备和模拟器。 

在左侧选择你的设备,你会在主窗口中看到更多细节。注意到其中有一项是 Identifier,它的值是一长串数字和字母,双击选中这个值并复制。

如今,返回苹果开发者网站,点击 Devices 目录下的 All 选项,全部被注册过的设备都显示在主窗口中。要想新增一个设备,你须要点击右上角带有加号(+)图标的按钮。 

在新打开的表格中,首先在 Name 文本框中输入设备名称(好比 Gabriel’s iPhone 6S 或 My lovely iPad )。而后把以前复制的设备的 identifier 填写在 UUID 文本框中,这一步就完成了。 

点击 Continue 按钮,在下一步中须要确认因此填写的信息都准确无误。搞定以上这些后,点击 Register 按钮完成注册。 

你能够验证是否成功的注册了设备,只要再次点击 Devices 目录下的 All 选项,而后逐条查找你刚刚输入的设备名便可。 

步骤五:建立开发环境下的 Provisioning Profile

在苹果开发者网站上的最后一个任务是为开发环境建立一个 provisioning profile。它将会用于为应用提供代码签名。注意,在把应用上传到 iTunesConnect 并使用 TestFlight 或上架 App Store 以前,你须要建立 Distribution provisioning profile。它的使用方法和你将要学到的开发环境下 provisioning profile 的使用方法相似。

在苹果开发者网页上,点击 Provisioning Profiles 目录下的 Development 连接,主窗口中会显示出全部已存在的配置文件。稍后,咱们新建的配置文件也会添加到这里。 

你能够经过点击右上角的加号(+)按钮建立一个新的 provisioning profile。在新打开的表格中,点击选择 iOS App Development 选项(第一个选项)。注意,若是你建立的是用于发布应用的 provisioning profile,就应该选择底下第二个区域中的选项(颇有多是 App Store)。 

选择了合适的选项后,点击 Continue 按钮开始下一步操做。 

如今,咱们要把这个配置文件与应用对应的 App ID 关联起来。你须要在下拉菜单中查找并选择正确的 App ID。

接下来,你须要把你的 iOS Development certificate 导入到 provisioning profile 中(假设你至少有一个证书)。若是像下图所示那样,有多个证书而且不肯定该选择哪个,一种简单的方法是勾选 Select All 选项导入全部的证书,这一步就完成了。 

接下来是选择将要运行应用的设备,请确保没有漏选任何用于测试推送通知的设备。选择好后再次点击 Continue 按钮。 

最后一步是为 provisioning profile 文件命名,将它与其余文件区分开来。我把它叫作 PNDemo Development Profile ,你能够根据本身的喜爱随便起名。 

点击 Generate 按钮并等待下一个页面出现。当新的配置文件建立完成后,你就能够下载它了。以下图所示: 

你只须要根据以上这些图片的指示去操做便可,而后双击打开并安装刚刚下载的文件。若是你按照个人方式命名,那么你的文件名会是 PNDemo_Development_Profile.mobileprovision 。 

步骤六:配置项目

从这一步开始,咱们就和苹果开发者网页说再见了。把目光转移到咱们的项目上来,这里咱们须要完成两个任务:

  1. 首先咱们要在项目中开启推送通知功能,这样设备才能接收到通知。虽然这是很基础,很简单的一步,可是相信我,不少开发者都会忘记启用推送通知功能。

  2. 咱们须要正确设置应用的 code signing 和 provisioning profiles 。注意,接下来的操做都会在 Development 模式下进行,咱们彻底不会涉及生产环境。可是这二者很是相似,因此在应用上线前你能够仿照这里的步骤完成生产环境下的配置。 

在 Xcode 中打开应用,选择 Project 导航栏中的项目。请确保你处于 General 标签下,而后点击 Team 下拉控件,选择正确的 team。 

若是你的 Team 列表空空如也,那么你得前往 Xcode > Preferences… 菜单,在 Accounts 标签下新增一个 Apple ID 。你须要输入正确的用户名和密码并点击 Add 按钮完成添加。这一步的细节已经超出了本教程的探讨范围,所以若是你拿不许怎么作, 这个连接 中的文章会一步一步指导你。成功添加 Apple ID后,关闭偏好窗口并返回 General 标签,选择合适的 Team。 

接下来,点击 Capabilities 标签,找到 Push Notifications 这一节,你只须要打开开关便可。 

正如截图中的信息所示,一旦启用推送通知功能,在 Info.plist 文件中就会自动添加相应的权限。 

如今打开 Build Settings 标签,找到 Code Signing 这一节。展开 Provisioning Profile 字段,而后点击 Debug 这一行中的 Automatic 。在展开的列表中有你的开发者帐户下全部的 provisioning profile,你须要选择你上一步下载并安装的那一个。 

由于咱们没有建立发布应用时用到的 provisioning profile,因此咱们无需设置 Release 这一行中的值。不过当你在苹果开发者网站上建立并下载发布应用时用到的 provisioning profile 后,你须要采起与这里相同的操做。 

你能够在 Provisioning Profile 字段上面找到 Code Signing Identity 字段。若是它没有展开,你能够点击左侧的箭头展开它。这一步的操做和刚才相似,点击 Debug 栏中的默认值 iOS Developer (或 iPhone Developer) ,而后在弹出的列表中选择合适的身份证实。以下图所示: 

在实际应用中,别忘了在 Release 栏中设置 Distribution 模式下的身份证实。 

如今,点击 General 标签左侧的 Target 选项,选择 Project : 

找到 Code Signing 这一节,重复以前的步骤。首先选择 Debug 模式下的 provisioning profile,而后设置好正确的 Code Signing Identity 。 

步骤七:注册推送通知

到目前为止,项目中的配置都结束了,如今咱们须要写几行代码了。首先,咱们让应用自身向 iOS 系统注册接收推送通知,并指定咱们但愿接受的通知的类型(好比 badge ,声音或警告信息)。 

事实上,咱们会用到上述全部类型的通知,这也是咱们的在这一步的切入点。打开 AppDelegate.swift 文件,在 application(_:didFinishLaunchingWithOptions:) 方法的 return true 前面添加下面两行代码: 

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {  
    // Override point for customization after application launch.

    let notificationTypes: UIUserNotificationType = [UIUserNotificationType.Alert, UIUserNotificationType.Badge, UIUserNotificationType.Sound]
    let pushNotificationSettings = UIUserNotificationSettings(forTypes: notificationTypes, categories: nil)

    return true
}

咱们首先指定应用中会用到的通知类型,而后建立一个 UIUserNotificationSettings 类型的对象。咱们使用这个对象向系统注册推送通知。若是出于某些缘由,你不想使用上面这个数组中全部种类的通知,只要删除掉不想要的便可。 

如今,咱们将这些可能用到的推送通知的类型告知系统,而且注册接收推送通知:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {  
    ...

    application.registerUserNotificationSettings(pushNotificationSettings)
    application.registerForRemoteNotifications()

    return true
}

尽管以上几行代码都很重要,但最后一行才是设备可以接收推送通知的关键。这一部分中添加的四行代码是一段标准代码,因此你几乎能够把它们用在你的全部项目中。我是说几乎,由于总会有须要修改通知类型的时候。

步骤八:代理方法

注册推送通知是很关键的一步,但这只是咱们要作的编程工做的一半。另一些与编程有关的任务是实现一些代理方法,这样你的应用才能在接收到通知时作出正确响应。咱们一个一个看这些方法:

首先,咱们要实现 application(_: didRegisterForRemoteNotificationsWithDeviceToken:) 方法。它在应用成功注册推送通知后调用。一般状况下,第二个参数相当重要,它包含了每一个设备独有的一个 key,咱们把这个 key 称为 device token 。在实际使用中,你须要把 device token 发送给服务器。这里的服务器是推送消息的最初发起方,它把 device token 和其余必要信息发送给 APN 服务器。这就是为何 APN 服务器可以知道通知的接收者是哪台设备。 

Device token 的格式是这样的:< XXXX XXXX XXXX XXXX XXXX >。一般状况下,在发送给服务器以前,你须要对它进行一些格式转换,好比移除 “<" 和 ">”字符或者移除字符串中间的空格。不过最终始终何种格式仍是取决于服务器如何处理 device token。一些服务提供商会为你提供框架,以便你集成并处理推送消息(如 Parse),若是你打算使用他们的解决方案,那么框架的使用指南会告诉你如何实现格式转换。

无论怎么说,因为咱们在本篇教程中不会使用真正的服务器,你只须要了解以上知识并在实际的应用中进行正确操做便可。目前咱们只打算把 device token 输出到控制台中。咱们须要知道它的值,这样待会儿才能测试推送通知。下面是咱们的实现代码:

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {  
    print("DEVICE TOKEN = \(deviceToken)")
}

咱们不能确保注册推送通知必定是成功的,这个过程可能由于多种缘由而失败。因此,实现下面这个方法也很重要,在这个方法中咱们能够处理注册失败的状况:

func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) {  
    print(error)
}

固然,你须要根据应用的逻辑或需求来进行适当的错误处理。

正如你所知,当应用不在前台运行时,推送通知会出如今设备上。但不少时候,应用会在运行时收到推送通知。在这种状况下,做为一名开发者,你须要用适当的方法处理接收到的通知。在 demo 中,咱们只是把收到的信息输出到控制台里。但在实际的应用中,你绝对不该该这么作。

下面是对应的代理方法的实现:

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {  
    print(userInfo)
}

你还能够根据应用的具体需求,使用更多的代理方法,不过这就不是本文所讨论的内容了。 UIApplicationDelegate 协议的文档能够参考 这个连接 ,你能够从中找到更多有关远程通知的方法。考虑到这篇教程的目的是指导你实现推送通知的功能,了解以上三个代理方法就足够了。 

步骤九:沙盒模式下推送通知

测试推送通知曾经是一件很麻烦的事,由于这只有一种解决方案。要么从头开始写一个命令行脚本,要么找一份已有的脚本并根据本身的应用和设备进行修改。时至今日,这个方案依然行得通,但在 Mac App Store 上已经出现了一些专门用于测试推送通知的应用。没错,这就是咱们将要使用的方案。

使用 Mac 上的应用来测试推送通知的好处在于,它提供了用户界面(UI)给咱们填写必要的数据(好比 device token 或推送通知的证书)。并且这些应用隐藏了“无聊”的编程部分,好比链接到 APN 服务器。实际上,在大多数此类应用中,你只须要指定如下三样东西:

  1. 用于接收测试通知的目标设备的 device token
  2. 推送通知证书的保存路径
  3. 推送通知的载荷(消息,badge 数字和声音)

在这个部分中,我会向你们展现两款应用。不过首先要澄清的是:此举彻底不是为了推广这些应用。你即将看到的这两款应用,以及 Mac App Store 上其余同类的应用,在我看来是都是能够简化工做、节省时间的简单的工具。基于以上逻辑,咱们继续这篇教程,来看看如何成功的推送第一条通知。

第一个要推荐的应用叫 APN Tester Free ,你能够在 这里 找到它。这是一个免费下载的应用,借助这个应用你能够快速的测试推送通知。 

如上图所示,你须要把 device token 复制到 Device Token 文本框中(不带“<"和">”字符)。你只要运行一次 demo 就能够很容易地在控制台中看到 device token。你应该会看到以下图所示的结果: 

首次运行应用时,系统会询问你是否容许接收远程通知。显然,若是你想要测试接收通知就必须选择容许。

在 Payload 文本框中,你须要填写推送通知的细节内容。好比你但愿接收一条消息,显示 badge 数字并播放默认的声音,你应该这样写: 

{"aps":{"alert":"Hello from AppCoda!","badge":1, "sound": "default"}}

若想获取更多有关通知载荷和全部可设置的值的信息,请访问 官方文档 。 

在填写正确的 Certificate 信息时,你须要点击 Browse 按钮,在磁盘中查找开发模式下的推送通知证书(这显然是在 GateWay 的值被设置为 Development 时的操做)。提醒你一下,这个证书的名字应该是 aps_development.cer (除非你修改了文件名)。找到证书并导入到应用中后,你会在控制台中看到一条消息,告诉你 .cer 文件已经被成功的加载了。 

设置完以上内容后,你就已经准备就绪,能够推送通知了,你要作的仅仅是点击 Push 按钮。这时你会在应用的控制台中看到推送通知被发送的消息,若是推送失败,控制台中一样会有红色的文字提示。 

若是你按照教程,一步一步的进行操做而且没有漏掉任何步骤,那么你将会收到第一条推送通知

你彻底能够反复发送通知,这样你能够看到在设备锁屏时、打开通知中心时、甚至是应用运行时等不一样状况下,通知是如何出现的。若是在应用运行时收到通知,你会在 Xcode 的控制台中看到以下输出:

除此之外,你还能够本身修改 badge 数字,开启或关闭通知的声音。经过这些尝试,你能够确保全部的配置都正确无误。

另外一个我打算向你展现的应用是一个叫作 Easy APNs Provider 的程序,你能够在 这里 找到它。这是一个免费应用,它有一些额外的选项可供设置,所以你能够尝试设置推送通知更加高级的功能(好比额外的数据)。 

使用这个应用时,首先点击 Add tokens… 按钮并把 device token 添加到应用中。在弹出的模态视图中,把 token 复制到第一个文本框中,同时务必确保你已经删掉了“<"、">”字符和空格。若是格式有误,token 就没法被添加到应用中。完成这一步后点击 Add 按钮,你会看到 device token 已经被添加到窗口的底部。你还能够选择点击 token 的左侧,为它起一个名字,而后点击 Confirm 按钮完成。 

接下来,点击 2. Choose Certificate file 按钮,再次找到 aps_development.cer文件并把它导入到应用中。成功导入后你会在按钮的旁边看到证书文件的名字。 

确保右下方的下拉控件中被选中的值是: gateway.sandbox.push.apple.com ,而后点击 3. Connect to: 按钮。在显示状态的文本框中,你会看到应用已经成功的链接上了 APN 服务器。 

如今是时候准备推送通知的载荷了,咱们把目光转移到应用窗口的右上角,选择你想测试的选项。为了最好的演示通知效果,你能够选择 Content , badge 和 sound选项。而后在下面的表格中填写 title,content 和 badge 的值,这里的值能够随意设置。若是你想看到载荷的原始模式(JSON 模式),能够点击 Raw 标签,不然就使用当前这种更容易处理的模式。 

最后,点击 5. Send APN 按钮来发送通知,几秒钟内你的设备就会接收到这个通知。 

正如我在这一步开始的时候所说,你并不是只能选择以上这两个工具。你能够去 Mac App Store 中找找其余的软件,它们或许可以更好的实现你的需求。

总结

在这篇教程中,咱们经历了不少步骤,执行了许多不一样的操做。若是你读到了这里,而且成功的在沙盒模式下推送了通知,那么你彻底有理由相信在实际应用中,实时通知推送也会正常工做。你只须要遵循文中列出的操做指南,将它们应用于 Distribution 模式而且补上文中没有处理的部分便可。举个例子吧,你须要编辑你的 App ID 并建立发布应用时用到的 SSL 证书,还须要建立 Distribution 模式下的 provisioning profile,固然还得在项目的 Build Settings 中使用合适的代码签名。不管如何,我都但愿本文可以帮助你理清思路,弄清楚配置通知推送的步骤,最终帮助你更快的完成任务。再见!

相关文章
相关标签/搜索