Flujo de trabajo de autenticación de varios usuarios

En el flujo de trabajo de autenticación de varios usuarios, compilas tu propio flujo de OAuth para autenticar a tus usuarios. Existen varios tipos de apps que se analizan como parte de la documentación de Identidad de Google y la configuración del proyecto de Google Cloud Console que necesitas para admitir ese tipo de app. La API de Google Ads admite todos estos tipos de aplicaciones. Estos son los detalles técnicos adicionales que debes tener en cuenta:

  1. Para acceder a la API de Google Ads, debes configurar tu aplicación para que se autentique con el siguiente alcance:

    https://www.googleapis.com/auth/adwords
    
  2. Es posible que tu app deba realizar llamadas a la API en nombre del usuario mientras está sin conexión. Una situación común es descargar las métricas de la cuenta sin conexión para generar informes y realizar análisis de la cuenta. Por este motivo, te recomendamos que solicites acceso sin conexión de OAuth.

  3. Debes completar el proceso de verificación de la app de OAuth y obtener la certificación de tu app.

Configuración de la biblioteca cliente

Una vez que autorices al usuario y obtengas las credenciales de OAuth 2.0, puedes configurar la biblioteca cliente siguiendo las instrucciones de la pestaña correspondiente a tu lenguaje de programación.

Java

Puedes inicializar tu instancia de GoogleAdsClient en el tiempo de ejecución con las credenciales que obtuviste del usuario cuyas cuentas estás llamando a la API.

UserCredentials credentials =
    UserCredentials.newBuilder()
        .setClientId(OAUTH_CLIENT_ID)
        .setClientSecret(OAUTH_CLIENT_SECRET)
        .setRefreshToken(REFRESH_TOKEN)
        .build();

// Creates a GoogleAdsClient with the provided credentials.
GoogleAdsClient client =
    GoogleAdsClient.newBuilder()
        // Sets the developer token which enables API access.
        .setDeveloperToken(DEVELOPER_TOKEN)
        // Sets the OAuth credentials which provide Google Ads account access.
        .setCredentials(credentials)
        // Optional: sets the login customer ID.
        .setLoginCustomerId(Long.valueOf(LOGIN_CUSTOMER_ID))
        .build();
``` See the [configuration guide][java-config-guide] for additional options.

.NET

Puedes inicializar tu instancia de GoogleAdsClient en el tiempo de ejecución con las credenciales que obtuviste del usuario cuyas cuentas estás llamando a la API.

GoogleAdsConfig googleAdsConfig = new GoogleAdsConfig()
{
    DeveloperToken = DEVELOPER_TOKEN,
    LoginCustomerId = LOGIN_CUSTOMER_ID,
    OAuth2ClientId = OAUTH_CLIENT_ID,
    OAuth2ClientSecret = OAUTH_CLIENT_SECRET,
    OAuth2RefreshToken = REFRESH_TOKEN,
};

GoogleAdsClient googleAdsClient = new GoogleAdsClient(googleAdsConfig);

Consulta la guía de configuración para ver opciones adicionales.

Python

Puedes inicializar tu instancia de GoogleAdsClient en el tiempo de ejecución con las credenciales que obtuviste del usuario cuyas cuentas estás llamando a la API.

from google.ads.googleads.client import GoogleAdsClient

credentials = {
    "developer_token": "INSERT_DEVELOPER_TOKEN_HERE",
    "login_customer_id": "INSERT_LOGIN_CUSTOMER_ID_HERE",
    "refresh_token": "REFRESH_TOKEN",
    "client_id": "OAUTH_CLIENT_ID",
    "client_secret": "OAUTH_CLIENT_SECRET"}

client = GoogleAdsClient.load_from_dict(credentials)

Consulta la guía de configuración para ver opciones adicionales.

PHP

Puedes inicializar tu instancia de GoogleAdsClient en el tiempo de ejecución con las credenciales que obtuviste del usuario cuyas cuentas estás llamando a la API.

$oAuth2Credential = (new OAuth2TokenBuilder())
->withClientId('INSERT_CLIENT_ID_HERE')
->withClientSecret('INSERT_CLIENT_SECRET_HERE')
->withRefreshToken('INSERT_REFRESH_TOKEN_HERE')
->build();

$googleAdsClient = (new GoogleAdsClientBuilder())
    ->withOAuth2Credential($oAuth2Credential)
    ->withDeveloperToken('INSERT_DEVELOPER_TOKEN_HERE')
    ->withLoginCustomerId('INSERT_LOGIN_CUSTOMER_ID_HERE')
    ->build();

Consulta la guía de configuración para ver opciones adicionales.

Ruby

Puedes inicializar tu instancia de GoogleAdsClient en el tiempo de ejecución con las credenciales que obtuviste del usuario cuyas cuentas estás llamando a la API.

  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'
    config.developer_token = 'INSERT_DEVELOPER_TOKEN_HERE'
  end

Consulta la guía de configuración para ver opciones adicionales.

Perl

Puedes inicializar tu instancia de GoogleAdsClient en el tiempo de ejecución con las credenciales que obtuviste del usuario cuyas cuentas estás llamando a la API.

my $api_client = Google::Ads::GoogleAds::Client->new({
  developer_token   => "INSERT_DEVELOPER_TOKEN_HERE",
  login_customer_id => "INSERT_LOGIN_CUSTOMER_ID_HERE"
});

my $oauth2_applications_handler = $api_client->get_oauth2_applications_handler();
$oauth2_applications_handler->set_client_id("INSERT_CLIENT_ID");
$oauth2_applications_handler->set_client_secret("INSERT_CLIENT_SECRET");
$oauth2_applications_handler->set_refresh_token("INSERT_REFRESH_TOKEN");

Consulta la guía de configuración para ver opciones adicionales.

curl

Comienza por usar un cliente HTTP para recuperar un token de acceso de OAuth 2.0. En esta guía, se usa el comando curl.

curl \
  --data "grant_type=refresh_token" \
  --data "client_id=CLIENT_ID" \
  --data "client_secret=CLIENT_SECRET" \
  --data "refresh_token=REFRESH_TOKEN" \
  https://www.googleapis.com/oauth2/v3/token

Ahora puedes usar el token de acceso en tus llamadas a la API. En el siguiente ejemplo, se muestra cómo ejecutar un informe de campañas con el método GoogleAdsService.SearchStream para recuperar las campañas de tu cuenta. En esta guía, no se abordan los detalles de la generación de informes.

curl -i -X POST https://googleads.googleapis.com/v21/customers/CUSTOMER_ID/googleAds:searchStream \
   -H "Content-Type: application/json" \
   -H "Authorization: Bearer ACCESS_TOKEN" \
   -H "developer-token: DEVELOPER_TOKEN" \
   -H "login-customer-id: LOGIN_CUSTOMER_ID" \
   --data-binary "@query.json"

El contenido de query.json es el siguiente:

{
  "query": "SELECT campaign.id, campaign.name, campaign.network_settings.target_content_network FROM campaign ORDER BY campaign.id"
}