Al igual que otras APIs de Google, la API de Google Ads usa el protocolo OAuth 2.0 para la autenticación y la autorización. OAuth 2.0 permite que tu app cliente de la API de Google Ads acceda a la cuenta de Google Ads de un usuario sin tener que controlar ni almacenar su información de acceso.
Información sobre el modelo de acceso de Google Ads
Para trabajar de manera eficaz con la API de Google Ads, debes comprender cómo funciona el modelo de acceso de Google Ads. Consulta la guía del modelo de acceso de Google Ads.
Flujos de trabajo de OAuth
Existen tres flujos de trabajo comunes que se utilizan cuando se trabaja con la API de Google Ads.
Flujo de la cuenta de servicio
Este es el flujo de trabajo recomendado si el tuyo no requiere interacción humana. Este flujo de trabajo requiere un paso de configuración en el que el usuario agrega una cuenta de servicio a su cuenta de Google Ads. Luego, la app puede usar las credenciales de la cuenta de servicio para administrar la cuenta de Google Ads del usuario. Para configurar esto, crea y descarga el archivo de claves JSON en la consola de Google Cloud. Luego, copia google_ads_config.rb en tu directorio principal y modifícalo para especificar la ubicación del archivo de claves de tu cuenta de servicio (y la dirección de correo electrónico opcional del usuario al que se suplantará cuando se use la delegación en todo el dominio de Google Workspace):
# You can also authenticate using a service account. If "keyfile" is
# specified below, then service account authentication will be assumed and
# the above authentication fields ignored. Read more about service account
# authentication here:
# https://developers.google.com/google-ads/api/docs/oauth/service-accounts
c.keyfile = 'path/to/keyfile.json'
# Optional unless using Google Workspace domain-wide delegation:
c.impersonate = 'INSERT_EMAIL_ADDRESS_TO_IMPERSONATE_HERE'
Si prefieres no almacenar esta información en un archivo y usar variables de entorno, puedes establecer GOOGLE_ADS_JSON_KEY_FILE_PATH (y GOOGLE_ADS_IMPERSONATED_EMAIL opcional):
export GOOGLE_ADS_JSON_KEY_FILE_PATH="/path/to/your/service-account-key.json"
# Optional unless using Google Workspace domain-wide delegation:
export GOOGLE_ADS_IMPERSONATED_EMAIL="your_email@email.com"
También puedes pasar la ruta de acceso al archivo de claves de la cuenta de servicio (y el correo electrónico suplantado opcional) de forma programática en el tiempo de ejecución:
require 'google/ads/google_ads'
client = Google::Ads::GoogleAds::GoogleAdsClient.new do |config|
config.keyfile = '/path/to/your/service-account-key.json'
# Optional unless using Google Workspace domain-wide delegation:
config.impersonate = 'INSERT_EMAIL_ADDRESS_TO_IMPERSONATE_HERE'
end
Como alternativa, puedes usar la gem googleauth para crear credenciales de cuenta de servicio y pasar credentials.updater_proc a config.authentication:
require 'googleauth'
require 'google/ads/google_ads'
# Path to your service account key file.
key_file = '/path/to/your/service-account-key.json'
# Define the scopes needed for the Google Ads API.
scopes = ['https://www.googleapis.com/auth/adwords']
# Create service account credentials.
credentials = File.open(key_file) do |io|
Google::Auth::ServiceAccountCredentials.make_creds(
json_key_io: io,
scope: scopes
)
end
# Initialize the Google Ads API client with these credentials.
client = Google::Ads::GoogleAds::GoogleAdsClient.new do |config|
# Inject the service account credential updater proc.
config.authentication = credentials.updater_proc
end
Consulta la guía del flujo de trabajo de la cuenta de servicio para obtener más información.
Flujo de autenticación de un solo usuario
Este flujo de trabajo se puede usar si no puedes usar cuentas de servicio. Este flujo de trabajo requiere dos pasos de configuración:
- Otorga acceso a un solo usuario a todas las cuentas que se administrarán con la API de Google Ads. Un enfoque común es otorgar al usuario acceso a una cuenta de administrador de la API de Google Ads y vincular todas las cuentas de Google Ads a esa cuenta de administrador.
- El usuario ejecuta una herramienta de línea de comandos, como la herramienta de línea de comandos de Google Cloud o el ejemplo de código de
GenerateUserCredentials, para autorizar tu app a administrar todas sus cuentas de Google Ads en su nombre.
Para configurar las credenciales de OAuth 2.0 para Ruby, copia el archivo google_ads_config.rb en tu directorio principal y modifícalo para incluir tu ID de cliente, secreto del cliente y token de actualización:
# Authentication tells the API that you are allowed to make changes to the
# specific account you're trying to access.
# The default method of authentication is to use a refresh token, client id,
# and client secret to generate an access token.
c.client_id = 'INSERT_CLIENT_ID_HERE'
c.client_secret = 'INSERT_CLIENT_SECRET_HERE'
c.refresh_token = 'INSERT_REFRESH_TOKEN_HERE'
El cliente lee automáticamente el archivo de configuración del directorio principal si se instancia sin argumentos:
client = Google::Ads::GoogleAds::GoogleAdsClient.new
Como alternativa, si prefieres almacenar el archivo en otro lugar, puedes crear una instancia del cliente pasando la ruta de acceso a la ubicación en la que guardas este archivo:
client = Google::Ads::GoogleAds::GoogleAdsClient.new(
'path/to/google_ads_config.rb'
)
Si prefieres no almacenar esta información en un archivo y usar variables de entorno, puedes configurar cada una de ellas:
export GOOGLE_ADS_CLIENT_ID="INSERT_CLIENT_ID_HERE"
export GOOGLE_ADS_CLIENT_SECRET="INSERT_CLIENT_SECRET_HERE"
export GOOGLE_ADS_REFRESH_TOKEN="INSERT_REFRESH_TOKEN_HERE"
También puedes pasar la información de forma programática en el tiempo de ejecución:
client = Google::Ads::GoogleAds::GoogleAdsClient.new do |config|
config.client_id = 'INSERT_CLIENT_ID_HERE'
config.client_secret = 'INSERT_CLIENT_SECRET_HERE'
config.refresh_token = 'INSERT_REFRESH_TOKEN_HERE'
end
Consulta la guía del flujo de trabajo de autenticación de un solo usuario para obtener más información.
Flujo de autenticación multiusuario
Este es el flujo de trabajo recomendado si tu app permite que los usuarios accedan y autoricen tu app para administrar sus cuentas de Google Ads en su nombre. Tu app compila y administra las credenciales de usuario de OAuth 2.0. Este flujo de trabajo se puede configurar de manera similar al flujo de un solo usuario, con el login_customer_id también especificado.
Se recomienda usar un archivo de configuración. Copia el archivo google_ads_config.rb en tu directorio principal y modifícalo para incluir tu ID de cliente, secreto del cliente, token de actualización y ID de cliente:
# Authentication tells the API that you are allowed to make changes to the
# specific account you're trying to access.
# The default method of authentication is to use a refresh token, client id,
# and client secret to generate an access token.
c.client_id = 'INSERT_CLIENT_ID_HERE'
c.client_secret = 'INSERT_CLIENT_SECRET_HERE'
c.refresh_token = 'INSERT_REFRESH_TOKEN_HERE'
# Required for manager accounts only: Specify the login customer ID used to
# authenticate API calls. This will be the customer ID of the authenticated
# manager account. If you need to use different values for this field, then
# make sure to fetch a new copy of the service after each time you change the
# value.
c.login_customer_id = 'INSERT_LOGIN_CUSTOMER_ID_HERE'
El cliente lee automáticamente el archivo de configuración del directorio principal si se instancia sin argumentos:
client = Google::Ads::GoogleAds::GoogleAdsClient.new
Como alternativa, si prefieres almacenar el archivo en otro lugar, puedes crear una instancia del cliente pasando la ruta de acceso a la ubicación en la que guardas este archivo:
client = Google::Ads::GoogleAds::GoogleAdsClient.new(
'path/to/google_ads_config.rb'
)
Si prefieres no almacenar esta información en un archivo y usar variables de entorno, puedes configurar cada una de ellas:
export GOOGLE_ADS_CLIENT_ID="INSERT_CLIENT_ID_HERE"
export GOOGLE_ADS_CLIENT_SECRET="INSERT_CLIENT_SECRET_HERE"
export GOOGLE_ADS_REFRESH_TOKEN="INSERT_REFRESH_TOKEN_HERE"
export GOOGLE_ADS_LOGIN_CUSTOMER_ID="INSERT_LOGIN_CUSTOMER_ID_HERE"
También puedes pasar la información de forma programática en el tiempo de ejecución:
client = Google::Ads::GoogleAds::GoogleAdsClient.new do |config|
config.client_id = 'INSERT_CLIENT_ID_HERE'
config.client_secret = 'INSERT_CLIENT_SECRET_HERE'
config.refresh_token = 'INSERT_REFRESH_TOKEN_HERE'
config.login_customer_id = 'INSERT_LOGIN_CUSTOMER_ID_HERE'
end
Consulta la guía del flujo de trabajo de autenticación multiusuario para obtener más información. La biblioteca cliente de Ruby incluye un ejemplo de código como referencia. El ejemplo de código de línea de comandos de GenerateUserCredentials ilustra cómo obtener la autenticación del usuario en el tiempo de ejecución para administrar sus cuentas de Google Ads en su nombre. Puedes usar este ejemplo de código como referencia para compilar apps de escritorio que requieran autenticación del usuario.
Administrar varias cuentas
Es común que un usuario administre más de una cuenta de Google Ads, ya sea a través del acceso directo a las cuentas o a través de una cuenta de administrador de Google Ads. La biblioteca cliente de Ruby proporciona los siguientes ejemplos de código que ilustran cómo controlar estos casos:
- El ejemplo de código de
GetAccountHierarchymuestra cómo recuperar la lista de todas las cuentas que se encuentran en una cuenta de administrador de Google Ads. - En el ejemplo de código de
ListAccessibleCustomers, se muestra cómo recuperar la lista de todas las cuentas a las que un usuario tiene acceso directo. Luego, estas cuentas se pueden usar como valores válidos para el parámetro de configuraciónlogin_customer_id.
Credenciales predeterminadas de la aplicación
La biblioteca cliente de Ruby (versión 36.1.0 y posteriores) también admite la autenticación con credenciales predeterminadas de la aplicación (ADC). Te permite establecer las credenciales predeterminadas para tu aplicación sin necesidad de configurar la información de OAuth 2.0 en la configuración de la aplicación.
Esto es particularmente útil para el desarrollo local o para el desarrollo con diferentes APIs de Google, ya que puedes reutilizar las mismas credenciales, siempre que puedan acceder a los permisos de OAuth 2.0 requeridos.
En el caso de la API de Google Ads, asegúrate de que las credenciales predeterminadas de tu aplicación puedan acceder al permiso de OAuth 2.0 https://www.googleapis.com/auth/adwords.
Para usar las credenciales predeterminadas de la aplicación, usa la herramienta de línea de comandos de Google Cloud y autentícate para ADC:
gcloud auth application-default login
Este comando abre un navegador web para completar el flujo de autenticación de tu Cuenta de Google. Una vez que se autoriza, almacena las credenciales en una ubicación estándar. Luego, debes actualizar tu aplicación para usar ADC.
Copia el archivo google_ads_config.rb en tu directorio principal y configura use_application_default_credentials como true:
# You can also authenticate using Application Default Credentials (ADC).
# To understand how ADC discovers credentials in a given environment, see:
# https://developers.google.com/identity/protocols/application-default-credentials
c.use_application_default_credentials = true
Si prefieres no almacenar esta información en un archivo y usar variables de entorno, puedes configurar GOOGLE_ADS_USE_APPLICATION_DEFAULT_CREDENTIALS de la siguiente manera:
export GOOGLE_ADS_USE_APPLICATION_DEFAULT_CREDENTIALS="true"
También puedes pasar la información de forma programática en el tiempo de ejecución. Cuando inicialices el cliente en tu código de Ruby, configura config.use_application_default_credentials = true y no proporciones credenciales explícitas de OAuth 2.0. La biblioteca detecta y usa automáticamente las credenciales configuradas por la herramienta de línea de comandos de Google Cloud:
# Initialize the client using Application Default Credentials.
client = Google::Ads::GoogleAds::GoogleAdsClient.new do |config|
config.use_application_default_credentials = true
# Optional: Specify a login customer ID if you are accessing accounts
# through a manager account.
# config.login_customer_id = 'YOUR_LOGIN_CUSTOMER_ID'
# Do NOT include client_id, client_secret, or refresh_token here.
end
Consulta la página de configuración para obtener más detalles sobre las opciones disponibles para configurar la biblioteca cliente de Ruby.