প্রমাণীকরণ এবং অনুমোদন

অন্যান্য গুগল এপিআই-এর মতোই, গুগল অ্যাডস এপিআই প্রমাণীকরণ এবং অনুমোদনের জন্য OAuth 2.0 প্রোটোকল ব্যবহার করে। OAuth 2.0 আপনার গুগল অ্যাডস এপিআই ক্লায়েন্ট অ্যাপকে ব্যবহারকারীর লগইন তথ্য পরিচালনা বা সংরক্ষণ না করেই তার গুগল অ্যাডস অ্যাকাউন্ট অ্যাক্সেস করার সুযোগ দেয়।

গুগল অ্যাডস অ্যাক্সেস মডেলটি বুঝুন

গুগল অ্যাডস এপিআই (Google Ads API) কার্যকরভাবে ব্যবহার করার জন্য, গুগল অ্যাডস অ্যাক্সেস মডেল কীভাবে কাজ করে তা আপনার বোঝা উচিত। আমরা গুগল অ্যাডস অ্যাক্সেস মডেল গাইডটি পড়ার পরামর্শ দিই।

OAuth ওয়ার্কফ্লো

গুগল অ্যাডস এপিআই নিয়ে কাজ করার ক্ষেত্রে সাধারণত তিনটি কর্মপ্রবাহ ব্যবহার করা হয়।

পরিষেবা অ্যাকাউন্ট প্রবাহ

আপনার ওয়ার্কফ্লোতে যদি কোনো মানুষের হস্তক্ষেপের প্রয়োজন না হয়, তবে এটিই প্রস্তাবিত কর্মপ্রবাহ। এই কর্মপ্রবাহের জন্য একটি কনফিগারেশন ধাপ প্রয়োজন, যেখানে ব্যবহারকারী তাদের গুগল অ্যাডস অ্যাকাউন্টে একটি সার্ভিস অ্যাকাউন্ট যোগ করেন। এরপর অ্যাপটি সেই সার্ভিস অ্যাকাউন্টের ক্রেডেনশিয়াল ব্যবহার করে ব্যবহারকারীর গুগল অ্যাডস অ্যাকাউন্ট পরিচালনা করতে পারে। এটি কনফিগার করতে, গুগল ক্লাউড কনসোল থেকে JSON কী ফাইলটি তৈরি ও ডাউনলোড করুন, তারপর 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"

এছাড়াও, আপনি রানটাইমে প্রোগ্রাম্যাটিকভাবে তথ্য সরবরাহ করতে পারেন, এর জন্য 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

আরও জানতে সার্ভিস অ্যাকাউন্ট ওয়ার্কফ্লো গাইডটি দেখুন।

একক-ব্যবহারকারী প্রমাণীকরণ প্রবাহ

যদি আপনি সার্ভিস অ্যাকাউন্ট ব্যবহার করতে না পারেন, তবে এই ওয়ার্কফ্লোটি ব্যবহার করা যেতে পারে। এই ওয়ার্কফ্লোটির জন্য দুটি কনফিগারেশন ধাপ প্রয়োজন:

  1. গুগল অ্যাডস এপিআই ব্যবহার করে পরিচালনা করা হবে এমন সমস্ত অ্যাকাউন্টে একজন ব্যবহারকারীকে অ্যাক্সেস দিন। একটি প্রচলিত পদ্ধতি হলো ব্যবহারকারীকে একটি গুগল অ্যাডস এপিআই ম্যানেজার অ্যাকাউন্ট দেওয়া এবং সেই ম্যানেজার অ্যাকাউন্টের অধীনে সমস্ত গুগল অ্যাডস অ্যাকাউন্ট লিঙ্ক করা।
  2. ব্যবহারকারী আপনার অ্যাপকে তার পক্ষ থেকে সমস্ত গুগল অ্যাডস অ্যাকাউন্ট পরিচালনা করার অনুমোদন দিতে gcloud- এর মতো একটি কমান্ড-লাইন টুল অথবা GenerateUserCredentials কোড উদাহরণটি চালান।

আপনার হোম ডিরেক্টরিতে google_ads_config.rb ফাইলটি কপি করে এবং আপনার ডেভেলপার টোকেন, ক্লায়েন্ট আইডি, ক্লায়েন্ট সিক্রেট, ও রিফ্রেশ টোকেন অন্তর্ভুক্ত করার জন্য ফাইলটি পরিবর্তন করে রুবির জন্য OAuth 2.0 ক্রেডেনশিয়াল কনফিগার করা যেতে পারে:

  # 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

আরও জানতে একক-ব্যবহারকারী প্রমাণীকরণ কর্মপ্রবাহ নির্দেশিকাটি দেখুন।

একাধিক ব্যবহারকারী প্রমাণীকরণ প্রবাহ

আপনার অ্যাপ যদি ব্যবহারকারীদের সাইন ইন করতে এবং তাদের পক্ষ থেকে গুগল অ্যাডস অ্যাকাউন্ট পরিচালনা করার জন্য আপনার অ্যাপকে অনুমোদন দেয়, তবে এটিই প্রস্তাবিত ওয়ার্কফ্লো। আপনার অ্যাপ 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

