从 Amazon SNS(APNS 生产)获取“EndpointDisabled”

Posted

技术标签:

【中文标题】从 Amazon SNS(APNS 生产)获取“EndpointDisabled”【英文标题】:Getting “EndpointDisabled” from Amazon SNS (APNS Production) 【发布时间】:2017-10-20 20:17:34 【问题描述】:

我已经成功测试了使用 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 网站访问导航到 Certificates, IDs & Profiles > Identifiers > App IDs

    创建一个新的 App ID 并启用推送通知服务。

    点击创建新的生产 SSL 证书,然后在 Mac 上的本地钥匙串中创建一个新的 CSR 文件,将其上传到开发者网站(在证书生成过程中)然后下载生成的 .cer 文件。

    双击.cer文件将其添加到mac上的钥匙串中。

    此时,我们已经查阅了建议运行以下命令的 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 文件。

亚马逊接着说:

新创建的 .pem 文件将用于配置 Amazon SNS 以发送移动推送通知消息。

这让我相信文档已经过时,因为将 .pem 文件上传到 SNS APNS 应用程序凭据管理器会返回一个错误,指出它无法读取该文件。

根据 APNS 应用程序的 SNS 凭据管理器,它只接受 .p12 文件...如果是这样,为什么需要创建最终的 .pem 文件?这一步还需要吗?我错过了一步吗?

我还是上传了最终的 .p12 文件,但显然它不起作用。

我很欣赏还有其他类似的问题,但答案是如此广泛,以至于除了反复试验之外没有真正的解决方案。我认为我的问题与错误生成的证书特别相关,或者流程中缺少一个步骤。

我想我正在联系最近做过这件事的任何人,他们可以澄清所涉及的步骤。

谢谢

【问题讨论】:

您是否按照步骤验证了 pem 文件? openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert myapnsappcert.pem -key myapnsappprivatekey.pem @Michael - sqlbot 我做了,但没有改变任何东西。经过大量的试验和错误,我得到了它的工作。我认为 AWS 建议的任何控制台命令都是不必要的。 【参考方案1】:

经过大量的试验和错误,我设法让它工作。我不确定 AWS 文档是否已经过时,但它们肯定已经过时了。

这里是:

    从 Apple Developer 网站访问导航到证书、ID 和配置文件 > 标识符 > 应用程序 ID

    创建一个新的 App ID 并启用推送通知服务。

    单击创建新的生产 SSL 证书,然后在 Mac 上的本地钥匙串中创建一个新的 CSR 文件,将其上传到开发人员站点(在证书生成过程中),然后下载生成的 .cer 文件。

    双击 .cer 文件将其添加到 mac 上的 Keychain。

    打开钥匙串,选择“我的证书”突出显示在第 3 步中添加的证书,可能以“Apple Push Services”开头。

    右键单击证书并将其导出(扩展名为 .p12)。如果它要求您设置密码,您可以留空。

    在 AWS SNS 中,导航到应用程序,单击进入您的 APNS 应用程序(或添加新应用程序)。在“平台应用程序操作”下,单击更新凭据并上传您导出的 .p12 文件。

    最后,单击“从文件加载凭据”并更新以退出应用程序设置。

    在您的应用中享受推送通知。

这对我有用,我不确定为什么 AWS 文档会建议转换文件的命令,看起来它们不是必需的并且造成了很大的混乱。

希望其他人。

【讨论】:

以上是关于从 Amazon SNS(APNS 生产)获取“EndpointDisabled”的主要内容,如果未能解决你的问题,请参考以下文章

iOS:从 AWS SNS 向 APNS 发送推送通知

AWS SNS 从 Apple APNS 的 .p12 文件中获取证书和私钥

Amazon SNS 静默推送

Xamarin.iOS 应用程序未运行时未处理 Amazon SNS 推送通知

Amazon SNS Apple 推送通知教程中的错误(空指针异常)

如何使用 Amazon Simple Notification Service (SNS) 批量发送数百万个推送通知