上传应用以供分析

Checks API 可以在发布之前分析 Android 和 iOS 应用,以便您在公开发布应用之前了解应用的数据收集和共享行为以及潜在的合规性问题。

本快速入门介绍了如何使用 gcloud CLI 和 c网址 命令上传应用。

前提条件

开始之前,请确保您能够按照我们的授权指南发送授权请求。

准备 app bundle

Android

  1. 为您的应用生成 APK 或 AAB 文件。

    如需了解相关说明,请参阅 Android 文档中的构建和运行您的应用

iOS

  1. 在 Xcode 中,为目标应用选择预配配置文件。

  2. 在随即显示的下拉菜单中,点击 Product(产品)> Archive(归档)。选择最新的归档文件,然后点击 Distribute App(分发应用)。

  3. 在随即显示的窗口中,点击 Development(开发)> Next(下一步)

  4. (可选)如需加快构建速度,请取消选择从 Bitcode 重新构建选项,然后点击下一步

    检查不需要精简或重建应用即可运行测试,因此您可以放心地停用该选项。

  5. 点击 Export(导出),然后指定要在其中下载应用的 IPA 文件的目录。

上传您的 App Bundle

使用 media.upload 方法上传您的 app bundle。

您可以通过以下两种方式上传应用:

包含元数据的二进制文件

您可以添加元数据,例如 codeReferenceId,用于将分析与代码库中的特定提交相关联。

发送一个包含标头 X-Goog-Upload-Protocol: multipart 的分段 POST 请求,其中第一个正文部分包含 JSON 格式的元数据,第二个正文部分包含二进制上传内容:

curl -X POST \
    -H "X-Goog-User-Project: PROJECT_ID" \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token --scopes=https://www.googleapis.com/auth/checks)" \
    -H "X-Goog-Upload-Protocol: multipart" \
    -F "metadata={\"codeReferenceId\":\"COMMIT_SHA\"}" \
    -F "binary=@BINARY_PATH" \
    "https://checks.googleapis.com/upload/v1alpha/accounts/ACCOUNT_ID/apps/APP_ID/reports:analyzeUpload"

仅限二进制

发送包含标头 X-Goog-Upload-Protocol: raw 的常规 POST 请求,以在不含任何元数据的情况下上传应用:

curl -X POST \
    -H "X-Goog-User-Project: PROJECT_ID" \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token --scopes=https://www.googleapis.com/auth/checks)" \
    -H "X-Goog-Upload-Protocol: raw" \
    -H "Content-Type: application/octet-stream" \
    --data-binary @BINARY_PATH \
    "https://checks.googleapis.com/upload/v1alpha/accounts/ACCOUNT_ID/apps/APP_ID/reports:analyzeUpload"

应用上传完毕后,系统会返回一个待处理的 google.longrunning.Operation

{
  "name": "accounts/ACCOUNT_ID/apps/APP_ID/operations/OPERATION_ID"
}

查看分析状态

您可以通过调用 accounts.apps.operations.get 方法来检查分析的状态:

curl -X GET \
    -H "X-Goog-User-Project: PROJECT_ID" \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token --scopes=https://www.googleapis.com/auth/checks)" \
    "https://checks.googleapis.com/v1alpha/accounts/ACCOUNT_ID/apps/APP_ID/operations/OPERATION_ID"

系统会根据状态返回以下响应:

待处理

{
  "name": "accounts/ACCOUNT_ID/apps/APP_ID/operations/OPERATION_ID"
}

完成

{
  "name": "accounts/ACCOUNT_ID/apps/APP_ID/operations/OPERATION_ID",
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.checks.report.v1alpha.Report",
    "name": "accounts/ACCOUNT_ID/apps/APP_ID/reports/REPORT_ID",
    "resultsUri": "https://checks.google.com/console/dashboard/REPORT_ID?a=APP_ID"
  }
}

错误

{
  "name": "accounts/ACCOUNT_ID/apps/APP_ID/operations/OPERATION_ID",
  "done": true,
  "error": {
    "code": 500,
    "message": "Deadline exceeded.",
    "status": "INTERNAL",
    "details": [
      ...
    ]
  }
}

查看分析

通过调用 accounts.apps.reports.get 方法查看分析结果:

curl -X GET \
    -H "X-Goog-User-Project: PROJECT_ID" \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token --scopes=https://www.googleapis.com/auth/checks)" \
    "https://checks.googleapis.com/v1alpha/accounts/ACCOUNT_ID/apps/APP_ID/reports/REPORT_ID"

默认情况下,此方法仅返回报告资源名称和用于在 Checks 控制台中查看报告的网址。

如需查看更多数据,请在请求中添加字段掩码。例如,添加网址查询参数 fields=name,resultsUri,checks 以包含 checks 字段:

{
  "name": "accounts/ACCOUNT_ID/apps/APP_ID/reports/REPORT_ID",
  "resultsUri": "https://checks.area120.google.com/console/dashboard/REPORT_ID?a=APP_ID",
  "checks": [
    {
      "type": "DATA_MONITORING_NEW_ENDPOINT",
      "severity": "POTENTIAL",
      "state": "FAILED",
      ...
    },
    ...
  ]
}

后续操作

如需了解如何获取分析结果,请参阅查询报告