使用JSON Web令牌(JWT)构建有效的推送通知

Apple推送通知服务(APN)是Apple设备上所有远程通知的主要亮点。 使用APN,开发人员可以利用该服务来建立参与度并将信息传递给iOS平台上的用户,包括tvOS,macOS和watchOS等其他Apple设备。

使用Apple先前对推送通知服务的更新,您可以使用身份验证令牌安全地连接到APN,以通过HTTP / 2 API发送推送,从而免除了维护有效证书和其他相关任务的压力。 该协议使开发人员轻松构建强大的推送通知。 苹果公司新的基于APN的基于令牌的通信还提供了无状态且快速的通信,这比基于证书的通信要快,因为APN不必验证您的证书或任何其他信息。 此外,您不必总是为每个通知生成新的令牌。 此外,您可以将单个令牌与多个服务器一起使用,以向每个应用程序发送通知。

如果您是iOS开发人员,并且希望与APN实现基于令牌的通信,那么可以像以下几个快速步骤来熟练掌握JWT!

有3个步骤可实现此目的:

  1. 从会员中心生成签名密钥。
  2. 生成JSON身份验证令牌。
  3. 发送推送通知。

从会员中心生成签名密钥

您可以将该密钥用于多个应用程序,并且可以在生产和开发服务器上使用。

要创建签名密钥,请登录会员中心,然后单击“ Keys部分中的“ All ”。

单击右上角的+按钮,为您的密钥命名,然后在“密钥服务”部分中选择APN。

单击继续,将生成您的密钥。 记下Key ID然后从下载选项中下载签名密钥(扩展名为.p8)。

将这两条信息都存储在安全的地方。 您将需要它来生成用于身份验证的JSON令牌。

生成JSON身份验证令牌

APN需要JSON Web令牌才能遵循以下格式:

 标头 
{
“ alg”:“ ES256”,
“孩子”:“ ABC123DEFG”
}
要求
{
“ iss”:“ DEF123GHIJ”,
“ iat”:1437179036
}
  • alg (Algorithm):加密算法,当前APN仅支持ES256
  • kid (密钥ID):我们在上一步中生成的10位数字的密钥ID。
  • iss (发行人):这是一个10位数字的团队ID,可帮助您开发应用程序。
  • iat (Issed At):生成令牌时从UTC的纪元开始的秒数。

APNs证实了这一点。 令牌不得早于一小时。 否则,APN将返回和ExpiredProviderToken (403)错误。

因此,让我们生成令牌。 我在这里使用PHP,但是您可以选择任何语言。 我正在使用Web令牌框架在PHP中创建JSON Web令牌,您可以使用任何支持Algorithm的框架。

使用composer通过以下命令安装Web令牌框架:

 作曲者需要使用网络令牌/ jwt-framework 

在您的PHP文件中添加以下导入:

现在,让我们创建JSON Web令牌。

这是我们所做的:

  1. 创建用于令牌生成的ES256算法。
  2. 从上一步中下载的.p8文件创建JSON Web密钥。 这是文件的路径。
  3. 在第3步中,我们创建了有效载荷的Claim部分,即当前时间的id和iss在Team ID之外。
  4. 在这里,我们使用有效负载和标头构建令牌。 在这里,我们添加了标题algkid
  5. 最后,我们序列化令牌。

现在,我们可以使用签名密钥路径,密钥ID和团队ID来调用此函数,以获取JSON Web令牌。

  $ token = getToken('key / path / mykey.p8','Key ID','Team ID'); 

请注意,您不需要在每次要发送通知时都创建此令牌。 有效期为一小时,可用于所有通知。

发送推送通知。

现在我们有了JSON Web令牌,我们终于可以将通知发送到设备了。

要将推送通知发送到设备,我们需要设备令牌,请阅读向APN注册您的应用以了解如何获取设备令牌。

这是发送推送通知所要做的。

  1. 通过将设备令牌添加到/3/device/来创建URL路径
  2. 通过将路径附加到APNs服务器的基本URL来创建URL。
  3. 在请求正文中添加通知的有效负载。
  4. 添加apns-topic标头。 通常,它是应用程序的捆绑包标识符。
  5. 添加Authorization标头,这里我们使用上一步中生成的JSON Web令牌。 Bearer
  6. 最后,执行请求。

最后,我们已准备就绪。 我们只需要调用这些函数来发送通知。

而已!

这是包含所有步骤的最终代码:


管理,做饭,购物-S marter! 立即下载Chefling! https://chefling.page.link/3juF