İki tür Google Ads hesabı vardır: Google Ads yönetici hesapları ve Google Ads reklamveren hesapları. Bu terimlerin ve diğer terimlerin (ör. müşteri hesabı ve müşteri) birbiriyle nasıl ilişkili olduğuna dair ayrıntılı açıklama için Hesap türleri başlıklı makaleyi inceleyin.
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ğlantılı yapı, yaprak düzeyinde reklamveren hesapları içeren yönlendirilmiş döngüsüz grafiktir.
Google Ads hesaplarına tek tek kullanıcılara veya hizmet hesaplarına erişim izni verebilirsiniz. Kullanıcılara bir reklamveren hesabına erişim izni vermenin iki yolu vardır:
- Kullanıcıyı reklamveren hesabına davet ederek hesaba doğrudan erişim izni verin.
- Kullanıcıyı reklamveren hesabına bağlı bir yönetici hesabına davet ederek reklamveren hesabına dolaylı erişim izni verin. Yönetici hesabı, altında bağlı tüm hesaplara erişebildiğinden kullanıcı, reklamveren hesabına erişim kazanır.
Bir kullanıcıyı hesabı 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ı | Aşağıdakilere doğrudan erişimi olmalıdır: | Aşağıdakilere dolaylı erişimi olmalıdır: |
|---|---|---|
| U1, SA1 | M1 | M2, A1, A2, A3 |
| U2 | M2, M3 | A1, A2, A3, A4 |
| U3 | A4 |
Giriş yapan müşteri kimliği
Bir kullanıcı birden fazla hesap hiyerarşisine erişebilir. Bu gibi durumlarda 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. Bunu yapmak için API isteğinize login-customer-id başlığını ekleyin.
Aşağıdaki tabloda, kullanabileceğiniz giriş müşteri kimliklerini ve çağrı yapabileceğiniz ilgili hesapların listesini göstermek için önceki örnekteki hesap hiyerarşisi kullanılmıştır.
| Kullanıcı | Kullanmak için oturum açma müşteri kimliği | API çağrısı 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 başlığını sağlamayı atlayabilirsiniz. Örneğin, login-customer-id kimlik bilgilerini kullanarak U3 numarasına çağrı yaparken A4 başlığını belirtmeniz gerekmez. Çünkü Google Ads sunucuları, müşteri kimliğinden (A4) erişim düzeyini doğru şekilde belirleyebilir.
Google Ads API istemci kitaplığı 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
.NET
GoogleAdsConfig nesnesini ilk kullanıma hazırlarken aşağıdaki ayarı ekleyin
ve GoogleAdsClient nesnesi oluşturmak için kullanın.
GoogleAdsConfig config = new GoogleAdsConfig()
{
// ...
LoginCustomerId = "INSERT_LOGIN_CUSTOMER_ID_HERE"
};
GoogleAdsClient client = new GoogleAdsClient(config);
Python
google-ads.yaml dosyanıza aşağıdaki ayarı ekleyin.
login_customer_id: INSERT_LOGIN_CUSTOMER_ID_HERE
PHP
google_ads_php.ini dosyanıza aşağıdaki ayarı ekleyin.
[GOOGLE_ADS]
loginCustomerId = "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 yolu 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: INSERT_LOGIN_CUSTOMER_ID_HERE"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 üstbilgisi 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.V25.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, # 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 "Authorization: Bearer ${OAUTH2_ACCESS_TOKEN}" \
ListAccessibleCustomers yöntemi müşteri kimliğimi almazsa ne olur?
CustomerService.ListAccessibleCustomers yöntemi, sonuçlarda görünmesini beklediğiniz bir müşteri kimliğini getirmediyse bunun birkaç olası açıklaması vardır.
Müşteri kimliğine erişiminiz var ancak erişim bir üst yönetici hesabı üzerinden veriliyor. Örneğin, önceki örnekte
ListAccessibleCustomersyönteminiU1kullanıcısının kimlik bilgileriyle çağırırsanızU1kullanıcısının daha fazla hesaba erişimi olsa bile yöntem, sonuçlarda yalnızcaM1değerini döndürür. Bu olasılığı doğrulamak içinListAccessibleCustomersyönteminin döndürdüğü hesapların her biri içincustomer_clientkaynağına karşısearchveyasearchStreamsorguları yürüterek hesap hiyerarşisini alın. Bunu yapmak için önceki bölümde açıklandığı gibi bu hesapların her birinilogin-customer-idolarak ayarlayın. Hedef hesaba erişiminiz varsa hesabı, hesap hiyerarşilerinden birinin parçası olarak getirebilirsiniz.Yanlış OAuth kimlik bilgileri kullanıyorsunuz. En yaygın senaryo, farklı bir kullanıcının kimlik bilgilerini kullanmanızdır. Örneğin, korumalı alan veya geliştirici kimlik bilgilerinin yanlışlıkla üretim kimlik bilgileriyle karıştırılması ya da veritabanından veya yerel önbellekten farklı bir kullanıcının kimlik bilgilerinin yanlış okunması buna neden olabilir. Bu sorunu gidermenin bir yolu, Google People API'yi kullanarak giriş yapan kullanıcının adını ve e-posta adresini almak ve beklediğiniz e-posta adresiyle eşleşip eşleşmediğini doğrulamaktır.
Hesaba erişiminiz yok. Doğru müşteri hesabına erişmek için hesap erişimi kılavuzundaki adımları uygulayın.
Kullanıcı rolleri
Google Ads API'nin kendi 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. Bir hesaba yönetici düzeyinde kullanıcı rolü verildiğinde bu rol, hiyerarşideki hesaplar tarafından devralınır. Bir kullanıcının belirli bir hesap için çelişen rolleri varsa doğru düzey, API isteğinde belirtilen login-customer-id hesabı tarafından çözümlenir.
Aşağıdaki tabloda, önceki örnekteki hesap hiyerarşisi kullanılmış ve kullanıcılara çeşitli kullanıcı rolleri vermenin etkisi gösterilmiştir.
| 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 okuma erişimi |
M2 | M2, A1, A2, A3'te standart erişim |
| U2 |
M2'de standart erişim M3'te salt okuma erişimi |
M3 | M3, A1, A4'te salt okuma erişimi |