certificate - 为什么我无法将APNs Development iOS类型的证书添加到配置文件中

标签 certificate apple-push-notifications provisioning

我正在尝试为我的应用程序实现APNS。我创建了APP ID,并且能够为我的App生成SSL证书(该类型显示为APNs开发IOS)。但是,当我尝试生成配置文件时,在选择应用程序的AppID的屏幕之后,没有看到我为此应用程序生成的SSL证书。在证书列表中,我仅看到先前创建的“IOS开发”类型的证书。

最佳答案

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

您的APNs提供商将需要访问此SSL证书的私钥。没有它,Apple的APNs网关将拒绝所有连接尝试。您的提供商不需要您的配置文件-该APNs证书与用于对iOS应用进行代码签名的机制完全独立,也就是说,服务器仅需要服务器证书,而应用则需要代码签名证书+供应配置文件。这两个项目不相交,也不相互交换数据。

的确,您的配给配置文件(开发,临时分发和App Store分发)确实需要重新发布,但这是专门为每个配置文件添加aps-environment授权,以允许使用这些配置文件签名的应用程序与APNs环境。绝对清楚,重新发布这些配置文件不会且不应在配置文件中的任何位置添加您的APNs SSL证书...您的应用程序代码不需要以任何方式利用此证书,并且会导致应用程序大小的小幅增加。

您可以通过打开终端,复制并粘贴以下内容来检查当前的配置文件是否包含aps-environment权利,请注意将路径更新为特定的.mobileprovision:
/usr/libexec/PlistBuddy -c 'Print :Entitlements' /dev/stdin <<< $(security cms -D -i /path/to/your/application.mobileprovision)
此命令有两件事:

  • 使用OS X中的security工具从.mobileprovision参数后标识的-i文件中提取plist内容,并将所有这些内容传递到...
  • PlistBuddyEntitlements键的全部内容打印到屏幕上。

  • 尚未为推送通知启用的基本开发配置文件的输出将类似于以下内容:
    Dict {
      get-task-allow = true
      com.apple.developer.team-identifier = ABC1DEF2G3
      application-identifier = XYZW1ABC2D.com.mycompany.niftyapp
      keychain-access-groups = Array {
          XYZW1ABC2D.*
      }
    }
    

    虽然尚未为推送通知启用的基本Ad-Hoc或App Store分发的输出类似于:
    Dict {
      get-task-allow = false
      com.apple.developer.team-identifier = ABC1DEF2G3
      application-identifier = XYZW1ABC2D.com.mycompany.niftyapp
      keychain-access-groups = Array {
          XYZW1ABC2D.*
      }
    }
    

    现在,您已经为应用程序的AppId颁发了APNs证书,您确实需要逐步执行并重新发布您的Development,Ad-Hoc和Distribution设置配置文件,以将aps-environment权利添加到每个配置文件中。
  • 导航到Certificates, Identifiers, and Profiles工具并找到与此应用程序关联的配置文件之一。
  • 单击“编辑”按钮,并逐步完成向导的每个步骤-您无需对先前定义的设置进行任何更改,只需要重新发布当前配置文件即可!
  • 单击向导末尾的“下载”按钮。
  • 将更新的配置文件拖放到Dock的Xcode图标上进行安装。

  • 如果您再次在这些新文件上运行相同的终端命令集(请记住,如有必要,请更新新.mobileprovision的路径!),您现在将看到aps-environment键出现在您的应用程序权利中:
    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证书签名的应用程序,并且只能与沙盒APNs环境
  • 连接
  • aps-environment = production-仅在分发配置概要文件(Ad-Hoc或App Store)上显示,允许使用iPhone Distribution证书签名的应用程序与Production APNs Environment
  • 连接

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

    当提供者还将开发APNs SSL证书连接到沙盒APNs网关并在其生成的有效负载中使用沙盒设备令牌时,使用开发证书签名的
  • 应用程序只能成功协商APN并接收推送消息。
  • 当提供者还将生产APNs SSL证书连接到生产APNs网关并在其生成的有效负载中使用生产设备令牌时,使用分发证书签名的
  • 应用程序只能成功协商APN并接收推送消息。

  • 试一试,让我们知道事情的发展!

    关于certificate - 为什么我无法将APNs Development iOS类型的证书添加到配置文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27658697/

    相关文章:

    ios - 何时使用开发与分发推送通知 p12 证书

    ios - 启用 iOS 通知以激活后台服务

    iOS - 无法使用 APNS 证书创建新的配置文件

    python - 无法连接mongodb,ssl错误,超时错误

    c# - 通过 SSL 调用 REST Web 服务

    asp.net - IIS 上单个应用程序的 SSL

    java - 是否有可能使 Eclipse p2 配置机制在*本地*运行?

    java - 如何查看keytool导入的keystore中导入的证书?

    apple-push-notifications - 在多个苹果 channel 中使用 PushSharp

    iphone - 如何配置 friend 构建的.ipa?