与其他 Google API 一样,Google Ads API 使用 OAuth 2.0 协议进行身份验证和授权。借助 OAuth 2.0,您的 Google Ads API 客户端应用无需处理或存储用户的登录信息,即可访问用户的 Google Ads 账号。
本指南介绍了如何使用三种最常见的 OAuth 2.0 流程配置 Java 客户端库以进行 Google Ads API 身份验证,并说明了所需的凭证。
如需深入探究 Google Ads API 访问模型,请参阅 Google Ads 访问模型指南。
凭证
访问 Google Ads API 需要 OAuth 2.0 凭证,在某些情况下还需要登录客户 ID。
OAuth 2.0 凭证
如需以有权访问 Google Ads 账号的 Google 账号用户身份进行授权,您必须提供一组 OAuth 2.0 凭证。所需的凭证类型因所使用的 OAuth 2.0 流程而异。
该库支持三种流程:
- 服务账号流程
- 单用户身份验证流程
- 多用户身份验证流程
如需详细了解 Google Ads API OAuth 流程,请参阅 OAuth 概览,并按照最符合您需求的流程说明获取所需凭据。
登录客户 ID
(可选)指定提供对广告投放账号的访问权限的经理账号的客户 ID。如果您是通过经理账号访问客户账号,则必须指定此项。您无需指定通往客户 ID 的路径上的所有经理账号,只需指定您用于访问权限的最顶层经理 ID 即可。如需了解详情,请参阅相关文档。
在客户端库中,登录客户 ID 由 ads.properties 文件中的 api.googleads.loginCustomerId 键指定。
配置
您可以使用 ads.properties 文件、环境变量或以编程方式配置客户端库。本指南重点介绍如何使用 ads.properties 文件。如需详细了解所有选项,请参阅配置指南。
如果使用 ads.properties 文件,请将其放在主目录中:~/ads.properties。
OAuth 工作流
使用 Google Ads API 时,有三种常见的工作流程。
服务账号流程
如果您的工作流不需要任何人工互动,建议采用此工作流。此工作流需要执行配置步骤,即用户需要将服务账号添加到其 Google Ads 账号。然后,该应用可以使用服务账号的凭据来管理用户的 Google Ads 账号。
获得私钥 JSON 文件后,请将以下内容添加到 ads.properties 文件中:
api.googleads.serviceAccountSecretsPath=INSERT_PATH_TO_JSON_HERE
# Only add this key if you are using Google Workspace domain-wide delegation
# to impersonate a user who has access to the Google Ads account.
# api.googleads.serviceAccountUser=USER_EMAIL_TO_IMPERSONATE
如需了解详情,请参阅服务账号工作流指南。
单用户身份验证流程
如果您无法使用服务账号,则可以使用此工作流。此工作流需要执行两个配置步骤:
- 向单个用户授予对要使用 Google Ads API 管理的所有账号的访问权限。一种常见方法是向用户授予对 Google Ads API 经理账号的访问权限,并将所有目标 Google Ads 账号关联到该经理账号。
- 用户运行
gcloudCLI 或GenerateUserCredentials代码示例等命令行工具,授权您的应用代表他们管理其所有 Google Ads 账号。
获得这些凭据后,请将以下内容添加到 ads.properties 文件中:
api.googleads.clientId=INSERT_CLIENT_ID_HERE
api.googleads.clientSecret=INSERT_CLIENT_SECRET_HERE
api.googleads.refreshToken=INSERT_REFRESH_TOKEN_HERE
如需了解详情,请参阅单用户身份验证工作流指南。
多用户身份验证流程
如果您的应用允许用户登录并授权您的应用代表他们管理其 Google Ads 账号,建议您采用此工作流程。GenerateUserCredentials 代码示例是一个命令行工具,展示了如何在运行时获取用户身份验证,以便代表用户管理其 Google Ads 账号。您可以将此代码示例作为参考,构建需要用户身份验证的桌面应用或 Web 应用。
对于多用户应用,请将应用的 OAuth 2.0 客户端 ID 和客户端密钥存储在 ads.properties(或其他配置存储区)中,同时将每个最终用户的刷新令牌安全地存储在应用数据库中,并在构建 UserCredentials 和 GoogleAdsClient 时在运行时以编程方式传递该令牌:
api.googleads.clientId=INSERT_CLIENT_ID_HERE
api.googleads.clientSecret=INSERT_CLIENT_SECRET_HERE
如需了解详情,请参阅多用户身份验证工作流指南。
管理多个账号
用户通常会管理多个 Google Ads 账号,可以通过直接访问账号或通过 Google Ads 经理账号进行管理。Java 客户端库提供了以下代码示例,说明如何处理此类情况:
GetAccountHierarchy代码示例展示了如何检索 Google Ads 经理账号下的所有账号的列表。ListAccessibleCustomers代码示例展示了如何检索用户有权直接访问的所有账号的列表。然后,这些账号可用作loginCustomerId设置的有效值。
应用默认凭证
Java 客户端库还支持使用应用默认凭证进行身份验证。
这对于本地开发或针对不同 Google API 的开发特别有用,因为您可以重复使用相同的凭据,前提是这些凭据可以访问所需的 OAuth 2.0 范围。
对于 Google Ads API,请确保您的应用默认凭证可以访问 https://www.googleapis.com/auth/adwords OAuth 2.0 范围。
如需使用应用默认凭证,请在 ads.properties 文件中将 api.googleads.useApplicationDefaultCredentials 选项设置为 true(或在 GoogleAdsClient.newBuilder() 上调用 .enableApplicationDefaultCredentials())。使用应用默认凭证时,不应设置客户端 ID、客户端密钥和刷新令牌。