[英]Advice on getting Push Notifications to Work on Production Builds
我有一个生产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存档中的签名不同。”
然后
这是检查提交给App Store的iOS应用程序签名的方法:
我按照说明进行操作,但是不确定在运行此命令时应该寻找什么?
codesign -d --entitlements :- "Payload/YourApp.app"
同样,当我在提交应用程序之前尝试通过Xcode> Window> Organizer并通过档案列表进行测试时,我将通过以下方式导出Itunes Production档案:
Save for iOS App Store Deployment
Sign and Package application for distribution in the iOS App Store
我导出了ipa文件,并将通过Itunes安装到我的iphone。 但是,我的生产部署版本在删除之前从未完成在iphone上的安装(Icon将显示安装进度,但随后消失)
因此,我不太确定如何在不将新构建提交到Itunes Connect中进行审查的情况下测试部署推送通知(不是我可以做的开发推送通知)?
那么,在开发正常进行时,生产部署通常无法发送推送通知的问题是什么? (相同的设备标识符代码,相同的API环境等)
在将存档提交给Itune Connect之前,如何测试部署推送通知(不是开发)?
生产推送无效而开发人员有效的主要原因是您破坏了
“推三法则”。
有两套三胞胎:
a) Prod app - Prod gateway - Prod certificate
b) Dev app - Dev gateway - Dev certificate
您不能将它们混在一起,如果您的组合既不是3个生产型产品也不是3个Dev开发型产品,则无法进行推送。 这就是“三推法则”。
产品应用/开发应用
当您通过Xcode构建/运行时,它是一个Dev应用程序。 当您创建存档并进行临时分发或发布到应用程序商店时,其Prod应用程序。
产品网关/开发网关
这是产品网关:
ssl://gateway.push.apple.com:2195
这是开发网关:
ssl://gateway.sandbox.push.apple.com:2195
产品证书/开发证书
您需要使用Apple供应门户来生成Dev证书和Prod证书,并在适当时使用您的服务器签名(您可以将prod cert和prod密钥以及dev cert和dev密钥合并到单个.pem文件中,从而使其两者都方便签署服务器)。
要记住的另一件事是,在创建存档时,在Xcode代码签名部分中,必须将供应配置文件设置为正确创建的分发配置文件。
我认为关于Pushes的最佳教程是Ray Wenderlich的。
https://www.raywenderlich.com/123862/push-notifications-tutorial
这将遍历个人资料和证书,并使您到达可以进行某些工作的位置,但是,本教程的一个重大遗漏是它没有提到三则规则
在您的情况下,如果您可以按照注释中的指示从服务器向Xcode构建发送推送,则意味着两件事:
1)您正在使用Apple的dev网关。 您必须更改该网关才能将推送发送到生产版本。
2)您的服务器已使用开发证书签名。 您的服务器还必须使用生产证书进行签名。
因此,您必须打破三个规则,解决该问题,然后看看一切是否正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.