我已成功测试使用SNS向Apple设备发送推送通知,目前在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
创建新的App 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
返回内部钥匙串选择键,突出显示应用私钥并将其导出.p12
文件。
返回命令提示符,按照AWS文档运行以下命令:openssl pkcs12 -in myapnsappprivatekey.p12 -out myapnsappprivatekey.pem -nodes -clcerts
以生成另一个.pem
文件。
亚马逊继续说:
新创建的.pem文件将用于配置Amazon SNS以发送移动推送通知消息。
这让我相信文档已过时,因为将.pem
文件上传到SNS APNS应用程序凭据管理器会返回错误,指出它无法读取文件。
根据APNS应用程序的SNS凭证管理器,它只接受.p12
文件......如果是这种情况,为什么需要创建最终的.pem
文件?这一步还需要吗?我错过了一步吗?
无论如何我上传了最终的.p12文件,但很明显,它不起作用。
我很欣赏还有其他与此相似的问题,但答案非常广泛,除了反复试验之外,没有其他真正的解决方案。我认为我的问题与错误生成的证书有关,或者在流程中缺少一个步骤。
我想我正在联系那些最近做过这件事的人,他们可以澄清所涉及的步骤。
由于
答案 0 :(得分:2)
经过大量的反复试验后,我设法让它发挥作用。我不确定AWS文档是否过时,但它们肯定会过度杀戮。
这里是:
从Apple Developer网站访问导航到证书,ID&个人资料>标识符>应用ID
创建新的App ID并启用推送通知服务。
单击“创建新的生产SSL证书”,然后在Mac上的本地钥匙串中创建新的CSR文件,将其上载到开发人员站点(在证书生成过程中),然后下载生成的.cer文件。
双击.cer文件,将其添加到mac上的Keychain。
打开钥匙串,选择“我的证书”,突出显示在步骤3中添加的证书,可能以“Apple推送服务”开头。
右键单击证书并将其导出(扩展名为.p12)。如果要求您设置密码,可以留空。
在AWS SNS中,导航到“应用程序”,单击您的APNS应用程序(或添加新应用程序)。在“平台应用程序操作”下,单击“更新凭据”并上载导出的.p12文件。
最后,点击“从文件加载凭据”并更新以退出应用程序设置。
在您的应用中享受推送通知。
这对我有用,我不确定为什么AWS文档建议转换文件的命令,看起来它们不是必需的并且引起了很大的混淆。
希望别人有人。