首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我不能将APN开发iOS类型证书添加到供应配置文件中

为什么我不能将APN开发iOS类型证书添加到供应配置文件中
EN

Stack Overflow用户
提问于 2014-12-26 15:07:23
回答 1查看 5.2K关注 0票数 3

我正在尝试为我的应用程序实现App。我创建了APP id,并能够为我的App生成一个SSL证书(它的类型显示为an开发IOS)。但是,当我试图生成一个配置文件时,在我选择应用程序的AppID的屏幕之后,我没有看到为这个应用程序生成的SSL证书。在“证书”列表中,我只看到以前创建的“IOS开发”类型的证书。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-08 01:02:59

您创建的APN证书由文档所称的“APN提供者”使用--在最简单的情况下,这是您自己的服务器,负责跟踪APN设备令牌并生成APN推送有效载荷,指示APN传递到特定设备令牌的消息、声音或徽章。正如应用程序中的可执行代码和其他资产的安排是由加密签名(通过您的iPhone开发或iPhone分发证书和相关的供应配置文件)来保护的一样,您的服务器和Apple网关之间的通信也必须受到保护,以防止流氓第三方冒充您的服务器并向用户发送垃圾推送消息。此APNs证书用于保护和验证服务器与APN的连接,授权它在用户设备上向应用程序提供推送有效负载--确保这些证书的安全!如果有人可以访问SSL证书的私钥,那么他们可以向您的应用程序发送垃圾邮件推送!

您的APN提供程序将需要访问此SSL证书的私钥。没有它,苹果的APN网关将拒绝任何和所有试图连接的尝试。您的提供者不需要您的配置文件--这个an证书完全独立于用于对iOS应用进行代码签名的机制,也就是说,服务器只需要服务器证书,而应用程序需要代码签名证书+供应配置文件。这两项不相交,也不相互交换数据。

的确,您的配置配置文件(开发、Ad分发和apps分发)将需要重新发布,但这特别是为了将aps-environment权限添加到每个配置文件中,允许使用这些配置文件签名的应用程序与APN环境连接。要非常清楚的是,重新颁发这些配置文件并不需要也不应该在profile...your应用程序代码中的任何地方添加APNs证书,因此不需要以任何方式利用该证书,并且会导致应用程序的大小略有增加。

您可以通过打开终端、复制和粘贴以下内容来检查当前的配置配置文件是否包括aps-environment权限,注意更新特定.mobileprovision的路径

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

这个命令做了两件事:

  1. 使用OS中的security工具从-i参数之后标识的.mobileprovision文件中提取plist内容,并将所有这些内容传递给.
  2. PlistBuddy打印Entitlements键的全部内容以屏幕。

未启用推送通知的基本开发配置文件的输出如下所示:

代码语言:javascript
复制
Dict {
  get-task-allow = true
  com.apple.developer.team-identifier = ABC1DEF2G3
  application-identifier = XYZW1ABC2D.com.mycompany.niftyapp
  keychain-access-groups = Array {
      XYZW1ABC2D.*
  }
}

虽然尚未启用推送通知的基本Ad或App Store分发版的输出将类似于:

代码语言:javascript
复制
Dict {
  get-task-allow = false
  com.apple.developer.team-identifier = ABC1DEF2G3
  application-identifier = XYZW1ABC2D.com.mycompany.niftyapp
  keychain-access-groups = Array {
      XYZW1ABC2D.*
  }
}

现在您已经为应用程序的AppId颁发了APN证书,您确实需要逐步执行并重新发布您的开发、add和分发配置文件,以便将aps-environment权限添加到每个配置文件中。

  1. 导航到Certificates, Identifiers, and Profiles工具,并找到与此应用程序关联的配置文件之一。
  2. 单击“编辑”按钮,然后遍历向导的每一步--您不需要对以前定义的设置进行任何更改,只需重新发布当前配置文件!
  3. 单击向导末尾的“下载”按钮。
  4. 将更新的配置文件拖放到Dock上的Xcode图标上以进行安装。

如果您在这些新文件上再次运行同一组终端命令(如果需要,请记住更新到新.mobileprovision的路径!)现在您将看到aps-environment键出现在应用程序的应享权利中:

代码语言:javascript
复制
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.*
  }
}

这个新键有两个值:

  • aps-environment = development --这只会出现在开发配置文件上,允许使用iPhone Developer证书签名的应用程序,并且只能与沙箱APN环境连接
  • aps-environment = production --这只会出现在分发供应配置文件(Ad或apps )上,允许使用iPhone Distribution证书签名的应用程序与生产APN环境连接

根据用于签署构建的证书,确定应用程序将连接到哪个APN网关并获取推送令牌,以及您的应用程序将从哪个网关接收推送消息。开发人员在推送通知方面最常见的错误之一是,与其服务器连接到Apple的APN网关的方式与应用程序的签名方式不匹配:

  • 使用Development证书签名的应用程序只有在提供程序还与Development APNs证书连接到Sandbox APNs网关并在其生成的负载中使用沙箱设备令牌时才能成功地协商APN和接收推送消息。
  • 使用分发证书签名的应用程序只有在提供商还与生产APNs证书连接到生产APN网关并在其生成的负载中使用生产设备令牌时才能成功地协商APN和接收推送消息。

试试看,让我们知道事情进展如何!

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27658697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档