有关让推送通知用于生产版本的建议



我有一个生产iOS应用程序,我可以从生产API环境中毫无问题地发送开发推送通知(APNs)。 问题是,当我存档应用程序并发布到 App Store 时,推送通知永远不会从我的生产 API 环境中从 iTunes 下载的应用程序起作用。

  1. 我已经为 APN 分发设置了证书
  2. 我创建了 PEM 文件从证书。
  3. 在 Xcode> 功能中启用了 APN

在Apple的文档中,此处为"推送通知故障排除"https://developer.apple.com/library/ios/technotes/tn2265/_index.html#//apple_ref/doc/uid/DTS40010376-CH1-TNTAG21

"当使用 Xcode 提交应用程序时,Xcode 将使用 代码签名标识和所选的关联预配配置文件。 因此,提交的应用程序的签名及其内容可能是 与 Xcode 存档中的内容不同。

然后

下面介绍如何检查要提交到的 iOS 应用的签名 应用商店:

我按照说明进行操作,但不确定在运行此命令时应该特别寻找什么?

codesign -d --entitlements :- "Payload/YourApp.app"

此外,当我尝试在提交应用程序之前通过转到 Xcode> 窗口>管理器并带有存档列表进行测试时,我将通过以下方式导出 iTunes 生产存档:

Save for iOS App Store Deployment
Sign and Package application for distribution in the iOS App Store

我导出 ipa 文件,并将通过 iTunes 安装到我的 iphone。 但是,我的生产部署版本在被删除之前永远不会完成在我的 iPhone 上的安装(图标将显示安装进度,但随后消失)

所以我不太确定如何在不提交新版本以供 iTunes Connect 中审核的情况下测试部署推送通知(不是我可以做的开发推送通知)?


那么,生产部署在开发工作时无法发送推送通知通常是什么问题?(相同的设备标识符代码,相同的API环境等)

在将归档提交到 Itune Connect 之前,如何测试部署推送通知(不是开发)?

生产推送不起作用而开发推送不起作用的主要原因是你破坏了

"推三法则"。

有两组三胞胎:

a) Prod app - Prod gateway - Prod certificate
b) Dev app - Dev gateway - Dev certificate

你不能混合搭配这些,如果你有任何组合不是 3 生产的东西或 3 开发的东西,那么推送将不起作用。这就是"三推法则"。

生产应用/开发应用

当你通过Xcode构建/运行时,它是一个开发应用程序。当你创建存档并进行临时分发或发布到应用商店 这是一个 Prod 应用程序。

生产网关/开发网关

这是生产网关:

ssl://gateway.push.apple.com:2195

这是开发网关:

ssl://gateway.sandbox.push.apple.com:2195

生产证书/开发证书

需要使用 Apple 预配门户生成开发证书和生产证书,并根据需要对服务器进行签名(可以将生产证书和

生产密钥以及开发证书和开发密钥合并到单个 .pem 文件中,以便方便地使用两者对服务器进行签名)。

要记住的另一件事是,在创建存档时,在 Xcode 代码签名部分中,必须将预配配置文件设置为正确创建的分发配置文件。

我认为关于Pushes的最佳教程是Ray Wenderlich的。

https://www.raywenderlich.com/123862/push-notifications-tutorial

这会遍历配置文件和证书,并使您处于正常工作的位置,但是本教程的一个巨大遗漏是它没有提到三法则

在您的情况下,如果您可以按照注释中的说明将推送从服务器发送到 Xcode 构建,那么这意味着两件事:

1)您正在使用Apple的开发网关。您必须更改该网关才能将推送发送到生产版本。

2) 您的服务器已使用开发证书进行签名。您的服务器还必须使用生产证书进行签名。

所以你一定打破了三法则,修复它,看看事情是否有效。

最新更新