Xcode:推送通知以在设备工作上构建,而不是在同一设备上安装 TestFlight/App Store

Posted

技术标签:

【中文标题】Xcode:推送通知以在设备工作上构建,而不是在同一设备上安装 TestFlight/App Store【英文标题】:Xcode: push notifications to build on device work but not to TestFlight/App Store install on same device 【发布时间】:2017-08-16 21:10:19 【问题描述】:

我意识到我可以在本地设备上测试开发和产品构建中的推送通知,但它们不适用于来自 TestFlight/App Store 的实际安装。

我认为这与 Xcode 对构建与存档的签名有关,但我无法弄清楚如何修复我当前的配置。我使用 Xcode 自动签名,仅供参考。

我使用 Mixpanel 进行事件跟踪和通知,这也让我确认设备令牌已成功检索。我在那里上传了我的生产推送证书。

如果我在我的设备上运行构建,我可以从日志消息中获取令牌并使用名为 Pusher 的不同实用程序向其发送推送(使用我的产品推送证书)——这非常有效。

但是,如果我从 TestFlight 或 App Store 下载我的应用程序,启动它,从 Mixpanel 获取生成的令牌,然后通过 Mixpanel 发送另一个通知,它永远不会显示。回到 Pusher,如果我尝试使用来自 Mixpanel 的令牌进行推送,我会收到 APN invalid token 错误。

这两个令牌都以相同的方式获取 - 在用户同意通知或推送插件完成设置后立即获取。它们也被相同的代码抓取——但一个来自正在运行的 Xcode 构建,另一个来自 TestFlight 上的存档。

项目设置-我在 Xcode Capabilities 菜单中将 Push 开关设置为打开,并且我已经为开发和生产生成了推送证书(好吧,意外地为 prod 生成了 2 个。我认为这很好):

我还创建了分发和开发配置文件。这就是我的问题所在 - 我读到 Xcode 在归档之前不会使用您创建的分发配置文件,并且如果您在代码签名设置中选择了自动签名,则在此之前使用它自己的配置文件。

这就是我在这里有 2 个个人资料的原因吗?如果我展开下面的条目,我创建的会显示为 Active 并且还会在服务下列出推送通知:

签署我的生产配置文件的证书是与我选择签名的团队匹配的 ios 分发证书:

在写这篇文章时,我意识到可能我的发布构建设置,特别是签名,是错误的。我虽然他们也应该使用我的Iphone Distribution: MyCompany Inc (USA) 证书(而不是默认的iOS Developer 身份),因为我的分发配置文件是使用相同的证书签名的。不幸的是,这似乎也不起作用。

如果我的构建设置如下所示(或者如果我从发布标识的下拉列表中选择通用 iOS Distribution):

我实际上无法构建 - 我收到一条错误消息,指出存在冲突的配置设置。如果我在Release 行(不是Any iOS SDK 行)中使用iPhone Distribution: MyCompany Inc (USA) 证书,我可以创建一个存档,但我看到相同的行为。

我认为肯定是这样,因为我一直在使用 MyCompany Inc(美国)开发团队在验证/上传档案时进行配置。

我还尝试关闭自动签名并将调试和发布配置文件设置为我在 Apple 开发者网站上创建的开发和生产配置文件。那里也没有运气。

回到原点——这是我在使用自动签名时看到的存档摘要信息:

这是正确的,对吧?列出的身份用于对选定的配置文件进行签名,所以就正确的签名而言,这应该是我所需要的,对吧?当然,考虑到其他设置。

此时我完全被难住了——我应该如何为档案配置签名?

【问题讨论】:

【参考方案1】:

这最终并没有成为一个签名问题——虽然我仍然对签署发布版本需要做些什么感到有些困惑,但似乎 Xcode 自动进程可以正确处理它,因为正确的已在您的 Apple Developer 帐户中创建配置文件。

这里有两个问题:

    我用来向测试设备发送推送的 Pusher 实用程序有一个名为“应使用沙盒环境”的选项,默认情况下已选中。一旦我取消选中它,我就可以向已下载 TestFlight/App Store 构建的设备发送推送。我没有意识到生产推送证书可以双向使用。 同时,我仍然在从 Mixpanel 发送通知时遇到问题。事实证明,出于某种原因,我尝试推送的某些设备(即使使用 Pusher)似乎没有收到具有特定优先级的通知。通过将"priority": 10 添加到 Mixpanel 测试通知的自定义数据中,我能够成功发送/接收它们。我通过玩下面 Pusher 屏幕截图中的下拉菜单来解决这个问题:

我自己的设备会收到选择了这 3 个级别中的任何一个的推送,但其他设备只会收到选择了“立即”级别或“优先级:无”级别的推送。为什么?我不知道。

【讨论】:

以上是关于Xcode:推送通知以在设备工作上构建,而不是在同一设备上安装 TestFlight/App Store的主要内容,如果未能解决你的问题,请参考以下文章

从 xcode 推送通知运行应用程序时正在运行,但是在安装 ipa 时它不起作用

IBM Bluemix 通过 PHP 代码推送通知

免费苹果帐户上的 ios 推送通知开发

推送通知不适用于 iPhone 所有设备 (Xcode8) 版本

通过带有开发 SSL 证书的 xcode 在设备中推送通知测试

FCM 推送通知在返回应用程序时打开,而不是在 iOS 的状态栏中显示