В этом руководстве представлен краткий обзор того, как начать работу с библиотекой Google Ads API .NET.
Установка
Двоичные файлы клиентской библиотеки распространяются с помощью NuGet. Добавьте ссылку NuGet на пакет Google.Ads.GoogleAds
в свой проект, чтобы использовать клиентскую библиотеку.
Настроить авторизацию
Чтобы авторизовать вызовы API, вам необходимо указать в библиотеке свой идентификатор клиента, секрет клиента, токен обновления и токен разработчика.
Если вам нужно сгенерировать учетные данные
- Следуйте руководству по токену разработчика , чтобы получить токен разработчика, если у вас его еще нет.
- Следуйте руководству по работе с классическим приложением OAuth, чтобы создать идентификатор клиента, секрет клиента и токен обновления.
Если у вас уже есть учетные данные
- Скопируйте узел
GoogleAdsApi
и разделGoogleAdsApi
в узлеconfigSections
из файлаApp.config
на GitHub в файлApp.config
/Web.config
. Если вы использовали NuGet для установки пакета, эти узлы будут автоматически вставлены в ваш файлApp.config
/Web.config
. - Включите токен разработчика, идентификатор клиента, секрет клиента и токен обновления в
App.config
/Web.config
вашего приложения.
Файл App.config
, включенный в GitHub, хорошо документирован, но вы также можете обратиться к руководству по настройке , чтобы узнать больше, а также использовать альтернативные способы настройки клиентской библиотеки, такие как переменные среды.
Сделать вызов API
Основное использование клиентской библиотеки выглядит следующим образом:
// Create a Google Ads client.
GoogleAdsClient client = new GoogleAdsClient();
// Create the required service.
CampaignServiceClient campaignService =
client.GetService(Services.V18.CampaignService);
// Make more calls to service class.
Создайте экземпляр GoogleAdsClient.
Наиболее важными классами в библиотеке Google Ads API .NET является класс GoogleAdsClient
. Он позволяет создать предварительно настроенный класс обслуживания, который можно использовать для вызовов API. GoogleAdsClient
предоставляет конструктор по умолчанию, который создает объект пользователя, используя настройки, указанные в App.config
/ Web.config
вашего приложения. Дополнительные сведения о параметрах конфигурации см. в руководстве по настройке .
// Create a new GoogleAdsClient with the App.config settings.
GoogleAdsClient user = new GoogleAdsClient();
Создать услугу
GoogleAdsClient
предоставляет метод GetService
, который можно использовать для создания рекламного сервиса.
CampaignServiceClient campaignService = client.GetService(Services.V18.CampaignService);
// Now make calls to CampaignService.
Мы предоставляем класс Services
, который перечисляет все поддерживаемые версии API и сервисы. Метод GetService
принимает эти объекты перечисления в качестве аргумента при создании службы. Например, чтобы создать экземпляр CampaignServiceClient
для версии V18
API Google Рекламы, вам необходимо вызвать метод GoogleAdsClient.GetService
с Services.V18.CampaignService
в качестве аргумента, как показано в предыдущем примере.
Безопасность резьбы
Совместное использование экземпляра GoogleAdsClient
несколькими потоками небезопасно, поскольку изменения конфигурации, которые вы вносите в экземпляр в одном потоке, могут повлиять на сервисы, создаваемые вами в других потоках. Такие операции, как получение новых экземпляров службы из экземпляра GoogleAdsClient
и параллельные вызовы нескольких служб, являются потокобезопасными.
Многопоточное приложение будет выглядеть примерно так:
GoogleAdsClient client1 = new GoogleAdsClient();
GoogleAdsClient client2 = new GoogleAdsClient();
Thread userThread1 = new Thread(addAdGroups);
Thread userThread2 = new Thread(addAdGroups);
userThread1.start(client1);
userThread2.start(client2);
userThread1.join();
userThread2.join();
public void addAdGroups(object data) {
GoogleAdsClient client = (GoogleAdsClient) data;
// Do more operations here.
...
}
Избегайте зависаний в приложениях .NET Framework
Синхронные методы могут привести к зависанию некоторых приложений .NET Framework. Типичным примером является вызов API из метода обработчика событий приложения WinForm.
Есть два пути решения этой проблемы:
Используйте устаревшую библиотеку Grpc.
Вы можете настроить свойство
UseGrpcCore
GoogleAdsConfig
, чтобы использовать устаревшую библиотекуGrpc.Core
вместо библиотекиGrpc.Net.Client
по умолчанию. Этот метод не тестировался тщательно в приложениях .NET Framework, поэтому он может не решить проблему. Вот пример фрагмента:GoogleAdsConfig config = new GoogleAdsConfig(); config.UseGrpcCore = true; GoogleAdsClient client = new GoogleAdsClient(config);
На странице поддержки gRPC содержится дополнительная информация о различиях между устаревшей библиотекой
Grpc.Core
и библиотекойGrpc.Net.Client
по умолчанию.Используйте асинхронные методы.
Вы можете использовать асинхронные методы, чтобы избежать зависаний. Вот несколько примеров:
Поисковый поток
Выполняется вызов
SearchStream()
, и результаты заполняются в виде списка.private async void button1_Click(object sender, EventArgs e) { // Get the GoogleAdsService. GoogleAdsServiceClient googleAdsService = client.GetService( Services.V18.GoogleAdsService); // Create a query that will retrieve all campaigns. string query = @"SELECT campaign.id, campaign.name, campaign.network_settings.target_content_network FROM campaign ORDER BY campaign.id"; List
items = new List (); Task t = googleAdsService.SearchStreamAsync(customerId.ToString(), query, delegate (SearchGoogleAdsStreamResponse resp) { foreach (GoogleAdsRow googleAdsRow in resp.Results) { ListViewItem item = new ListViewItem(); item.Text = googleAdsRow.Campaign.Id.ToString(); item.SubItems.Add(googleAdsRow.Campaign.Name); items.Add(item); } } ); await t; listView1.Items.AddRange(items.ToArray()); } Бюджет кампании
Создается вызов CampaignBudget, и имя ресурса нового бюджета отображается с помощью оповещения
MessageBox
.private async void button2_Click(object sender, EventArgs e) { // Get the BudgetService. CampaignBudgetServiceClient budgetService = client.GetService( Services.V18.CampaignBudgetService); // Create the campaign budget. CampaignBudget budget = new CampaignBudget() { Name = "Interplanetary Cruise Budget #" + ExampleUtilities.GetRandomString(), DeliveryMethod = BudgetDeliveryMethod.Standard, AmountMicros = 500000 }; // Create the operation. CampaignBudgetOperation budgetOperation = new CampaignBudgetOperation() { Create = budget }; // Create the campaign budget. Task
t = budgetService.MutateCampaignBudgetsAsync( customerId.ToString(), new CampaignBudgetOperation[] { budgetOperation }); await t; MutateCampaignBudgetsResponse response = t.Result; MessageBox.Show(response.Results[0].ResourceName); }
Обработка ошибок
Не каждый вызов API будет успешным. Сервер может выдавать ошибки, если по какой-то причине ваши вызовы API завершаются неудачно. Важно фиксировать ошибки API и обрабатывать их соответствующим образом.
Экземпляр GoogleAdsException
генерируется при возникновении ошибки API. В нем есть подробности, которые помогут вам понять, что пошло не так:
// Get the CampaignService.
CampaignServiceClient campaignService = client.GetService(Services.V18.CampaignService);
// Create a campaign for update.
Campaign campaignToUpdate = new Campaign()
{
ResourceName = ResourceNames.Campaign(customerId, campaignId),
// More fields to update.
// ...
};
// Create the operation.
CampaignOperation operation = new CampaignOperation()
{
Update = campaignToUpdate,
UpdateMask = FieldMasks.AllSetFieldsOf(campaignToUpdate)
};
try
{
// Update the campaign.
MutateCampaignsResponse response = campaignService.MutateCampaigns(
customerId.ToString(), new CampaignOperation[] { operation });
// Display the results.
// ...
}
catch (GoogleAdsException e)
{
Console.WriteLine("Failure:");
Console.WriteLine($"Message: {e.Message}");
// Can examine to get more error details.
Console.WriteLine($"Failure: {e.Failure}");
// Can be shared with Google for further troubleshooting.
Console.WriteLine($"Request ID: {e.RequestId}");
}