Xác thực và Ủy quyền

Giống như các API khác của Google, API Google Ads sử dụng giao thức OAuth 2.0 để xác thực và uỷ quyền. OAuth 2.0 cho phép ứng dụng Google Ads API của bạn truy cập vào tài khoản Google Ads của người dùng mà không cần xử lý hoặc lưu trữ thông tin đăng nhập của người dùng.

Tìm hiểu về mô hình truy cập của Google Ads

Để làm việc hiệu quả với API Google Ads, bạn nên hiểu cách hoạt động của mô hình truy cập Google Ads. Bạn nên đọc hướng dẫn về mô hình truy cập Google Ads.

Quy trình OAuth

Có 3 quy trình công việc phổ biến được sử dụng khi làm việc với API Google Ads.

Luồng tài khoản dịch vụ

Đây là quy trình được đề xuất nếu quy trình của bạn không yêu cầu bất kỳ hoạt động tương tác nào của con người. Quy trình này yêu cầu một bước thiết lập, trong đó người dùng thêm một tài khoản dịch vụ vào tài khoản Google Ads của họ. Sau đó, ứng dụng có thể sử dụng thông tin đăng nhập của tài khoản dịch vụ để quản lý tài khoản Google Ads của người dùng. Để định cấu hình việc này, hãy tạo và tải tệp khoá JSON xuống trong Google Cloud Console, sau đó sao chép google_ads_config.rb vào thư mục chính rồi sửa đổi tệp này để chỉ định vị trí tệp khoá tài khoản dịch vụ và địa chỉ email của người dùng cần mạo danh:

  # 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'

Nếu không muốn lưu trữ thông tin này trong một tệp và muốn sử dụng các biến môi trường, bạn có thể đặt GOOGLE_ADS_JSON_KEY_FILE_PATHGOOGLE_ADS_IMPERSONATED_EMAIL tương ứng.

export GOOGLE_ADS_JSON_KEY_FILE_PATH="/path/to/your/service-account-key.json"
export GOOGLE_ADS_IMPERSONATED_EMAIL="your_email@email.com"

Bạn cũng có thể truyền thông tin theo phương thức lập trình trong thời gian chạy bằng cách sử dụng gem googleauth để tạo thông tin đăng nhập từ tệp JSON của tài khoản dịch vụ:

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

Hãy tham khảo hướng dẫn về quy trình tài khoản dịch vụ để tìm hiểu thêm.

Quy trình xác thực một người dùng

Bạn có thể sử dụng quy trình này nếu không thể dùng tài khoản dịch vụ. Quy trình này yêu cầu 2 bước định cấu hình:

  1. Cấp cho một người dùng quyền truy cập vào tất cả các tài khoản cần quản lý bằng Google Ads API. Một phương pháp phổ biến là cấp cho người dùng quyền truy cập vào tài khoản người quản lý Google Ads API và liên kết tất cả tài khoản Google Ads trong tài khoản người quản lý đó.
  2. Người dùng chạy một công cụ dòng lệnh như gcloud hoặc ví dụ về mã GenerateUserCredentials để thay mặt họ uỷ quyền cho ứng dụng của bạn quản lý tất cả tài khoản Google Ads của họ.

Bạn có thể định cấu hình thông tin xác thực OAuth 2.0 cho Ruby bằng cách sao chép tệp google_ads_config.rb vào thư mục chính rồi sửa đổi tệp đó để thêm mã thông báo nhà phát triển, mã ứng dụng khách, khoá bí mật của ứng dụng khách và mã thông báo làm mới:

  # 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'

Ứng dụng sẽ tự động đọc tệp cấu hình từ thư mục chính nếu được tạo thực thể mà không có đối số:

client = Google::Ads::GoogleAds::GoogleAdsClient.new

Ngoài ra, nếu muốn lưu trữ tệp ở nơi khác, bạn có thể khởi tạo ứng dụng bằng cách truyền đường dẫn đến nơi bạn lưu giữ tệp này:

client = Google::Ads::GoogleAds::GoogleAdsClient.new('path/to/google_ads_config.rb')

Nếu không muốn lưu trữ thông tin này trong một tệp và muốn sử dụng các biến môi trường, bạn có thể thiết lập từng biến:

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"

Bạn cũng có thể truyền thông tin theo phương thức có lập trình trong thời gian chạy:

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

Hãy tham khảo hướng dẫn về quy trình xác thực một người dùng để tìm hiểu thêm.

Quy trình xác thực nhiều người dùng

Đây là quy trình được đề xuất nếu ứng dụng của bạn cho phép người dùng đăng nhập và uỷ quyền cho ứng dụng của bạn quản lý tài khoản Google Ads thay cho họ. Ứng dụng của bạn sẽ tạo và quản lý thông tin xác thực người dùng OAuth 2.0. Bạn có thể định cấu hình quy trình này tương tự như quy trình một người dùng, nhưng cũng phải chỉ định login_customer_id.

Bạn nên sử dụng một tệp cấu hình. Sao chép tệp google_ads_config.rb vào thư mục chính của bạn rồi sửa đổi tệp đó để thêm mã thông báo của nhà phát triển, mã ứng dụng, khoá bí mật của ứng dụng, mã làm mới và mã khách hàng:

  # 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'

