我目前正在开发服务器端支持以发送iOS推送消息(如果相关,则使用Java中的服务器)。 Apple开发人员文档"Communicating with APNs"声称,如果使用HTTP / 2协议,可以使用刚刚插入标头的证书或JWT令牌。同样,据我所知,证书应该每年手动更新(这对我来说似乎容易出错),而JWT的所有部分都可以无限期地自动重新生成(或不是?)。如果是这样的话,我肯定想尝试使用JWT。
现在,由于没有iOS开发经验,在iOS开发程序中没有注册,甚至没有iOS设备,我很难理解如何编写正确的JWT。也就是说,我没有得到什么
在最后一句中,我不明白这个私钥是什么。
我正在与之合作的iOS开发人员对于研究这个主题并不是非常热心,因为他们一如既往地给我提供了p12证书。所以,如果我能把它们指向正确的位置(最好是图片或工作“路径”),说“发给我这个和这个”,我的问题将有希望得到解决。如果任何开发人员的帐户中都没有这些内容,并且应该通过某个过程来获取,我恐怕我也需要这些说明(对文档或您自己的描述的工作参考将是完美的)。/ p>
如果您能够确认我对JWT的一般假设并向我澄清遗漏的细节,我将非常感激。
答案 0 :(得分:3)
密钥ID和密钥是从Apple Developer帐户门户获得的。该过程在Xcode help中进行了描述,可以通过搜索“配置推送通知”的帮助找到。
您在Developer门户中创建了一个新的推送通知身份验证密钥:
转到证书,标识符&配置文件,在“证书”下,选择“全部或APNs验证密钥”。
点击右上角的添加按钮(+)。
密钥ID是文档中提到的KID
,当您点击下载时,您将获得与此密钥ID相关联的私钥。
您可以使用它来生成令牌,该令牌是具有以下格式的JSON文档:
{
"alg": "ES256",
"kid": "ABC123DEFG"
}
{
"iss": "DEF123GHIJ",
"iat": 1437179036
}
其中kid
是密钥ID,iss
是团队标识符,也来自Developer门户。 iat
是在时间为此令牌发出的,这是自Epoch以来的秒数,以UTC为单位
创建令牌后,必须使用在生成kid
时从门户网站下载的私钥对其进行签名。然后,您必须使用带有P-256曲线和SHA-256哈希算法的椭圆曲线数字签名算法(ECDSA)加密令牌。
为确保安全性,APN需要定期生成新令牌。新令牌具有在声明密钥处发布的更新,其值指示令牌生成的时间。如果令牌问题的时间戳不在最后一小时内,则APN拒绝后续推送消息,返回ExpiredProviderToken(403)错误。