如果应用程序是通过 iTunes 安装的,推送通知不起作用,但如果通过 XCode 安装,它们会起作用

Posted

技术标签:

【中文标题】如果应用程序是通过 iTunes 安装的,推送通知不起作用,但如果通过 XCode 安装,它们会起作用【英文标题】:Push notifications don't work if app is installed via iTunes but they do if installed by XCode 【发布时间】:2012-10-11 15:40:28 【问题描述】:

我有一个使用推送通知的应用,我正在尝试将其分发给测试人员进行测试。

如果我创建了一个通过 iTunes 安装的 ad-hoc 发行版,那么除了推送通知之外一切都正常,推送通知永远不会到达。 但如果应用是使用 XCode 安装的,那么推送通知确实会到达。

当我使用 XCode 构建安装时,我将 XCode 中的代码签名身份设置为我的开发配置文件。当我为临时分发构建时,我将 XCode 中的代码签名身份设置为构建存档时的临时分发配置文件,然后使用临时配置文件再次签署存档以进行分发(我发现这是唯一的组合这将允许通过 iTunes 安装而不会出现错误消息)。

所有设备都已添加到临时分发配置文件和苹果推送配置文件(以及团队配置配置文件),配置文件已在 XCode 中更新和刷新。 即使使用我自己的 iPhone,如果我使用 XCode 而不是使用 iTunes 安装,我也可以获得推送通知。

我是否使用不正确的配置文件签署临时分发,如果是,配置文件的正确组合是什么? 为什么推送通知不适用于临时分发但在通过 XCode 安装应用程序时会起作用,还有其他原因吗?

这些是使用的配置文件:

1) Apple push profile which has an App id of abcdef.com.company.mno
2) Project Development profile which has an App id of abcdef.com.company.mno
3) ios Team provisioning profile which has an app id of abcdef.*
4) AdHoc Distribution profile which has an app id of abcdef.com.company.mno
5) My developer profile which has an app id of abcdef.com.company.mno

** 自从第一次发布此内容后,我尝试使用 abcdef.com.company.mno 应用程序 ID 创建新的 iOS 团队配置文件,但没有任何区别 **

abcdef.com.company.mno 应用 ID 显示开发推送通知已启用(这是正确的,我们尚未使用生产推送)。它的开发推送 SSL 证书也显示为已启用。

代码签名身份是:第一张图片我用于使用 XCode 安装/运行的图片,第二张图片用于构建临时分发的存档。

XCode 中 iPhone 分发配置文件的描述为:“Ad Hoc distribution profile (for bundle identifiers com.company.mno)”。

【问题讨论】:

【参考方案1】:

今天早上我在尝试编译 In House 应用程序时遇到了类似的问题(我认为这是同一个问题)。我将 iPhone 插入计算机,并在控制台中看到一条警告,例如:entitlement 'aps-environment' has value not allowed by a provisioning profile

我尝试了这个解决方案,但没有成功:

'aps-environment' has value not permitted by a provisioning profile

所以,我的应用程序在 Xcode 运行的发布模式下正常工作,但是当我尝试使用 Ad Hoc 证书导出时,我的 iPhone 在控制台上显示了该消息。

最后我去了 iPhone 中的配置文件并删除了所有内容。我去了管理器中的个人资料,也全部删除了。我通过配置门户编辑了配置文件并再次下载了它们。

我将代码签名更改为不进行代码签名。再次更改为 In House 配置文件,导出到文件,一切正常!

【讨论】:

如果您在代码签名时选择了“App Ad-hoc”配置文件并且您对配置配置文件进行了任何更改,您必须选择任何其他配置文件并再次选择它以刷新更改(所以我选择了 Don 't 代码签名,然后再次选择它) 谢谢,不过似乎没有任何影响。您是否在两个阶段都使用临时配置文件进行签名?我想知道 iOS 团队配置文件是否需要为 abcdef.com.company.mno 才能正常工作。 是的。您是否尝试将某些设备添加/删除到配置文件,然后重试?正如我的回答所说,我在一些线程中读到,如果人们在创建配置文件后在应用程序上配置推送,他们正在试验问题。这就是我告诉你编辑配置文件的原因。 当您说编辑配置文件时,您是指临时配置文件还是 iOS 团队配置文件。我已经编辑了可以在门户上编辑的所有内容,但是对于 iOS 团队配置文件,它说它由 XCode 管理,因此无法编辑。 我指的是临时配置文件。当设备注册推送通知(通过 Ad Hoc 安装)时,您是否检查过您的 iPhone 是否正在告诉某些内容(只是任何警告或其他内容)?【参考方案2】:

您可能正在使用通配符应用程序 ID 配置文件签署临时版本。确保构建设置中的代码签名身份明确使用您的显式应用程序 ID 配置文件。

【讨论】:

谢谢,但是临时配置文件似乎是针对明确的应用程序 ID(在原始帖子中添加了详细信息)而不是通配符? 显示 Xcode 项目中的代码签名身份设置(屏幕截图)。那真的很有帮助。如果您使用的是“自动配置文件选择器”,则可能选错了。 Xcode 在这方面有点愚蠢。 (我一直在提交有关它的错误,但他们还没有修复它。) 对于 XCode 构建,我手动将它们全部设置为开发配置文件,对于临时构建,我手动将它们全部设置为临时配置文件。我没有使用自动选择器。我会在几分钟后发布屏幕截图。 我尝试的另一件事是创建一个新的 iOS 团队配置文件,它使用特定的应用程序 ID 而不是通配符,但没有任何区别。 听起来你在做所有正确的事情。我会在门户网站上创建一个新的配置文件,下载它,然后尝试一下。

以上是关于如果应用程序是通过 iTunes 安装的,推送通知不起作用,但如果通过 XCode 安装,它们会起作用的主要内容,如果未能解决你的问题,请参考以下文章

将新版本上传到 iTunes 后,我收到推送通知权利问题

phonegap build:没有收到 ios 推送通知

在没有推送通知的情况下使用 Parse

使用 TestFlight 通过 Parse 推送通知

推送通知被发送到不同的应用程序

证书:未知,配置文件:xcode 10.1 存档中没有