使用JSON Web令牌(JWT)构建有效的推送通知
Apple推送通知服务(APN)是Apple设备上所有远程通知的主要亮点。 使用APN,开发人员可以利用该服务来建立参与度并将信息传递给iOS平台上的用户,包括tvOS,macOS和watchOS等其他Apple设备。
使用Apple先前对推送通知服务的更新,您可以使用身份验证令牌安全地连接到APN,以通过HTTP / 2 API发送推送,从而免除了维护有效证书和其他相关任务的压力。 该协议使开发人员轻松构建强大的推送通知。 苹果公司新的基于APN的基于令牌的通信还提供了无状态且快速的通信,这比基于证书的通信要快,因为APN不必验证您的证书或任何其他信息。 此外,您不必总是为每个通知生成新的令牌。 此外,您可以将单个令牌与多个服务器一起使用,以向每个应用程序发送通知。
如果您是iOS开发人员,并且希望与APN实现基于令牌的通信,那么可以像以下几个快速步骤来熟练掌握JWT!
有3个步骤可实现此目的:
- 从会员中心生成签名密钥。
- 生成JSON身份验证令牌。
- 发送推送通知。
从会员中心生成签名密钥
您可以将该密钥用于多个应用程序,并且可以在生产和开发服务器上使用。
要创建签名密钥,请登录会员中心,然后单击“ 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令牌。
这是我们所做的:
- 创建用于令牌生成的
ES256
算法。 - 从上一步中下载的
.p8
文件创建JSON Web密钥。 这是文件的路径。 - 在第3步中,我们创建了有效载荷的
Claim
部分,即当前时间的id和iss
在Team ID之外。 - 在这里,我们使用有效负载和标头构建令牌。 在这里,我们添加了标题
alg
和kid
。 - 最后,我们序列化令牌。
现在,我们可以使用签名密钥路径,密钥ID和团队ID来调用此函数,以获取JSON Web令牌。
$ token = getToken('key / path / mykey.p8','Key ID','Team ID');
请注意,您不需要在每次要发送通知时都创建此令牌。 有效期为一小时,可用于所有通知。
发送推送通知。
现在我们有了JSON Web令牌,我们终于可以将通知发送到设备了。
要将推送通知发送到设备,我们需要设备令牌,请阅读向APN注册您的应用以了解如何获取设备令牌。
这是发送推送通知所要做的。
- 通过将设备令牌添加到
/3/device/
来创建URL路径 - 通过将路径附加到APNs服务器的基本URL来创建URL。
- 在请求正文中添加通知的有效负载。
- 添加
apns-topic
标头。 通常,它是应用程序的捆绑包标识符。 - 添加
Authorization
标头,这里我们使用上一步中生成的JSON Web令牌。Bearer
。 - 最后,执行请求。
最后,我们已准备就绪。 我们只需要调用这些函数来发送通知。
而已!
这是包含所有步骤的最终代码:
管理,做饭,购物-S marter! 立即下载Chefling! https://chefling.page.link/3juF