我已经成功地使用SNS向苹果设备发送推送通知,在Xcode中使用APNS_SANDBOX。
我们现在准备进入生产环境,但在APNS(生产)应用程序端点上正确设置证书时遇到了极大的困难。
我正在按照开发期间遵循的相同流程进行操作,并且咨询了几个指南。
每次尝试向设备发送推送通知时,我们都会收到以下失败通知:
{"DeliveryAttempts":1,"EndpointArn":"arn:aws:sns:eu-west-1:123456789:endpoint/APNS/Name/e591d1a1-8db3-3382-8091-ab1a3cb3cac5","EventType":"DeliveryFailure","FailureMessage":"Endpoint is disabled","FailureType":"EndpointDisabled","MessageId":"08a70f95-773c-58fb-a6f9-5df1650eeb19","Resource":"arn:aws:sns:eu-west-1:123456789:app/APNS/Name","Service":"SNS","Time":"2017-10-20T15:02:10.824Z"}
我理解这可能涉及几个问题,但很可能是与上传到SNS的证书有关的问题。
我们遵循的过程:
从Apple Developer网站访问导航到 证书、ID和配置文件 > 标识符 > 应用程序ID
创建新的应用程序ID并启用推送通知服务。
单击创建新的生产SSL证书,然后在Mac上的本地密钥链中创建一个新的CSR文件,将其上传到开发者网站(在证书生成过程中),然后下载生成的
.cer
文件。双击
.cer
文件将其添加到Mac上的Keychain中。此时,我们参考了http://docs.aws.amazon.com/sns/latest/dg/mobile-push-apns.html文档,建议运行以下命令:
openssl x509 -in myapnsappcert.cer -inform DER -out myapnsappcert.pem
回到Keychain中,选择Keys,突出显示应用程序的私钥,并将其导出为
.p12
文件。回到命令提示符中,按照AWS文档运行以下命令:
openssl pkcs12 -in myapnsappprivatekey.p12 -out myapnsappprivatekey.pem -nodes -clcerts
以生成另一个.pem
文件。
Amazon接着说:
新创建的.pem文件将用于配置Amazon SNS以发送移动推送通知消息。
这让我认为文档已经过时,因为将.pem
文件上传到SNS APNS应用程序凭据管理器会返回错误,指出无法读取该文件。
根据APNS应用程序的SNS凭据管理器,它只接受.p12
文件...如果是这样,为什么还需要创建最终的.pem
文件?这一步仍然需要吗?我错过了什么步骤吗?
我仍然上传了最终的.p12文件,但显然不起作用。
我知道还有其他类似的问题,但答案都太笼统了,除了反复试验以外,没有真正的解决方案。我认为我的问题特别与生成的证书不正确或者流程中缺少某个步骤有关。
我想向最近完成此任务的任何人寻求帮助,可以澄清涉及的步骤。
谢谢
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert myapnsappcert.pem -key myapnsappprivatekey.pem
- Michael - sqlbot