ios - 切换到企业分发后推送通知不起作用

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

我在使用临时分发的应用程序上使用推送通知。然后我的客户购买了企业许可证,我生成了新的证书/配置文件,存档了应用程序,现在我们通过企业进行分发,但推送通知不再有效。为了让他们在企业版上工作,我必须采取什么步骤?谢谢!

最佳答案

根据您的描述,您似乎是在一个开发者帐户下注册的 AppId 上进行了最初的实现,然后尝试将构建迁移到第二个开发者帐户。

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

我已经回答了一个关于 APNS Provisioning 的类似问题,这可能有助于进一步阐明幕后发生的事情,所以你可以给 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 key 对并将其提交给 Apple,就像您对原始帐户所做的那样。
  • 在您的推送服务器上安装新证书和私钥
  • 编辑您的 Enterprise Distribution 配置文件,并将其安装在 Xcode 中,注意删除旧的 Enterprise Distribution 配置文件。
  • 使用新的配置文件重建您的应用程序。

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

关于ios - 切换到企业分发后推送通知不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31418667/

相关文章:

iphone - 在不访问源服务器的情况下实现 Apple 推送通知

ios - 在 APNS 的推送通知中发送摄像头

ios - 来自 Objective C 的 Swift 中的完成 block

ios - 来自 NSKeyedUnarchiver 和 Any 的未归档数据的转换失败?输入 OIDAuthState

iphone - ios 当前开发证书即将过期

php - PHP 中的推送通知,我应该使用 CURL 还是stream_context_create()?

ios - 我需要推送通知来提醒用户某事吗

iphone - 如何管理字符串

ios - ionic 2 : iOS Push notification - Register ID Error

ios - 收到 iOS 推送通知时如何打开通知 View Controller ?