আরও জানতে মাল্টি-ইউজার অথেন্টিকেশন ওয়ার্কফ্লো গাইডটি দেখুন। রুবি ক্লায়েন্ট লাইব্রেরিতে রেফারেন্সের জন্য একটি কোড উদাহরণ রয়েছে। GenerateUserCredentials হলো একটি কমান্ড লাইন কোড উদাহরণ, যা দেখায় কীভাবে রানটাইমে ব্যবহারকারীর অথেন্টিকেশন নিয়ে তাদের পক্ষ থেকে গুগল অ্যাডস অ্যাকাউন্টগুলো পরিচালনা করা যায়। ব্যবহারকারীর অথেন্টিকেশন প্রয়োজন এমন ডেস্কটপ অ্যাপ তৈরি করতে আপনি এই কোড উদাহরণটি রেফারেন্স হিসেবে ব্যবহার করতে পারেন।

যদি আমার ব্যবহারকারী একাধিক অ্যাকাউন্ট পরিচালনা করে তাহলে কী হবে?

একজন ব্যবহারকারীর পক্ষে সরাসরি অ্যাকাউন্টে অ্যাক্সেসের মাধ্যমে অথবা একটি গুগল অ্যাডস ম্যানেজার অ্যাকাউন্টের মাধ্যমে একাধিক গুগল অ্যাডস অ্যাকাউন্ট পরিচালনা করা একটি সাধারণ বিষয়। রুবি ক্লায়েন্ট লাইব্রেরিটি নিম্নলিখিত কোড উদাহরণগুলো প্রদান করে, যা এই ধরনের পরিস্থিতি কীভাবে সামাল দিতে হয় তা তুলে ধরে।

  1. GetAccountHierarchy কোড উদাহরণটি দেখায় কিভাবে একটি গুগল অ্যাডস ম্যানেজার অ্যাকাউন্টের অধীনে থাকা সমস্ত অ্যাকাউন্টের তালিকা পুনরুদ্ধার করতে হয়।
  2. ListAccessibleCustomers কোড উদাহরণটি দেখায় কিভাবে একজন ব্যবহারকারীর সরাসরি অ্যাক্সেস আছে এমন সমস্ত অ্যাকাউন্টের তালিকা পুনরুদ্ধার করতে হয়। এই অ্যাকাউন্টগুলি পরবর্তীতে LoginCustomerId সেটিং-এর জন্য বৈধ মান হিসাবে ব্যবহার করা যেতে পারে।

অ্যাপ্লিকেশন ডিফল্ট ক্রেডেনশিয়াল

রুবি ক্লায়েন্ট লাইব্রেরিটি অ্যাপ্লিকেশন ডিফল্ট ক্রেডেনশিয়াল (ADC) ব্যবহার করে প্রমাণীকরণও সমর্থন করে। এটি আপনাকে আপনার অ্যাপ্লিকেশন কনফিগারেশনের মধ্যে OAuth 2.0 তথ্য কনফিগার করার প্রয়োজন ছাড়াই আপনার অ্যাপ্লিকেশনের জন্য ডিফল্ট ক্রেডেনশিয়াল সেট করতে দেয়।

এটি স্থানীয় ডেভেলপমেন্টের জন্য অথবা বিভিন্ন গুগল এপিআই-এর জন্য ডেভেলপমেন্টের ক্ষেত্রে বিশেষভাবে উপযোগী, কারণ আপনি একই ক্রেডেনশিয়াল পুনরায় ব্যবহার করতে পারেন, যদি সেগুলোর সঠিক OAuth 2.0 স্কোপ অ্যাক্সেস করার ক্ষমতা থাকে।

Google Ads API-এর জন্য, নিশ্চিত করুন যে আপনার অ্যাপ্লিকেশনের ডিফল্ট ক্রেডেনশিয়াল https://www.googleapis.com/auth/adwords OAuth 2.0 স্কোপ অ্যাক্সেস করতে পারে।

অ্যাপ্লিকেশনের ডিফল্ট ক্রেডেনশিয়াল ব্যবহার করতে, আমরা গুগল ক্লাউড কমান্ড লাইন টুল ব্যবহার করে ADC-এর জন্য অথেন্টিকেট করার পরামর্শ দিই:

gcloud auth application-default login

এই কমান্ডটি আপনার গুগল অ্যাকাউন্টের প্রমাণীকরণ প্রক্রিয়াটি সম্পন্ন করার জন্য একটি ওয়েব ব্রাউজার খুলবে। অনুমোদিত হয়ে গেলে, এটি ক্রেডেনশিয়ালগুলো একটি স্ট্যান্ডার্ড লোকেশনে সংরক্ষণ করে। এরপর আপনাকে 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"

আপনি রানটাইমে প্রোগ্রাম্যাটিকভাবেও তথ্য সরবরাহ করতে পারেন। আপনার রুবি কোডে ক্লায়েন্ট ইনিশিয়ালাইজ করার সময়, সুস্পষ্ট OAuth2 ক্রেডেনশিয়াল প্রদান করবেন না । লাইব্রেরিটি স্বয়ংক্রিয়ভাবে গুগল ক্লাউড কমান্ড লাইন টুল দ্বারা সেট করা ক্রেডেনশিয়াল শনাক্ত করে ব্যবহার করবে। আপনাকে তবুও আপনার ডেভেলপার টোকেন উল্লেখ করতে হবে।

# 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

রুবি ক্লায়েন্ট লাইব্রেরি কনফিগার করার জন্য উপলব্ধ অপশনগুলো সম্পর্কে আরও বিস্তারিত জানতে কনফিগারেশন পৃষ্ঠাটি দেখুন।