Es gibt zwei Arten von Google Ads-Konten: Google Ads-Verwaltungskonten und Google Ads-Werbetreibendenkonten (auch als Kundenkonten bezeichnet). Mit Verwaltungskonten lassen sich andere Google Ads-Verwaltungskonten oder Google Ads-Werbekonten verwalten. Sie können ein Werbetreibendenkonto mit einem Verwaltungskonto verknüpfen und es dann über das Verwaltungskonto verwalten. Die gesamte verknüpfte Struktur ist ein gerichteter azyklischer Graph mit Werbetreibendenkonten auf Blattebene.
Sie können einzelnen Nutzern oder Dienstkonten Zugriff auf Google Ads-Konten gewähren. Es gibt zwei Möglichkeiten, Nutzern Zugriff auf ein Werbetreibendenkonto zu gewähren:
- Gewähren Sie dem Nutzer direkten Zugriff auf das Werbekonto, indem Sie ihn dazu einladen.
- Gewähren Sie dem Nutzer indirekten Zugriff auf das Werbekonto, indem Sie ihn in ein Verwaltungskonto einladen, das mit diesem Konto verknüpft ist. Der Nutzer erhält Zugriff auf das Werbetreibendenkonto, da das Verwaltungskonto Zugriff auf alle damit verknüpften Konten hat.
Sie können auch Nutzerrollen zuweisen, wenn Sie einen Nutzer einladen, ein Konto zu verwalten.
Sehen Sie sich die folgende Kontohierarchie an. Angenommen, alle Nutzer haben Standardzugriff.
In der folgenden Tabelle ist diese Kontostruktur zusammengefasst.
Nutzer | Hat direkten Zugriff auf | Hat indirekten Zugriff auf |
---|---|---|
U1, SA1 | M1 | M2, A1, A2, A3 |
U2 | M2, M3 | A1, A2, A3, A4 |
U3 | A4 |
Kundennummer für die Anmeldung
Ein Nutzer kann Zugriff auf mehrere Kontohierarchien haben. Wenn Sie in solchen Fällen einen API-Aufruf durchführen, müssen Sie das zu verwendende Stammkonto angeben, um die Autorisierungs- und Konto-Zugriffsebenen richtig zu bestimmen. Dazu geben Sie in der API-Anfrage einen login-customer-id
-Header an.
In der folgenden Tabelle wird die Kontohierarchie aus dem vorherigen Beispiel verwendet, um zu zeigen, welche Kunden-IDs für die Anmeldung Sie verwenden können und auf welche Konten Sie jeweils API-Aufrufe ausführen können.
Nutzer | Zu verwendende Kundennummer für die Anmeldung | Konten für API-Aufrufe |
---|---|---|
U1, SA1 | M1 | M1, M2, A1, A2, A3 |
U2 | M2 | M2, A1, A2, A3 |
U2 | M3 | M3, A1, A4 |
U3 | A4 | A4 |
Sie können den login-customer-id
-Header weglassen, wenn der Nutzer direkten Zugriff auf das Google Ads-Konto hat, für das Sie Aufrufe ausführen. Wenn Sie beispielsweise U3
-Anmeldedaten verwenden, um einen Aufruf an A4
zu senden, müssen Sie den login-customer-id
-Header nicht angeben, da die Google Ads-Server die Zugriffsebene anhand der Kunden-ID (A4
) korrekt ermitteln können.
Wenn Sie eine unserer Clientbibliotheken verwenden, geben Sie den login-customer-id
-Header mit den folgenden Einstellungen an.
Java
Fügen Sie Ihrer ads.properties
-Datei die folgende Einstellung hinzu.
api.googleads.loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE
C#
Fügen Sie die folgende Einstellung hinzu, wenn Sie das GoogleAdsConfig
-Objekt initialisieren und damit ein GoogleAdsClient
-Objekt erstellen.
GoogleAdsConfig config = new GoogleAdsConfig()
{
...
LoginCustomerId = ******
};
GoogleAdsClient client = new GoogleAdsClient(config);
PHP
Fügen Sie Ihrer google_ads_php.ini
-Datei die folgende Einstellung hinzu.
[GOOGLE_ADS]
loginCustomerId = "INSERT_LOGIN_CUSTOMER_ID_HERE"
Python
Fügen Sie Ihrer google-ads.yaml
-Datei die folgende Einstellung hinzu.
login_customer_id: INSERT_LOGIN_CUSTOMER_ID_HERE
Ruby
Fügen Sie Ihrer google_ads_config.rb
-Datei die folgende Einstellung hinzu.
Google::Ads::GoogleAds::Config.new do |c|
c.login_customer_id = 'INSERT_LOGIN_CUSTOMER_ID_HERE'
end
Erstellen Sie eine GoogleAdsClient
-Instanz, indem Sie den Pfad zu dem Speicherort dieser Datei übergeben.
client = Google::Ads::GoogleAds::GoogleAdsClient.new('path/to/google_ads_config.rb')
Perl
Fügen Sie Ihrer googleads.properties
-Datei die folgende Einstellung hinzu.
loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE
curl
Geben Sie das folgende Befehlszeilenargument an, wenn Sie den Befehl curl
ausführen.
-H "login-customer-id: LOGIN_CUSTOMER_ID"
Mit der Methode CustomerService.ListAccessibleCustomers
können Sie die Liste der Konten abrufen, auf die ein Nutzer direkten Zugriff hat. Diese Konten können als gültige Werte für den login-customer-id
-Header verwendet werden.
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}" \
Nutzerrollen
Für die Google Ads API gibt es kein eigenes Zugriffsmodell und es werden auch keine separaten OAuth 2.0-Bereiche verwendet, um die Funktionalität einzuschränken. In der Google Ads API werden beispielsweise dieselben Bereiche für Lese- und Lese-/Schreibvorgänge verwendet. Stattdessen werden in der Google Ads API dieselben Nutzerrollen verwendet, die in Google Ads unterstützt werden. Wenn einem Konto auf Verwaltungskontoebene eine Nutzerrolle zugewiesen wird, wird die Rolle von den Konten in der Hierarchie übernommen. Wenn ein Nutzer widersprüchliche Rollen für ein bestimmtes Konto hat, wird die richtige Ebene durch das in der API-Anfrage angegebene login-customer-id
-Konto bestimmt.
In der folgenden Tabelle wird die Kontohierarchie aus dem vorherigen Beispiel verwendet, um die Auswirkungen der Zuweisung verschiedener Nutzerrollen zu veranschaulichen.
Nutzer | Nutzerrolle gewährt | login-customer-id | Effektive Zugriffsebene |
---|---|---|---|
SA1 | Standardzugriff auf Konto M1 | M1 | Standardzugriff auf M1, M2, A1, A2, A3 |
U2 |
Standardzugriff auf M2 Lesezugriff auf M3 |
M2 | Standardzugriff auf M2, A1, A2, A3 |
U2 |
Standardzugriff auf M2 Lesezugriff auf M3 |
M3 | Schreibgeschützter Zugriff auf M3, A1, A4 |