App 凭据
编辑页面
了解 Android 和 iOS 需要哪些 app 凭据。
For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.
Expo 会自动为 Android 和 iOS 签名应用的过程,但在这两种情况下,你都可以选择提供自己的覆盖配置。EAS Build 可以生成已签名或未签名的应用,但如果要通过应用商店分发你的应用,它必须是已签名的。
在本页中,你将了解每个平台所需的凭据。如果你好奇我们在后台如何存储你的凭据,可以查看我们的安全文档。
Android
Google 要求所有 Android 应用在安装到设备或更新之前,都必须使用证书进行数字签名。通常, 私钥及其公钥证书会存储在 keystore 中。过去,上传到商店的 APK 必须使用 app signing certificate(一个将附加到 Play 商店中应用上的证书)进行签名,如果 keystore 丢失,就没有办法恢复或重置它。现在,你可以选择启用 Google Play 的应用签名,只需上传一个使用 upload certificate 签名的 APK,Google Play 会自动将其替换为 app signing certificate。旧方法(app signing certificate)和新方法(upload certificate)本质上是相同的机制,但使用新方法时,如果你的上传 keystore 丢失或遭到泄露,你可以联系 Google Play 支持团队重置密钥。
从 Expo 构建流程的角度来看,应用使用 upload certificate 签名还是使用 app signing key 签名并没有区别。无论哪种方式,eas build 都会生成一个使用当前与你的应用关联的 keystore 签名的 .apk 或 .aab。如果你想手动生成上传 keystore,可以用创建原始 keystore 时相同的方法来完成。
有关此流程的更多信息,请参阅 Android 文档。
由 Google Play 进行应用签名
当你首次将发布版上传到 Google Play时,你会看到关于“由 Google Play 进行应用签名”和“Google 正在保护你的应用签名密钥”的提示。这是默认行为,除了点击“Continue”之外,你无需执行任何操作。
如果你当前自己管理应用签名密钥,并希望由 Google 代为管理,请参阅使用由 Google Play 进行应用签名。
丢失了 keystore?了解如何在 Google Play 上重置上传密钥
要将你的 Expo keystore 与 Google 同步,请按照以下步骤操作:
下载凭据
在终端窗口中:
- 运行
eas credentials命令。 - 为平台选择
Android,以及你想下载其凭据的配置文件。 - 选择
credentials.json: Upload/Download credentials between EAS servers and your local json选项。 - 选择
Download credentials from EAS to credentials.json。
你应用的 keystore 应妥善保密。在任何情况下都不要将其提交到你的仓库中。 Debug keystore 是唯一的例外,因为我们不会用它们来上传应用到 Google Play Store。
将 keystore 导出为 pem 格式
下载凭据和 keystore 后,将其导出为 pem 格式,以便提交给 Google:
- 在你的 credentials.json 文件中找到
keyAlias键下的 key alias。 - 使用
keytool导出证书:
- keytool -export -rfc -alias alias_from_step_1 -file certificate_for_google.pem -keystore ./path/to/keystore.jks联系 Google 支持
联系 Google 支持,并请求他们使用此支持表单更改你的密钥。在填写表单时,附上从 keystore 导出的 pem 文件。
一旦 Google 在你的账号上更新了这些信息,通过 eas build 创建的构建将会像 Google Play Store 预期的那样正确签名。请注意,Google 会将新上传证书的有效期开始日期设置为 72 小时后的时间,因此在执行此过程后的首次提交前,你需要等待一段时间。
iOS
3 个主要的 iOS 凭据都与你的 Apple Developer 账号相关,它们是:
- Distribution Certificate
- Provisioning Profiles
- Push Notification Keys
无论你让 EAS 处理所有凭据,还是你自己处理,了解每种凭据的含义、使用时间和地点,以及它们过期或被撤销时会发生什么,都是很有价值的。你可以通过运行 eas credentials,使用 EAS CLI 检查和管理所有凭据。
Distribution certificate
Distribution certificate 主要与你这个开发者有关,而不是任何特定应用。你的 Apple Developer 账号最多只能关联一个 distribution certificate。这个证书会用于你所有的应用。如果这个证书过期,你的线上生产应用不会受到影响。然而,如果你想上传新应用到 App Store 或更新任何现有应用,就需要生成新的证书。删除 distribution certificate 不会对 App Store 上已存在的任何应用产生影响。你可以在下次构建时通过运行 eas credentials 并按照提示操作,清除 Expo 当前为你的应用存储的 distribution certificate。
Push Notification keys
Apple Push Notification Keys(通常缩写为 APN keys)允许关联的应用发送和接收推送通知。
你的 Apple Developer 账号最多可以关联 2 个 APN key,而且单个 key 可以用于任意数量的应用。如果你撤销某个 APN key,所有依赖该 key 的应用将无法再发送或接收推送通知,直到你上传新的 key 来替换它。上传新的 APN key 不会改变用户的 Expo Push Tokens。Push notification keys 不会过期。你可以通过运行 eas credentials 并按照提示操作,清除 Expo 当前为你的应用存储的 APN key。
Expo 创建的 APN keys 可以在 Expo 网站上下载。
Provisioning profiles
每个 profile 都是应用特定的,这意味着你提交到 App Store 的每个应用都会有一个 provisioning profile。这些 provisioning profile 与你的 distribution certificate 相关联,因此如果该证书被撤销或过期,你也需要重新生成该应用的 provisioning profile。与 distribution certificate 类似,撤销你应用的 provisioning profile 不会对 App Store 上已存在的应用产生任何影响。
Provisioning profile 会在 12 个月后过期,但这不会影响生产环境中的应用。你只需要在下次构建应用时,通过运行 eas build -p ios,或者使用 eas credentials 手动创建新的即可。
摘要
| 凭据 | 每个账号的限制 | 是否与应用相关? | 撤销后对生产环境无副作用? | 使用时间 |
|---|---|---|---|---|
| Distribution Certificate | 2 | 构建时 | ||
| Push Notification Key | 2 | 运行时 | ||
| Provisioning Profile | 不限 | 构建时 |
清除凭据
当你使用 eas credentials 命令删除你的凭据时,这只会从 Expo 的服务器上移除这些凭据。这不会从 Apple 的角度删除这些凭据。 这意味着如果你想完全删除你的凭据(例如,你想要一个新的推送通知 key,但你已经有两个了),你需要在 Apple Developer Console 中完成。
重新签名新凭据
你可以使用 eas build:resign 将现有的 iOS .ipa 重新进行 codesign,改为新的 ad hoc provisioning profile。这有助于减少内部分发所需的时间——例如,如果你想为现有构建添加一个新的测试设备,你可以使用此命令更新 provisioning profile,使其包含该设备,而无需从头重新构建整个应用。
运行该命令后,你会被要求选择想要重新签名的构建。例如,在示例项目中运行该命令会显示一个可用构建:
选择构建后,请按照步骤登录你的 Apple Developer 账号。当提示 Show devices and ask me again 时,你可以选择一个新的 provisioning profile。
选择一个新设备后,该命令会再次运行 EAS Build。请注意,这次触发的构建会重用所选构建中的应用工件,并使用新的 provisioning profile 对其进行 codesign。此过程完成后,你可以使用这个新的构建链接,在已添加到 provisioning profile 的 iOS 设备上安装 .ipa。