İki tür Google Ads hesabı vardır: Google Ads yönetici hesapları ve Google Ads reklamveren hesapları (müşteri hesapları olarak da bilinir). Yönetici hesapları, diğer Google Ads yönetici hesaplarını veya Google Ads reklamveren hesaplarını yönetebilir. Bir reklamveren hesabını yönetici hesabına bağlayabilir ve ardından reklamveren hesabını yönetici hesabı üzerinden yönetebilirsiniz. Genel bağlı yapı, yaprak düzeyinde reklamveren hesaplarının bulunduğu bir yönlü döngüsüz grafiktir.
Google Ads hesaplarına ayrı ayrı kullanıcılar veya hizmet hesapları erişebilir. Kullanıcılara bir reklamveren hesabına erişim izni vermenin iki yolu vardır:
- Kullanıcıyı bu hesaba davet ederek doğrudan reklamveren hesabına erişim izni verin.
- Kullanıcıyı bu hesaba bağlı bir yönetici hesabına davet ederek reklamveren hesabına dolaylı erişim izni verin. Yönetici hesabı, altında bağlı olan tüm hesaplara erişebildiğinden kullanıcı, reklamveren hesabına erişim kazanır.
Bir kullanıcıyı hesap yönetmeye davet ettiğinizde kullanıcı rolleri de atayabilirsiniz.
Aşağıdaki hesap hiyerarşisini ele alalım. Tüm kullanıcıların standart erişime sahip olduğunu varsayın.
Aşağıdaki tabloda bu hesap yapısı özetlenmektedir.
Kullanıcı | Şunlara doğrudan erişimi olmalıdır: | Şunlara dolaylı erişimi var: |
---|---|---|
U1, SA1 | M1 | M2, A1, A2, A3 |
U2 | M2, M3 | A1, A2, A3, A4 |
U3 | A4 |
Giriş müşteri kimliği
Bir kullanıcının birden fazla hesap hiyerarşisine erişimi olabilir. Bu gibi durumlarda bir API çağrısı yaparken yetkilendirme ve hesap erişim düzeylerini doğru şekilde belirlemek için kullanılacak kök hesabı belirtmeniz gerekir. Bu işlem, API isteği kapsamında bir login-customer-id
üstbilgisi belirtilerek yapılır.
Aşağıdaki tabloda, hangi giriş müşteri kimliklerini kullanabileceğinizi ve çağrı yapabileceğiniz ilgili hesap listesini göstermek için önceki örnekteki hesap hiyerarşisi kullanılmaktadır.
Kullanıcı | Kullanmak için oturum açma müşteri kimliği | API çağrıları yapılacak hesaplar |
---|---|---|
U1, SA1 | M1 | M1, M2, A1, A2, A3 |
U2 | M2 | M2, A1, A2, A3 |
U2 | M3 | M3, A1, A4 |
U3 | A4 | A4 |
Kullanıcının, çağrı yaptığınız Google Ads hesabına doğrudan erişimi varsa login-customer-id
üstbilgisini sağlamayı atlayabilirsiniz. Örneğin, A4
'ye çağrı yapmak için U3
kimlik bilgilerini kullanırken login-customer-id
üstbilgisini belirtmeniz gerekmez. Bunun nedeni, Google Ads sunucularının müşteri kimliğinden (A4
) erişim düzeyini doğru şekilde belirleyebilmesidir.
İstemci kitaplıklarımızdan birini kullanıyorsanız login-customer-id
üstbilgisini belirtmek için aşağıdaki ayarları kullanın.
Java
ads.properties
dosyanıza aşağıdaki ayarı ekleyin.
api.googleads.loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE
C#
GoogleAdsConfig
nesnesini başlatırken aşağıdaki ayarı ekleyin ve GoogleAdsClient
nesnesi oluşturmak için kullanın.
GoogleAdsConfig config = new GoogleAdsConfig()
{
...
LoginCustomerId = ******
};
GoogleAdsClient client = new GoogleAdsClient(config);
PHP
google_ads_php.ini
dosyanıza aşağıdaki ayarı ekleyin.
[GOOGLE_ADS]
loginCustomerId = "INSERT_LOGIN_CUSTOMER_ID_HERE"
Python
google-ads.yaml
dosyanıza aşağıdaki ayarı ekleyin.
login_customer_id: INSERT_LOGIN_CUSTOMER_ID_HERE
Ruby
google_ads_config.rb
dosyanıza aşağıdaki ayarı ekleyin.
Google::Ads::GoogleAds::Config.new do |c|
c.login_customer_id = 'INSERT_LOGIN_CUSTOMER_ID_HERE'
end
Bu dosyayı sakladığınız yerin yolunu ileterek bir GoogleAdsClient
örneği oluşturun.
client = Google::Ads::GoogleAds::GoogleAdsClient.new('path/to/google_ads_config.rb')
Perl
googleads.properties
dosyanıza aşağıdaki ayarı ekleyin.
loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE
curl
curl
komutunu çalıştırırken aşağıdaki komut satırı bağımsız değişkenini belirtin.
-H "login-customer-id: LOGIN_CUSTOMER_ID"
Bir kullanıcının doğrudan erişebildiği hesapların listesini almak için CustomerService.ListAccessibleCustomers
yöntemini kullanabilirsiniz. Bu hesaplar, login-customer-id
üst bilgisi için geçerli değerler olarak kullanılabilir.
Java
private void runExample(GoogleAdsClient client) { // Optional: Change credentials to use a different refresh token, to retrieve customers // available for a specific user. // // UserCredentials credentials = // UserCredentials.newBuilder() // .setClientId("INSERT_OAUTH_CLIENT_ID") // .setClientSecret("INSERT_OAUTH_CLIENT_SECRET") // .setRefreshToken("INSERT_REFRESH_TOKEN") // .build(); // // client = client.toBuilder().setCredentials(credentials).build(); try (CustomerServiceClient customerService = client.getLatestVersion().createCustomerServiceClient()) { ListAccessibleCustomersResponse response = customerService.listAccessibleCustomers( ListAccessibleCustomersRequest.newBuilder().build()); System.out.printf("Total results: %d%n", response.getResourceNamesCount()); for (String customerResourceName : response.getResourceNamesList()) { System.out.printf("Customer resource name: %s%n", customerResourceName); } } }
C#
public void Run(GoogleAdsClient client) { // Get the CustomerService. CustomerServiceClient customerService = client.GetService(Services.V21.CustomerService); try { // Retrieve the list of customer resources. string[] customerResourceNames = customerService.ListAccessibleCustomers(); // Display the result. foreach (string customerResourceName in customerResourceNames) { Console.WriteLine( $"Found customer with resource name = '{customerResourceName}'."); } } catch (GoogleAdsException e) { Console.WriteLine("Failure:"); Console.WriteLine($"Message: {e.Message}"); Console.WriteLine($"Failure: {e.Failure}"); Console.WriteLine($"Request ID: {e.RequestId}"); throw; } }
PHP
public static function runExample(GoogleAdsClient $googleAdsClient) { $customerServiceClient = $googleAdsClient->getCustomerServiceClient(); // Issues a request for listing all accessible customers. $accessibleCustomers = $customerServiceClient->listAccessibleCustomers(new ListAccessibleCustomersRequest()); print 'Total results: ' . count($accessibleCustomers->getResourceNames()) . PHP_EOL; // Iterates over all accessible customers' resource names and prints them. foreach ($accessibleCustomers->getResourceNames() as $resourceName) { /** @var string $resourceName */ printf("Customer resource name: '%s'%s", $resourceName, PHP_EOL); } }
Python
def main(client: GoogleAdsClient) -> None: customer_service: CustomerServiceClient = client.get_service( "CustomerService" ) accessible_customers: ListAccessibleCustomersResponse = ( customer_service.list_accessible_customers() ) result_total: int = len(accessible_customers.resource_names) print(f"Total results: {result_total}") resource_names: List[str] = accessible_customers.resource_names for resource_name in resource_names: # resource_name is implicitly str print(f'Customer resource name: "{resource_name}"')
Ruby
def list_accessible_customers() # GoogleAdsClient will read a config file from # ENV['HOME']/google_ads_config.rb when called without parameters client = Google::Ads::GoogleAds::GoogleAdsClient.new accessible_customers = client.service.customer.list_accessible_customers().resource_names accessible_customers.each do |resource_name| puts "Customer resource name: #{resource_name}" end end
Perl
sub list_accessible_customers { my ($api_client) = @_; my $list_accessible_customers_response = $api_client->CustomerService()->list_accessible_customers(); printf "Total results: %d.\n", scalar @{$list_accessible_customers_response->{resourceNames}}; foreach my $resource_name (@{$list_accessible_customers_response->{resourceNames}}) { printf "Customer resource name: '%s'.\n", $resource_name; } return 1; }
curl
# Returns the resource names of customers directly accessible by the user # authenticating the call. # # Variables: # API_VERSION, # DEVELOPER_TOKEN, # OAUTH2_ACCESS_TOKEN: # See https://developers.google.com/google-ads/api/rest/auth#request_headers # for details. # curl -f --request GET \ "https://googleads.googleapis.com/v${API_VERSION}/customers:listAccessibleCustomers" \ --header "Content-Type: application/json" \ --header "developer-token: ${DEVELOPER_TOKEN}" \ --header "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
Kullanıcı rolleri
Google Ads API'nin kendi başına ayrı bir erişim modeli yoktur veya işlevselliği sınırlamak için ayrı OAuth 2.0 kapsamları kullanılmaz. Örneğin, Google Ads API, salt okunur ve okuma/yazma işlemleri için aynı kapsamları kullanır. Bunun yerine Google Ads API, Google Ads'in desteklediği kullanıcı rollerini kullanır. Yönetici düzeyinde bir hesaba kullanıcı rolü verildiğinde, bu rol hiyerarşideki hesaplar tarafından devralınır. Bir kullanıcının belirli bir hesapla çakışan rolleri varsa doğru düzey, API isteğinde belirtilen login-customer-id
hesabı tarafından belirlenir.
Aşağıdaki tabloda, önceki örnekteki hesap hiyerarşisi kullanılmakta ve kullanıcılara çeşitli kullanıcı rolleri verilmesinin etkisi gösterilmektedir.
Kullanıcı | Kullanıcı rolü verildi | login-customer-id | Etkili erişim düzeyi |
---|---|---|---|
SA1 | M1 hesabında standart erişim | M1 | M1, M2, A1, A2, A3'te standart erişim |
U2 |
M2'de standart erişim M3'te salt okunur erişim |
M2 | M2, A1, A2, A3'te standart erişim |
U2 |
M2'de standart erişim M3'te salt okunur erişim |
M3 | Readonly access on M3, A1, A4 |