切换到Enterprise分发后推送通知不起作用

时间:2015-07-14 22:43:40

标签: ios push-notification apple-push-notifications provisioning-profile enterprise

我在使用ad hoc发布的应用上进行推送通知。然后我的客户购买了Enterprise许可证,我生成了新的证书/配置文件,存档了应用程序,现在我们通过Enterprise分发,但推送通知不再有效。为了让他们使用企业版,我需要采取哪些步骤?谢谢!

1 个答案:

答案 0 :(得分:1)

根据您的描述,听起来好像您在一个开发者帐户下注册的AppId上执行了原始实现,然后尝试将该版本迁移到第二个开发者帐户。

在APNS中,生成推送通知有效负载对象的服务器称为提供程序,必须注册APNS证书密钥对才能在服务器与相关Apple推送通知网关(沙箱或生产)之间建立安全连接。此密钥对是其注册的AppId独有的,AppIds是其注册的开发者帐户所独有的 - 即使是精确匹配,在一个帐户下注册的AppId证书也无法转移到第二个帐户。如果可能,我可以查看您应用的AppId,在我自己的帐户中注册该AppId并开始向您的应用发送垃圾推送。值得庆幸的是,Bundle Seed ID是所有AppID的静默元素,可以防止这种情况发生!

我已经回答了类似的有关APNS配置的问题,可能有助于进一步澄清幕后发生的事情,因此您可以给Why I can't add APNs Development iOS typed certificate to provisioning profile一个阅读。

如果您想看到您的AppID实际上是不同的,您可以使用几个终端命令从原始供应配置文件(工作地点)和企业供应配置文件中导出信息(事情并非如此)工作)看到差异:

复制并粘贴以下内容,注意更新特定.mobileprovision的路径:

/usr/libexec/PlistBuddy -c 'Print :Entitlements' /dev/stdin <<< $(security cms -D -i /path/to/your/original.mobileprovision)

然后再次运行此命令,更新企业资源调配配置文件的路径。

此命令的输出将是键值对的字典:

Dict {
  get-task-allow = true
  aps-environment = development
  com.apple.developer.team-identifier = ABC1DEF2G3
  application-identifier = XYZW1ABC2D.com.mycompany.niftyapp
  keychain-access-groups = Array {
      XYZW1ABC2D.*
  }
}

您会注意到这两个命令的输出不同 - application-identifier部分和keychain-access-groups部分将有不同的捆绑种子ID。

那我该如何解决呢?

修复非常简单,无需在应用程序中进行额外的开发工作!但是,您可能需要使用新的配置文件重新编译:

  • 因为您已经进行了设置,您只需登录企业帐户并在企业帐户的AppId中启用推送通知
  • 在AppID的配置中,您需要生成一个新的SSL密钥对,并将其提交给Apple,就像您对原始帐户一样。
  • 在推送服务器上安装新证书和私钥
  • 编辑您的企业分发配置文件,并将其安装在Xcode中,注意删除旧的企业分发配置文件。
  • 使用新的配置文件重建您的应用程序。

重建可能是必要的,因为如果企业AppID没有启用推送通知,企业分发配置文件的权利块将不包含aps-environment密钥,因此禁止连接与APNS网关。