การตรวจสอบสิทธิ์และการให้สิทธิ์

Google Ads API ใช้โปรโตคอล OAuth 2.0 สำหรับการตรวจสอบสิทธิ์และการให้สิทธิ์เช่นเดียวกับ Google APIs อื่นๆ OAuth 2.0 ช่วยให้แอปไคลเอ็นต์ Google Ads API เข้าถึงบัญชี Google Ads ของผู้ใช้ได้โดยไม่ต้องจัดการหรือจัดเก็บข้อมูลการเข้าสู่ระบบของผู้ใช้

ทำความเข้าใจรูปแบบการเข้าถึง Google Ads

หากต้องการทํางานกับ Google Ads API อย่างมีประสิทธิภาพ โปรดทําความเข้าใจวิธีการทํางานของรูปแบบการเข้าถึง Google Ads ดูคู่มือรูปแบบการเข้าถึง Google Ads

เวิร์กโฟลว์ OAuth

เวิร์กโฟลว์ที่ใช้กันทั่วไปเมื่อทำงานกับ Google Ads API มีอยู่ 3 แบบ

โฟลว์บัญชีบริการ

เราขอแนะนำให้ใช้เวิร์กโฟลว์นี้หากเวิร์กโฟลว์ของคุณไม่จำเป็นต้องมีการโต้ตอบกับมนุษย์ เวิร์กโฟลว์นี้ต้องมีขั้นตอนการกำหนดค่า ซึ่งผู้ใช้จะเพิ่มบัญชีบริการลงในบัญชี Google Ads จากนั้นแอปจะใช้ข้อมูลเข้าสู่ระบบของบัญชีบริการเพื่อจัดการบัญชี Google Ads ของผู้ใช้ได้ หากต้องการกำหนดค่านี้ ให้สร้างและดาวน์โหลดไฟล์คีย์ JSON ในคอนโซล Google Cloud จากนั้นคัดลอก google_ads_config.rb ไปยังไดเรกทอรีหลัก แล้วแก้ไขเพื่อระบุตำแหน่งไฟล์คีย์ของบัญชีบริการ (และอีเมลที่ไม่บังคับของผู้ใช้ที่จะแอบอ้างเมื่อใช้การมอบสิทธิ์ทั่วทั้งโดเมนของ 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'

หากไม่ต้องการจัดเก็บข้อมูลนี้ในไฟล์และต้องการใช้ตัวแปรสภาพแวดล้อมแทน คุณสามารถตั้งค่า GOOGLE_ADS_JSON_KEY_FILE_PATH (และ GOOGLE_ADS_IMPERSONATED_EMAIL ที่ไม่บังคับ) ได้ดังนี้

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"

นอกจากนี้ คุณยังส่งเส้นทางไฟล์คีย์ของบัญชีบริการ (และอีเมลที่แอบอ้างซึ่งไม่บังคับ) แบบเป็นโปรแกรมขณะรันไทม์ได้ด้วย โดยทำดังนี้

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

หรือจะใช้ gem googleauth เพื่อสร้างข้อมูลเข้าสู่ระบบของบัญชีบริการและส่ง credentials.updater_proc ไปยัง 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

ดูข้อมูลเพิ่มเติมได้ที่คู่มือเวิร์กโฟลว์ของบัญชีบริการ

ขั้นตอนการตรวจสอบสิทธิ์ผู้ใช้รายเดียว

คุณสามารถใช้เวิร์กโฟลว์นี้ได้หากใช้บัญชีบริการไม่ได้ เวิร์กโฟลว์นี้ต้องมีการกำหนดค่า 2 ขั้นตอนดังนี้

  1. ให้สิทธิ์ผู้ใช้รายเดียวเข้าถึงบัญชีทั้งหมดที่จะจัดการโดยใช้ Google Ads API แนวทางที่พบบ่อยคือการให้สิทธิ์ผู้ใช้เข้าถึงบัญชีดูแลจัดการ Google Ads API และลิงก์บัญชี Google Ads ทั้งหมดภายใต้บัญชีดูแลจัดการนั้น
  2. ผู้ใช้เรียกใช้เครื่องมือบรรทัดคำสั่ง เช่น เครื่องมือบรรทัดคำสั่ง Google Cloud หรือตัวอย่างโค้ด GenerateUserCredentials เพื่อให้สิทธิ์แอปของคุณจัดการบัญชี Google Ads ทั้งหมดในนามของผู้ใช้

คุณสามารถกำหนดค่าข้อมูลเข้าสู่ระบบ OAuth 2.0 สำหรับ Ruby ได้โดยคัดลอกไฟล์ google_ads_config.rb ไปยังไดเรกทอรีหลัก แล้วแก้ไขให้มีรหัสไคลเอ็นต์ รหัสลับไคลเอ็นต์ และโทเค็นการรีเฟรช ดังนี้

# 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_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.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 ไปยังไดเรกทอรีหลัก แล้วแก้ไขให้มีรหัสไคลเอ็นต์ รหัสลับไคลเอ็นต์ โทเค็นการรีเฟรช และรหัสลูกค้า ดังนี้

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

ไคลเอ็นต์จะอ่านไฟล์การกำหนดค่าจากไดเรกทอรีหลักโดยอัตโนมัติหากสร้างอินสแตนซ์โดยไม่มีอาร์กิวเมนต์

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

หรือหากต้องการจัดเก็บไฟล์ไว้ที่อื่น คุณสามารถสร้างอินสแตนซ์ไคลเอ็นต์โดยส่งเส้นทางไปยังตำแหน่งที่คุณเก็บไฟล์นี้ไว้ ดังนี้

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

หากไม่ต้องการจัดเก็บข้อมูลนี้ในไฟล์และต้องการใช้ตัวแปรสภาพแวดล้อมแทน คุณสามารถตั้งค่าตัวแปรแต่ละรายการได้ดังนี้

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.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 มากกว่า 1 บัญชี ไม่ว่าจะผ่านการเข้าถึงบัญชีโดยตรงหรือผ่านบัญชีดูแลจัดการ Google Ads ไลบรารีของไคลเอ็นต์ Ruby มีตัวอย่างโค้ดต่อไปนี้ที่แสดงวิธีจัดการกรณีดังกล่าว

  1. ตัวอย่างโค้ด GetAccountHierarchy แสดงวิธีดึงข้อมูลรายการบัญชีทั้งหมดภายใต้บัญชีดูแลจัดการ Google Ads
  2. ตัวอย่างโค้ด ListAccessibleCustomers แสดงวิธีดึงข้อมูลรายการบัญชีทั้งหมดที่ผู้ใช้มีสิทธิ์เข้าถึงโดยตรง จากนั้นจะใช้บัญชีเหล่านี้เป็นค่าที่ถูกต้องสำหรับการตั้งค่า login_customer_id ได้

ข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชัน

ไลบรารีของไคลเอ็นต์ Ruby (v36.1.0 ขึ้นไป) ยังรองรับการตรวจสอบสิทธิ์ด้วยข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชัน (ADC) ด้วย ซึ่งช่วยให้คุณตั้งค่าข้อมูลเข้าสู่ระบบเริ่มต้นสำหรับแอปพลิเคชันได้โดยไม่ต้องกำหนดค่าข้อมูล OAuth 2.0 ภายในการกำหนดค่าแอปพลิเคชัน

ซึ่งจะเป็นประโยชน์อย่างยิ่งสำหรับการพัฒนาในเครื่องหรือการพัฒนาสำหรับ Google APIs ต่างๆ เนื่องจากคุณสามารถใช้ข้อมูลเข้าสู่ระบบเดียวกันซ้ำได้ หากข้อมูลเข้าสู่ระบบดังกล่าวเข้าถึงขอบเขต OAuth 2.0 ที่จำเป็นได้

สำหรับ Google Ads API โปรดตรวจสอบว่าข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชันสามารถเข้าถึงขอบเขต 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 ดังนี้

# 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_USE_APPLICATION_DEFAULT_CREDENTIALS ได้ดังนี้

export GOOGLE_ADS_USE_APPLICATION_DEFAULT_CREDENTIALS="true"

นอกจากนี้ คุณยังส่งข้อมูลแบบเป็นโปรแกรมขณะรันไทม์ได้ด้วย เมื่อเริ่มต้นไคลเอ็นต์ในโค้ด Ruby ให้ตั้งค่า config.use_application_default_credentials = true และไม่ต้องระบุข้อมูลเข้าสู่ระบบ OAuth 2.0 ที่ชัดเจน ไลบรารีจะตรวจหาและใช้ข้อมูลเข้าสู่ระบบที่ตั้งค่าโดยเครื่องมือบรรทัดคำสั่ง 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

ดูรายละเอียดเพิ่มเติมเกี่ยวกับตัวเลือกที่ใช้ได้ในการกำหนดค่าไลบรารีของไคลเอ็นต์ Ruby ได้ที่หน้าการกำหนดค่า