Ứng dụng sẽ tự động đọc tệp cấu hình từ thư mục chính nếu được tạo thực thể mà không có đối số:

client = Google::Ads::GoogleAds::GoogleAdsClient.new

Ngoài ra, nếu muốn lưu trữ tệp ở nơi khác, bạn có thể khởi tạo ứng dụng bằng cách truyền đường dẫn đến nơi bạn lưu giữ tệp này:

client = Google::Ads::GoogleAds::GoogleAdsClient.new('path/to/google_ads_config.rb')

Nếu không muốn lưu trữ thông tin này trong một tệp và muốn sử dụng các biến môi trường, bạn có thể thiết lập từng biến:

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"

Bạn cũng có thể truyền thông tin theo phương thức có lập trình trong thời gian chạy:

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

Hãy tham khảo hướng dẫn về quy trình xác thực nhiều người dùng để tìm hiểu thêm. Thư viện ứng dụng Ruby có một ví dụ về mã để bạn tham khảo. GenerateUserCredentials là một ví dụ về mã dòng lệnh minh hoạ cách lấy thông tin xác thực người dùng trong thời gian chạy để quản lý tài khoản Google Ads thay cho họ. Bạn có thể sử dụng ví dụ về mã này làm tài liệu tham khảo để tạo các ứng dụng dành cho máy tính cần xác thực người dùng.

Điều gì sẽ xảy ra nếu người dùng của tôi quản lý nhiều tài khoản?

Người dùng thường quản lý nhiều tài khoản Google Ads, thông qua quyền truy cập trực tiếp vào tài khoản hoặc thông qua tài khoản người quản lý Google Ads. Thư viện ứng dụng Ruby cung cấp các ví dụ về mã sau đây minh hoạ cách xử lý những trường hợp như vậy.

  1. Ví dụ về mã GetAccountHierarchy cho biết cách truy xuất danh sách tất cả tài khoản trong một tài khoản người quản lý Google Ads.
  2. Ví dụ về mã ListAccessibleCustomers cho biết cách truy xuất danh sách tất cả tài khoản mà người dùng có quyền truy cập trực tiếp. Sau đó, bạn có thể dùng các tài khoản này làm giá trị hợp lệ cho chế độ cài đặt LoginCustomerId.

Thông tin xác thực mặc định của ứng dụng

Thư viện ứng dụng Ruby cũng hỗ trợ xác thực bằng thông tin đăng nhập mặc định của ứng dụng (ADC). Thư viện này cho phép bạn đặt thông tin đăng nhập mặc định cho ứng dụng mà không cần định cấu hình thông tin OAuth 2.0 trong cấu hình ứng dụng.

Điều này đặc biệt hữu ích cho quá trình phát triển cục bộ hoặc phát triển dựa trên các API khác nhau của Google, vì bạn có thể sử dụng lại cùng một thông tin đăng nhập, miễn là thông tin đăng nhập đó có thể truy cập vào các phạm vi OAuth 2.0 chính xác.

Đối với Google Ads API, hãy đảm bảo thông tin đăng nhập mặc định của ứng dụng có thể truy cập vào phạm vi https://www.googleapis.com/auth/adwords OAuth 2.0.

Để sử dụng thông tin đăng nhập mặc định của ứng dụng, bạn nên dùng công cụ dòng lệnh Google Cloud và xác thực cho ADC:

gcloud auth application-default login

Lệnh này sẽ mở một trình duyệt web để hoàn tất quy trình xác thực cho Tài khoản Google của bạn. Sau khi được uỷ quyền, ứng dụng sẽ lưu trữ thông tin đăng nhập ở một vị trí tiêu chuẩn. Sau đó, bạn cần cập nhật ứng dụng để sử dụng ADC.

Bạn nên sử dụng một tệp cấu hình. Sao chép tệp google_ads_config.rb vào thư mục chính, sau đó thêm mã thông báo nhà phát triển và đặt use_application_default_credentials thành 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

Nếu không muốn lưu trữ thông tin này trong một tệp và muốn sử dụng các biến môi trường, bạn có thể đặt GOOGLE_ADS_DEVELOPER_TOKENGOOGLE_ADS_USE_APPLICATION_DEFAULT_CREDENTIALS:

export GOOGLE_ADS_DEVELOPER_TOKEN="INSERT_DEVELOPER_TOKEN_HERE"
export GOOGLE_ADS_USE_APPLICATION_DEFAULT_CREDENTIALS="true"

Bạn cũng có thể truyền thông tin theo phương thức có lập trình trong thời gian chạy. Khi bạn khởi động ứng dụng trong mã Ruby, đừng cung cấp thông tin đăng nhập OAuth2 rõ ràng. Thư viện sẽ tự động phát hiện và sử dụng thông tin đăng nhập do công cụ dòng lệnh Google Cloud thiết lập. Bạn vẫn cần chỉ định mã thông báo nhà phát triển.

# 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

Hãy tham khảo trang cấu hình để biết thêm thông tin chi tiết về các lựa chọn có sẵn để định cấu hình thư viện ứng dụng Ruby.