2

我已经通过推送通知发布了我的应用程序更新,但是当我检查我的服务器时,我注意到发送到数据库的令牌是“null”。我使用开发证书和临时生产证书进行了大量测试。两者都成功,但应用商店上的版本没有,我不知道为什么。大约 2 周前我发布了这个问题,有人告诉我不应该使用我用于临时的配置文件,所以我创建了一个具有相同 ID 的新配置文件。昨天更新发布了,我仍然有同样的问题。我需要找到一个永久的解决方案,因为我的用户对所有这些更新感到恼火,但我不知道如何测试,直到它在应用商店获得批准。

如果有人可以请提供想法或帮助,我将不胜感激。提前致谢。

PS如果有帮助,我从我的设备中删除了我的应用程序,然后从应用程序商店重新安装它......它没有问我是否想接收推送通知,但从手机设置中为应用程序启用了推送......

4

4 回答 4

11

APNs 通信有 3 个步骤:

  1. 您的应用注册以在您的 iOS 中的 appDelegate 中接收 APN。这将为您提供一个用于发送通知的 deviceToken。
  2. 您的应用程序将 deviceToken 发送到您的管理服务器
  3. 您的管理服务器与 Apple APNs 服务器连接以发送推送通知

在您的情况下,我知道您的问题出在第 1 步,因为您说您的设备 ID 为空,并且该应用程序没有询问您 APNs 权限。因此,更改您的服务器证书或从 gateway.sandbox.push.apple.com 切换到 gateway.push.apple.com 不会有帮助,因为错误发生在之前。

这显然是您的证书有问题。您应该检查您是否已在Apple iOS Provisioning Portal中完成所有必需的步骤:

  1. 使用您的应用程序的捆绑标识符创建一个AppId 。避免使用通配符,例如 *.
  2. 为您的应用配置 InAppPurchase 选项(这不是问题,因为用于通信中的第 3 步)
  3. 为 Distribution创建一个配置文件,它使用1 中使用的 AppId。(我怀疑这可能是你的问题),然后下载它
  4. 打开 XCode 项目设置并检查您的归档操作是否使用了在 3 中下载的正确配置文件。确保在组织者要求时选择正确的配置文件。(如果上一步没问题,那么这绝对是你的问题,所以仔细检查一下)。

如果您想确保在将二进制文件再次提交到 AppStore 之前使用正确的配置文件生成二进制文件,请执行以下操作:

  1. 使用 Finder 打开二进制文件(首先,在 Library/Developer/XCode/Archives/... 打开存档,右键单击它并“显示包内容”,导航到 /Products/Applications/youApp,再次显示包内容),
  2. 查找文件 embedded.mobileprovision 并使用文本编辑器打开它
  3. 在二进制内容中,您应该能够本地化几个名为“application-identifier”和“aps-environment”的字段。检查它们的值是否正确。

我敢打赌,如果您检查以前存档的应用程序,您会看到不正确的配置文件。这是您的应用不返回 deviceToken 的唯一原因。(除非它接收到但没有正确发送到您的服务器,这是上述通信的第 2 步中的问题)。

于 2012-06-17T16:52:39.263 回答
2

你使用gateway.push.apple.com而不是gateway.sandbox.push.apple.com吗?

于 2012-06-16T21:43:23.413 回答
0

如果您可以通过将安装的设备连接到包含设备令牌空问题的应用程序来检查“控制台应用程序”(组织者>设备>控制台)中的应用程序日志。


  • 基于此,
    找不到适用于应用程序的有效“aps-environment”权利字符串

    问题是由于当前的配置文件不包含 APNS 信息,因为配置文件是在创建 APNS 证书之前创建的。

    解决方案:创建一个新的 Provisioning Profile 并在 Xcode 中选择 Provisioning Profile 将清除错误。

  • 您可以执行终端命令来检查“生产临时配置文件”是否支持 apns 环境,它应该类似于以下内容:

安全 cms -D -i Path_Of_Your_AppStoreDistribution.mobileprovision

<key>Entitlements</key>
<dict>
    <key>application-identifier</key>
    <string>H22LLUHM4D.com.company.appName</string>
    <key>aps-environment</key>
    <string>production</string>
    <key>get-task-allow</key>
    <false/>
</dict>
于 2013-12-02T07:24:23.183 回答
0

如果您为应用程序创建了新的配置文件,我认为您还需要在服务器上生成新证书。

于 2012-06-15T10:35:54.890 回答