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

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

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

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

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

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

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

นี่คือเวิร์กโฟลว์ที่แนะนำหากเวิร์กโฟลว์ของคุณไม่จำเป็นต้องมีการโต้ตอบจากบุคคล เวิร์กโฟลว์นี้ต้องมีขั้นตอนการกำหนดค่า ซึ่งผู้ใช้จะเพิ่มบัญชีบริการลงในบัญชี 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 API อื่นๆ เนื่องจากคุณสามารถนำข้อมูลเข้าสู่ระบบเดียวกันกลับมาใช้ใหม่ได้ ตราบใดที่ข้อมูลเข้าสู่ระบบนั้นเข้าถึงขอบเขต OAuth 2.0 ที่จำเป็นได้

สำหรับ Google Ads API โปรดตรวจสอบว่าข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชันเข้าถึงhttps://www.googleapis.com/auth/adwordsขอบเขต OAuth 2.0 ได้

หากต้องการใช้ข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชัน ให้ใช้เครื่องมือบรรทัดคำสั่งของ 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 ได้ที่หน้าการกำหนดค่า