关于让推送通知在生产版本上工作的建议
Advice on getting Push Notifications to Work on Production Builds
我有一个生产 iOS 应用程序,我可以从我的生产 API 环境中毫无问题地发送开发推送通知 (APN)。问题是当我存档应用程序并将其发布到 App Store 时,从我的生产 API 环境中从 Itunes 下载的应用程序无法使用推送通知。
- 我已经为 APN 分发设置证书
- 我创建 PEM 文件
从证书。
- APN 已在 Xcode > 功能
中启用
在此处的 Apple 文档中 "Troubleshooting Push Notifications"
https://developer.apple.com/library/ios/technotes/tn2265/_index.html#//apple_ref/doc/uid/DTS40010376-CH1-TNTAG21
"When using Xcode to submit an app, Xcode will re-sign it using the
code signing identity and associated provisioning profile you select.
So the signature of the submitted app and its contents might be
different than what's in the Xcode archive."
然后
Here's how to check the signature for an iOS app being submitted to
the App Store:
我按照说明操作,但不确定在 运行 此命令时我应该具体查找什么?
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 环境等)
如何在将存档提交到 Itune Connect 之前测试部署推送通知(不是开发)?
生产推送不起作用而开发推送起作用的主要原因是您破坏了
"Push Rule of Three".
有两组三胞胎:
a) Prod app - Prod gateway - Prod certificate
b) Dev app - Dev gateway - Dev certificate
您不能将它们混合搭配在一起,如果您的任何组合不是 3 个生产事物或 3 个开发事物,那么推送将不起作用。
这是 "Push Rule of Three".
产品 App/Dev 应用
当您通过 Xcode build/run 它是开发应用程序时。当你
创建存档并进行临时分发或发布到
应用商店它是一个 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) 您的服务器已使用开发证书进行签名。您的服务器还必须使用生产证书进行签名。
所以你一定是违反了三法则,修正它,看看是否可行。
我有一个生产 iOS 应用程序,我可以从我的生产 API 环境中毫无问题地发送开发推送通知 (APN)。问题是当我存档应用程序并将其发布到 App Store 时,从我的生产 API 环境中从 Itunes 下载的应用程序无法使用推送通知。
- 我已经为 APN 分发设置证书
- 我创建 PEM 文件 从证书。
- APN 已在 Xcode > 功能 中启用
在此处的 Apple 文档中 "Troubleshooting Push Notifications" https://developer.apple.com/library/ios/technotes/tn2265/_index.html#//apple_ref/doc/uid/DTS40010376-CH1-TNTAG21
"When using Xcode to submit an app, Xcode will re-sign it using the code signing identity and associated provisioning profile you select. So the signature of the submitted app and its contents might be different than what's in the Xcode archive."
然后
Here's how to check the signature for an iOS app being submitted to the App Store:
我按照说明操作,但不确定在 运行 此命令时我应该具体查找什么?
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 环境等)
如何在将存档提交到 Itune Connect 之前测试部署推送通知(不是开发)?
生产推送不起作用而开发推送起作用的主要原因是您破坏了
"Push Rule of Three".
有两组三胞胎:
a) Prod app - Prod gateway - Prod certificate
b) Dev app - Dev gateway - Dev certificate
您不能将它们混合搭配在一起,如果您的任何组合不是 3 个生产事物或 3 个开发事物,那么推送将不起作用。 这是 "Push Rule of Three".
产品 App/Dev 应用
当您通过 Xcode build/run 它是开发应用程序时。当你 创建存档并进行临时分发或发布到 应用商店它是一个 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) 您的服务器已使用开发证书进行签名。您的服务器还必须使用生产证书进行签名。
所以你一定是违反了三法则,修正它,看看是否可行。