我有一个生产iOS应用程序,我可以发送开发推送通知(APN)没有问题,从我的生产API环境。问题是,当我将应用程序存档并发布到应用程序商店时,推送通知从Itunes从我的生产API环境下载的应用程序永远不会起作用。
我已经为APN分发设置了证书
我创建PEM文件
从证书上。
在Xcode>功能中启用了APN
在苹果的文档中,这里是“推送通知疑难解答”
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>Window>Organizer进行测试时,我将通过以下方式导出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环境等)
如何在将存档提交到iTunes Connect之前测试部署推送通知(而不是开发)?

最佳答案

生产推送不起作用而开发推送不起作用的主要原因是您破坏了
“推三尺”。
有两组三胞胎:

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

你不能混合和匹配这些东西,如果你有任何组合不是3个生产或3个开发的东西,那么推就不起作用。
这是“三推法则”。
产品应用程序/开发应用程序
当您通过Xcode构建/运行它的开发应用程序时。当你
创建存档并制作一个临时分发或发布到
app store是一个Prod应用。
产品网关/开发网关
这是prod网关:
ssl://gateway.push.apple.com:2195

这是dev网关:
ssl://gateway.sandbox.push.apple.com:2195

生产证书/开发证书
您需要使用Apple provisioning门户生成一个Dev cert和一个Prod cert,并在适当时使用为您的服务器签名(您可以将Prod cert和Prod key以及Dev cert和Dev key组合到一个.pem文件中,这样就可以方便地使用这两个文件为服务器签名)。
另一件要记住的事情是,在创建归档文件时,在Xcode代码签名部分,必须将配置配置文件设置为正确创建的分发配置文件。
我认为最好的推送教程是雷·温德里奇的。
https://www.raywenderlich.com/123862/push-notifications-tutorial
这将检查配置文件和证书,并让您找到一个工作的位置,但是本教程的一个重大遗漏是它没有提到三个规则
在您的情况下,如果您可以从服务器向Xcode构建发送一个推送(如注释中所示),那么这意味着两件事:
1)您正在使用苹果的dev网关。必须更改该网关才能向生产生成发送推送。
2)您的服务器已使用开发证书签名。您的服务器还必须使用生产证书进行签名。
所以你一定是违反了三条规则,把它修好,看看是否管用。

关于ios - 有关在生产版本中使用推送通知的建议,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36872714/

10-15 13:41