【问题标题】:Push notification work when app installed via XCode but inconsistent when installed via iTunes通过 XCode 安装应用程序时推送通知有效,但通过 iTunes 安装时推送通知不一致
【发布时间】:2015-05-27 07:29:44
【问题描述】:

总结: 如果我的应用程序是通过 XCode 安装的,推送通知总是可以正常工作,但如果通过 iTunes 安装,那么它们是否工作取决于用于签署分发的配置文件。 但是一些曾经有效的配置文件组合不再有效,而有些现在无效。

我的主要问题是应该使用哪种配置文件组合来签署使用推送通知的临时分发,次要问题是为什么我观察到随着时间的推移行为不一致。

详情: 我正在开发一个使用 APNs 的应用程序,并且当应用程序作为临时应用程序分发并通过 iTunes 安装时,在获取通知到达时遇到问题。这些问题显然与它没有使用正确的配置文件签名有关,但过去几周的一些观察让我对我应该使用哪些配置文件来签署分发感到困惑。

我的印象是,在需要签名的两个阶段都应该使用 ad-hoc 配置文件 - 首先在构建存档时将其设置为 XCode 中的代码签名身份,然后对分配。我一直在这样做并且它一直在工作 - 设备已经能够接收推送通知。

然后几周前,设备停止接收推送通知,尽管如果构建使用我的开发配置文件签名并通过 XCode 安装,则能够接收它们,但只有 ad-hoc 发行版停止接收它们。经过几天的尝试,我最终删除了推送和临时配置文件并创建了新配置文件,一切都恢复正常了……直到几天前发生了同样的事情。

我再次创建了一个新的 ad-hoc 配置文件,但我仍然无法让 ad-hoc distrubtions 接收推送通知(尽管如果应用程序是通过 XCode 安装的,设备仍会再次接收它们)。最终,我从使用 ad-hoc 配置文件签署发行版更改为使用苹果推送配置文件,事情又开始工作了。 所以现在我很困惑:

- am I supposed to sign ad-hoc distrubtions using a) the ad-hoc profile for the archive and then ad-hoc profile again when signing the distribtion of the archive or b) the ad-hoc profile for the archive and the push profile when signing the distribution of the archive?

对于 XCode 安装,我将代码签名身份设置为我的开发配置文件。对于临时分发,我将存档的代码签名身份设置为临时配置文件,然后在存档的分发部分再次使用临时或推送对其进行签名。 OR 之所以存在,是因为有时一种组合有效,有时另一种组合有效,因此我的整个问题是应该是哪种组合以及为什么我观察到哪种组合有效而哪种无效的不一致。

谢谢

编辑: 这是一个配置文件列表,即如果我登录到 Apple 配置门户,然后单击配置选项卡,然后单击开发选项卡,它会列出这些:

1) Apple Push Profile - 需要启用 APNs

2) NNN 开发配置文件(其中 NNN 是项目名称)

3) iOS 开发配置文件

4) iOS 团队配置文件

如果我单击配置选项卡,然后在分发选项卡上列出这些:

1) 临时

在我几个月来对书籍、文档、论坛的所有广泛搜索中,我还没有找到明确的解释在什么情况下应该使用上述组合的和考虑到推送通知。 一个问题是大多数文档和示例都没有考虑推送通知,这是一个关键的遗漏,因为如果没有以正确的顺序正确组合配置文件,应用程序可以安装到设备上,但永远不会收到推送通知。

