Как и другие API Google, API Google Ads использует протокол OAuth 2.0 для аутентификации и авторизации. OAuth 2.0 позволяет клиентскому приложению API Google Ads получать доступ к аккаунту пользователя Google Ads без необходимости обработки или хранения его учетных данных.
Понимание модели доступа к Google Ads
Для эффективной работы с API Google Ads необходимо понимать, как работает модель доступа Google Ads. Рекомендуем ознакомиться с руководством по модели доступа Google Ads .
Рабочие процессы OAuth
При работе с API Google Ads используются три распространенных рабочих процесса.
Поток учетной записи службы
Это рекомендуемый рабочий процесс, если ваш рабочий процесс не требует взаимодействия с пользователем. Этот рабочий процесс требует этапа настройки, на котором пользователь добавляет сервисный аккаунт в свой аккаунт Google Ads. После этого приложение сможет использовать учётные данные сервисного аккаунта для управления аккаунтом Google Ads. Чтобы настроить это, создайте и загрузите JSON-файл ключа в Google Cloud Console, затем скопируйте google_ads_config.rb в свой домашний каталог и измените его, указав расположение файла ключа сервисного аккаунта и адрес электронной почты пользователя, от имени которого он будет действовать:
# 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'
# c.impersonate = 'INSERT_EMAIL_ADDRESS_TO_IMPERSONATE_HERE'
Если вы предпочитаете не хранить эту информацию в файле и предпочитаете использовать переменные среды, вы можете установить GOOGLE_ADS_JSON_KEY_FILE_PATH и GOOGLE_ADS_IMPERSONATED_EMAIL соответственно.
export GOOGLE_ADS_JSON_KEY_FILE_PATH="/path/to/your/service-account-key.json"
export GOOGLE_ADS_IMPERSONATED_EMAIL="your_email@email.com"
Вы также можете передавать информацию программно во время выполнения, используя gem-пакет googleauth для создания учетных данных из JSON-файла учетной записи службы:
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 = Google::Auth::ServiceAccountCredentials.make_creds(
json_key_io: File.open(key_file),
scope: scopes
)
# Initialize the Google Ads API client with these credentials
client = Google::Ads::GoogleAds::Client.new do |config|
config.developer_token = "YOUR_DEVELOPER_TOKEN"
# Inject the service account credentials
config.oauth2_client = credentials
end
Более подробную информацию см. в руководстве по рабочему процессу учетной записи службы .
Процесс аутентификации одного пользователя
Этот рабочий процесс можно использовать, если вы не можете использовать учётные записи служб. Этот рабочий процесс требует двух этапов настройки:
- Предоставьте одному пользователю доступ ко всем аккаунтам, которыми нужно управлять с помощью API Google Ads. Распространенный подход — предоставить пользователю управляющий аккаунт API Google Ads и связать все аккаунты Google Ads с этим управляющим аккаунтом.
- Пользователь запускает инструмент командной строки, такой как gcloud или пример кода
GenerateUserCredentials, чтобы авторизовать ваше приложение для управления всеми его аккаунтами Google Ads от его имени.
Учетные данные OAuth 2.0 можно настроить для Ruby, скопировав файл google_ads_config.rb в свой домашний каталог и изменив его, включив в него токен разработчика, идентификатор клиента, секретный код клиента и токен обновления:
# The developer token is required to authenticate that you are allowed to
# make API calls.
c.developer_token = 'INSERT_DEVELOPER_TOKEN_HERE'
# 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'
Клиент автоматически прочитает файл конфигурации из домашнего каталога, если он создан без аргументов:
client = Google::Ads::GoogleAds::GoogleAdsClient.new
В качестве альтернативы, если вы предпочитаете хранить файл в другом месте, вы можете создать экземпляр клиента, передав путь к месту хранения этого файла:
client = Google::Ads::GoogleAds::GoogleAdsClient.new('path/to/google_ads_config.rb')
Если вы предпочитаете не хранить эту информацию в файле и предпочитаете использовать переменные среды, вы можете задать каждую из них:
export GOOGLE_ADS_DEVELOPER_TOKEN="INSERT_DEVELOPER_TOKEN_HERE"
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"
Вы также можете передать информацию программно во время выполнения:
client = Google::Ads::GoogleAds::GoogleAdsClient.new do |config|
config.developer_token = 'INSERT_DEVELOPER_TOKEN_HERE'
config.client_id = 'INSERT_CLIENT_ID_HERE'
config.client_secret = 'INSERT_CLIENT_SECRET_HERE'
config.refresh_token = 'INSERT_REFRESH_TOKEN_HERE'
end
Более подробную информацию см. в руководстве по процедуре аутентификации одного пользователя .
Многопользовательский поток аутентификации
Этот рабочий процесс рекомендуется, если ваше приложение позволяет пользователям входить в систему и авторизовать ваше приложение для управления аккаунтами Google Ads от их имени. Ваше приложение формирует и управляет учётными данными пользователей OAuth 2.0. Этот рабочий процесс можно настроить аналогично однопользовательскому, но с указанием login_customer_id .
Мы рекомендуем использовать файл конфигурации. Скопируйте файл google_ads_config.rb в свой домашний каталог и измените его, добавив токен разработчика, идентификатор клиента, секретный код клиента, токен обновления и идентификатор клиента:
# The developer token is required to authenticate that you are allowed to
# make API calls.
c.developer_token = 'INSERT_DEVELOPER_TOKEN_HERE'
# 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 fetch a new copy of the service after each time you change the
# value.
# c.login_customer_id = 'INSERT_LOGIN_CUSTOMER_ID_HERE'
Клиент автоматически прочитает файл конфигурации из домашнего каталога, если он создан без аргументов:
client = Google::Ads::GoogleAds::GoogleAdsClient.new
В качестве альтернативы, если вы предпочитаете хранить файл в другом месте, вы можете создать экземпляр клиента, передав путь к месту хранения этого файла:
client = Google::Ads::GoogleAds::GoogleAdsClient.new('path/to/google_ads_config.rb')
Если вы предпочитаете не хранить эту информацию в файле и предпочитаете использовать переменные среды, вы можете задать каждую из них:
export GOOGLE_ADS_DEVELOPER_TOKEN="INSERT_DEVELOPER_TOKEN_HERE"
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"
Вы также можете передать информацию программно во время выполнения:
client = Google::Ads::GoogleAds::GoogleAdsClient.new do |config|
config.developer_token = 'INSERT_DEVELOPER_TOKEN_HERE'
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
Подробнее см. в руководстве по многопользовательской аутентификации . Клиентская библиотека Ruby содержит пример кода для справки. GenerateUserCredentials — это пример кода командной строки, иллюстрирующий, как получить аутентификацию пользователя во время выполнения для управления его аккаунтами Google Ads от его имени. Вы можете использовать этот пример кода в качестве справочного материала для создания десктопных приложений, требующих аутентификации пользователя.
Что делать, если мой пользователь управляет несколькими учетными записями?
Пользователь часто управляет несколькими аккаунтами Google Ads, используя прямой доступ к ним или через управляющий аккаунт Google Ads. Клиентская библиотека Ruby предоставляет следующие примеры кода, иллюстрирующие, как это делать в таких случаях.
- Пример кода GetAccountHierarchy показывает, как получить список всех аккаунтов в управляющем аккаунте Google Ads.
- Пример кода ListAccessibleCustomers показывает, как получить список всех учётных записей, к которым у пользователя есть прямой доступ. Эти учётные записи затем можно использовать в качестве допустимых значений параметра
LoginCustomerId.
Учетные данные приложения по умолчанию
Клиентская библиотека Ruby также поддерживает аутентификацию с использованием учётных данных приложения по умолчанию (ADC) . Она позволяет задать учётные данные по умолчанию для вашего приложения без необходимости настройки данных OAuth 2.0 в конфигурации приложения.
Это особенно полезно для локальной разработки или для разработки с использованием различных API Google, поскольку вы можете повторно использовать одни и те же учетные данные при условии, что они имеют доступ к правильным областям действия OAuth 2.0.
Для API Google Ads убедитесь, что учетные данные вашего приложения по умолчанию обеспечивают доступ к области действия OAuth 2.0 https://www.googleapis.com/auth/adwords .
Чтобы использовать учетные данные приложения по умолчанию, мы рекомендуем использовать инструмент командной строки Google Cloud и выполнить аутентификацию для ADC:
gcloud auth application-default login
Эта команда откроет веб-браузер для завершения процесса аутентификации вашей учётной записи Google. После авторизации учётные данные сохраняются в стандартном месте. После этого вам необходимо обновить приложение для использования ADC.
Мы рекомендуем использовать файл конфигурации. Скопируйте файл google_ads_config.rb в домашний каталог, добавьте токен разработчика и установите для use_application_default_credentials значение true:
# The developer token is required to authenticate that you are allowed to
# make API calls.
c.developer_token = 'INSERT_DEVELOPER_TOKEN_HERE'
# 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
Если вы предпочитаете не хранить эту информацию в файле и предпочитаете использовать переменные среды, вы можете установить GOOGLE_ADS_DEVELOPER_TOKEN и GOOGLE_ADS_USE_APPLICATION_DEFAULT_CREDENTIALS :
export GOOGLE_ADS_DEVELOPER_TOKEN="INSERT_DEVELOPER_TOKEN_HERE"
export GOOGLE_ADS_USE_APPLICATION_DEFAULT_CREDENTIALS="true"
Вы также можете передать информацию программно во время выполнения. При инициализации клиента в коде Ruby не указывайте явные учётные данные OAuth2. Библиотека автоматически определит и использует учётные данные, настроенные с помощью инструмента командной строки Google Cloud. Вам всё равно потребуется указать свой токен разработчика.
# Initialize the client. It will automatically use Application Default Credentials.
client = Google::Ads::GoogleAds::Client.new do |config|
# Developer Token is mandatory for the Google Ads API.
config.developer_token = "YOUR_DEVELOPER_TOKEN"
# 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 oauth2_client_id, oauth2_client_secret, or oauth2_refresh_token here.
end
Дополнительную информацию о доступных параметрах настройки клиентской библиотеки Ruby см. на странице конфигурации .