有关将推送通知用于生产构建的建议

时间:2016-04-26 18:14:11

标签: ios xcode swift xcode7

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

  1. 我已设置APN分发证书
  2. 我创建了PEM文件 从证书。
  3. 在Xcode中启用APN>功能
  4. 在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之前测试部署推送通知(而不是开发)?

1 个答案:

答案 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)您的服务器已使用开发证书进行了签名。您的服务器也必须使用生产证书进行签名。

所以你必须打破三个规则,修复它,看看是否有效。