【问题讨论】:

    标签: ios xcode


    【解决方案1】:

    我也有过类似的痛苦。

    我回复如下:

    • 我是否应该使用 a) 存档的临时配置文件签署临时分布,然后在签署临时文件时再次使用临时配置文件 档案的分发或 b) 档案的临时配置文件 以及签署档案分发时的推送配置文件?

    使用 ad-hoc 或开发签名存档构建无关紧要。 不同之处在于 Organizer-Archives 中分发按钮时的签名。

    使用开发配置身份对其进行签名。不是临时的。

    我发现签名令人困惑,因为有 2 个以上的地方可以定义签名操作。但是在这种特定情况下,我已经完成了受控测试,并发送了临时分发,我什至不知道是否有可能在应用正式发布之前将远程通知发送到这些应用中,并且可以使用生产网关推送.

    不过,我相信在应用商店发布之前推送到 ad-hoc 发行版应该是可能的。

    【讨论】:

    • 感谢您的回复,可以获得推送通知(有单独的发布和测试推送配置文件和服务器专门为此)但是它必须在某个阶段与推送配置文件一起使用,否则它不起作用,因此必须在某个阶段考虑到这一点,我 99.9% 确信使用开发配置文件签名不会使推送工作。 (但我现在无法检查)。
    • 我认为引起你我和其他人问题的是术语和行动的巨大重叠。术语分发适用于 adhoc 和应用商店。例如,“发布”主要是分发的同义词,但除此之外,它还可以用来指代为测试安装而打包的调试版本。根据您的问题和上面的评论,我不能 100% 确定您所说的推送配置文件是什么意思,因为推送配置文件可能意味着 dev 或 dist adhoc 或 dist AppStore。废话。不是你的错,只是太多交叉含义的术语。加上签东西的不同地方,等等。
    • 推送配置文件是指启用推送的配置文件(普通配置文件没有这个,您必须专门创建一个)。我更新了我的问题,以附加我在门户中拥有的配置文件。
    【解决方案2】:

    两天后试图找出同样的问题出了什么问题,我发现当通过 xcode 安装时,通知与开发 (gateway.sandbox.push.apple.com) url 一起工作。将其导出为 ipa (ad-hoc) 并手动安装需要从生产 url gateway.push.apple.com 发送的通知(包括生产密钥)。因此,在创建了这两个密钥之后,我设法在使用 xcode 时使用开发 URL 发送通知,并在从导出的 ipa 安装时使用生产 URL 发送通知。

    【讨论】:

    • 我的问题是两年前的问题,我在几个月前就找到了原因。我已经标记了你的答案,以防人们在这里编码以供参考。
    • 试试我的答案:stackoverflow.com/questions/34718985/…。如果您在 Xcode 构建设置中为开发 APNS 设置自定义配置文件,它将 100% 工作。
    【解决方案3】:

    如果您处于使用开发应用程序证书和配置的开发阶段,您还应该为 PUSH 通知生成开发证书,该证书必须安装在服务器上以通过 Apple 测试 APNS 进行身份验证。
    如果处于预生产或生产阶段,您应该使用分发证书和 ADHOC 或 APPSTORE 配置为您的应用程序签名,您还应该生成一个分发 PUSH 证书,该证书必须安装在与苹果 APNS 通信的服务器上。 我可以建议您密切关注防火墙阻止的端口(这种痛苦也是因为苹果的 apns 具有广泛的 ip 范围)并注意您的应用程序的苹果 ID 必须与曾经用于生成推送证书的 ID 匹配。 希望这会有所帮助,
    安德烈亚

    【讨论】:

    • 谢谢,但正如我提到的推送工作正常,如果我通过 XCode 安装,我自己配置​​或接收推送消息没有任何问题,我的问题不在于无法接收推送通知。我已经为我的问题添加了摘要。 “..分发证书和ADHOC..”是什么意思? Ad-hoc 是一种分发证书。
    • ADHOC 和 APPSTORE 配置使用分发证书,因此它们将仅与 PUSH 分发证书匹配,当然还有正确的 APP ID。您知道您使用哪种配置来构建您的应用程序以供以后共享吗?与您通过 xcode 安装使用的相同吗?通常对于 ADHOC 分发,我使用 APPSTORE 配置进行存档并与 ADHOC 配置共享。
    • 对于 XCode 安装,我将代码签名身份设置为我的开发配置文件。对于临时分发,我将存档的代码签名身份设置为临时配置文件,然后在存档的分发部分再次使用临时或推送对其进行签名。 OR 之所以存在,是因为有时一种组合有效,有时另一种组合有效,因此我的整个问题是应该是哪种组合以及为什么我观察到哪种组合有效而哪种无效的不一致。
    • 组合是我已经告诉过您的组合:使用应用商店配置归档,使用 ADHOC 配置分发,您的服务器应使用分发 PUSH 证书对 APNS 进行身份验证。当然,你的 appid 应该匹配。
    • 但是我还没有到应用商店发布的阶段,所以没有应用商店的资料。这就是 ad-hoc 的用途——在不使用应用商店的情况下在内部发布。因此,为什么需要在临时分发时创建和使用应用商店配置文件?如果我让您感到沮丧,我很抱歉,但是您的回答比澄清更令人困惑,并且没有用简单明确的术语说明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 2010-11-17
    相关资源
    最近更新 更多