我正在尝试为我的应用程序实现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)
此命令有两件事:
security
工具从.mobileprovision
参数后标识的-i
文件中提取plist内容,并将所有这些内容传递到... PlistBuddy
将Entitlements
键的全部内容打印到屏幕上。 尚未为推送通知启用的基本开发配置文件的输出将类似于以下内容:
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
权利添加到每个配置文件中。如果您再次在这些新文件上运行相同的终端命令集(请记住,如有必要,请更新新
.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网关并在其生成的有效负载中使用沙盒设备令牌时,使用开发证书签名的
试一试,让我们知道事情的发展!
关于certificate - 为什么我无法将APNs Development iOS类型的证书添加到配置文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27658697/