我有一个生产iOS应用程序,我可以从我的生产API环境发送开发推送通知(APN)没问题。问题是当我将应用程序存档并发布到App Store时,推送通知永远不会从我从生产API环境从Itunes下载的应用程序中发挥作用。
在Apple的文档中,"排查推送通知" https://developer.apple.com/library/ios/technotes/tn2265/_index.html#//apple_ref/doc/uid/DTS40010376-CH1-TNTAG21
"当使用Xcode提交应用时,Xcode将使用该代码重新签名 您选择的代码签名标识和关联的配置文件。 因此,提交的应用程序及其内容的签名可能是 不同于Xcode存档中的内容。"
然后
以下是检查提交的iOS应用的签名的方法 App Store:
我按照说明操作但不确定在运行此命令时我应该特别注意什么?
codesign -d --entitlements :- "Payload/YourApp.app"
此外,当我尝试通过转到Xcode>提交应用程序之前测试它窗口>组织者和档案列表我将通过以下方式导出Itunes Production Archive:
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之前测试部署推送通知(而不是开发)?
答案 0 :(得分:2)
生产推动不起作用的主要原因是你们已经打破了
"推三法则"。
有两组三胞胎:
a) Prod app - Prod gateway - Prod certificate
b) Dev app - Dev gateway - Dev certificate
你不能将这些混合搭配在一起,如果你有任何组合,不是3件生产或3件事,那么推动就不会起作用。 这是"推三规则"。
Prod App / Dev App
当您通过Xcode构建/运行它的Dev应用程序时。当你 创建存档并进行临时分发或发布到 应用程序存储它的Prod应用程序。
Prod Gateway / Dev Gateway
这是prod网关:
ssl://gateway.push.apple.com:2195
这是开发网关:
ssl://gateway.sandbox.push.apple.com:2195
产品证书/开发证书
您需要使用Apple配置门户生成Dev证书和Prod证书并在适当的时候签署您的服务器(您可以将prod证书和prod密钥以及dev证书和dev密钥合并到一个.pem文件中这样可以方便地用两种方式对服务器进行签名。
要记住的另一件事是,在创建存档时,在Xcode代码签名部分中,必须将配置文件设置为正确创建的分发配置文件。
我认为推送的最佳教程是Ray Wenderlich。
https://www.raywenderlich.com/123862/push-notifications-tutorial
这会覆盖个人资料和证书,并让你找到一个有效的位置,但本教程的一个重大遗漏是它没有提到三个规则
在您的情况下,如果您可以按照评论中的说明从服务器发送推送到Xcode版本,那么这意味着两件事:
1)您正在使用Apple的开发网关。您必须更改该网关才能将推送发送到生产版本。
2)您的服务器已使用开发证书进行了签名。您的服务器也必须使用生产证书进行签名。
所以你必须打破三个规则,修复它,看看是否有效。