推送通知从本地环境传递,而不是从服务器传递

Push notification delivers from local env, but not from server

我正在尝试让我的服务器通过 Apple 的推送通知服务传送推送通知。 (APNs)

我的设置如下:

我已经在 mac 上创建了一个开发证书。当我 运行 我的本地服务器成功发送通知到我的 iPhone.

我现在正试图让它在我的服务器上运行,但没有成功。我已经在本地生成了 CSR,将其上传到 Apple 的 iOS App ID 编辑器中并下载了 CER。然后,我使用 Keychain Access 将 CER 导出到 p12,并使用以下命令将其转换为 PEM 文件:

openssl pkcs12 -in apn_production.p12 -out apn_production.pem -nodes -clcerts

休斯顿需要这个 PEM 文件来发送推送通知,我已经为开发做了同样的事情并且它有效,但它现在需要从服务器发送,这可能是问题所在,我没有收到任何错误尽管。只是没有收到通知,这可能是我犯的 production/development 错误。

我还尝试在我的服务器上创建一个 CSR 文件并通过 iOS App ID 的编辑器上传它,但是当我下载 CER 并在 Keychain Access 中打开它时,我无法将它导出到P12,仅适用于 CER、PEM 和 P7B。此文件中也没有私钥,它位于我本地创建的开发证书中。此外,当我将它导出到 PEM 并在我的服务器上与 Houston 一起使用时,它会抛出证书无效的错误。

我尝试的另一件事是将我的 VPS 生成的 CSR 上传到 Apple Push Certificates Portal。这会引发错误,提示证书无效。

有几件事我不确定:

1.我处于开发模式还是生产模式?

该应用程序尚未在应用程序商店中,但它处于测试模式,可以通过 TestFlight 下载,并且需要从我的服务器发送推送通知。这是生产环境还是开发环境,还是我需要在构建应用程序之前在某处手动定义它?

2。是否可以为要在我的服务器上使用的 PEM 使用本地生成的 CSR?

当我最终需要一个 PEM 来从我的服务器发送推送通知时,我需要一个服务器生成的 CSR 作为开始,我说得对吗?

3。现在怎么办,我应该怎么调试?

从我本地生成的 CSR 生成的 PEM 现在已上传到我的服务器,Houston 不会抛出任何错误。推送通知没有到达,那么,我该怎么办,我可以在某个地方跟踪这些推送通知吗?是否有一些我可以阅读的 APN 日志文件?

1) 您需要使用生产证书通过试飞发送推送通知。

2) 您不需要服务器生成的 CSR。您只需要一个有效的“.pem”来发送推送通知。

3) 您需要从推送发送脚本中的推送通知 url 中删除 sanbox(沙盒模式)。还要检查你的服务器的端口 2195 是否打开以进行通信,因为 APNS 通过此端口进行通信。