Bắt đầu

Hướng dẫn này cung cấp thông tin tổng quan ngắn gọn về cách bắt đầu sử dụng thư viện .NET của API Google Ads.

Cài đặt

Các tệp nhị phân của thư viện ứng dụng được phân phối bằng NuGet. Thêm một tệp tham chiếu NuGet vào gói Google.Ads.GoogleAds trong dự án của bạn để sử dụng thư viện ứng dụng.

Thiết lập lệnh uỷ quyền

Để uỷ quyền cho các lệnh gọi API, bạn cần chỉ định mã ứng dụng, khoá bí mật của ứng dụng, mã làm mới và mã của nhà phát triển cho thư viện.

Nếu bạn cần tạo thông tin đăng nhập

Nếu bạn đã có thông tin đăng nhập

  • Sao chép nút GoogleAdsApi và mục GoogleAdsApi trong nút configSections từ tệp App.config trong GitHub vào tệp App.config / Web.config. Nếu bạn dùng NuGet để cài đặt gói, thì các nút này sẽ tự động được chèn vào tệp App.config / Web.config.
  • Đưa mã thông báo nhà phát triển, mã ứng dụng khách, mật khẩu ứng dụng khách và mã làm mới vào App.config / Web.config của ứng dụng.

Tệp App.config có trong GitHub được ghi lại đầy đủ, nhưng bạn cũng có thể tham khảo Hướng dẫn định cấu hình để tìm hiểu thêm cũng như sử dụng các cách khác để định cấu hình thư viện ứng dụng, chẳng hạn như biến môi trường.

Thực hiện lệnh gọi API

Sau đây là cách sử dụng cơ bản của thư viện ứng dụng:

// Create a Google Ads client.
GoogleAdsClient client = new GoogleAdsClient();

// Create the required service.
CampaignServiceClient campaignService =
    client.GetService(Services.V20.CampaignService);

// Make more calls to service class.

Tạo một phiên bản GoogleAdsClient

Các lớp quan trọng nhất trong thư viện .NET của Google Ads API là lớp GoogleAdsClient. Thư viện này cho phép bạn tạo một lớp dịch vụ được định cấu hình trước mà bạn có thể dùng để thực hiện các lệnh gọi API. GoogleAdsClient cung cấp một hàm khởi tạo mặc định để tạo đối tượng người dùng bằng các chế độ cài đặt được chỉ định trong App.config / Web.config của ứng dụng. Hãy tham khảo Hướng dẫn cấu hình để biết các lựa chọn cấu hình.

// Create a new GoogleAdsClient with the App.config settings.
GoogleAdsClient user = new GoogleAdsClient();

Tạo một dịch vụ

GoogleAdsClient cung cấp một phương thức GetService có thể dùng để tạo dịch vụ Quảng cáo.

CampaignServiceClient campaignService = client.GetService(Services.V20.CampaignService);
// Now make calls to CampaignService.

Chúng tôi cung cấp một lớp Services liệt kê tất cả các phiên bản và dịch vụ API được hỗ trợ. Phương thức GetService chấp nhận các đối tượng liệt kê này làm đối số khi tạo dịch vụ. Ví dụ: để tạo một phiên bản của CampaignServiceClient cho phiên bản V20 của Google Ads API, bạn cần gọi phương thức GoogleAdsClient.GetService bằng Services.V20.CampaignService làm đối số, như trong ví dụ trước.

Độ an toàn cho chuỗi

Bạn không nên chia sẻ một thực thể GoogleAdsClient giữa nhiều luồng, vì những thay đổi về cấu hình mà bạn thực hiện trên một thực thể trong một luồng có thể ảnh hưởng đến các dịch vụ mà bạn tạo trên các luồng khác. Các thao tác như lấy các thực thể dịch vụ mới từ một thực thể GoogleAdsClient và thực hiện các lệnh gọi đến nhiều dịch vụ song song đều an toàn với luồng.

Một ứng dụng đa luồng sẽ có dạng như sau:

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.
  ...
}

Tránh tình trạng treo trong các ứng dụng .NET Framework

Các phương thức đồng bộ có thể khiến một số ứng dụng .NET Framework của bạn bị treo. Một ví dụ phổ biến là thực hiện các lệnh gọi API từ phương thức trình xử lý sự kiện của một ứng dụng WinForm.

Có hai cách để giải quyết vấn đề này:

  1. Sử dụng thư viện Grpc cũ.

    Bạn có thể đặt thuộc tính UseGrpcCore của GoogleAdsConfig để sử dụng thư viện Grpc.Core cũ thay vì thư viện Grpc.Net.Client mặc định. Phương thức này chưa được kiểm thử rộng rãi trên các ứng dụng .NET Framework, vì vậy, phương thức này có thể không giải quyết được vấn đề. Dưới đây là một đoạn mã mẫu:

    GoogleAdsConfig config = new GoogleAdsConfig();
    config.UseGrpcCore = true;
    GoogleAdsClient client = new GoogleAdsClient(config);
    
  2. Sử dụng các phương thức không đồng bộ.

    Bạn có thể sử dụng các phương thức không đồng bộ để tránh tình trạng này. Dưới đây là một số ví dụ:

    SearchStream

    Một lệnh gọi đến SearchStream() được thực hiện và kết quả được điền vào một chế độ xem danh sách.

    private async void button1_Click(object sender, EventArgs e)
    {
    // Get the GoogleAdsService.
    GoogleAdsServiceClient googleAdsService = client.GetService(
        Services.V20.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());
    }

    Ngân Sách Chiến dịch

    Một lệnh gọi CampaignBudget được tạo và tên tài nguyên của ngân sách mới sẽ xuất hiện bằng cảnh báo MessageBox.

    private async void button2_Click(object sender, EventArgs e)
    {
    // Get the BudgetService.
    CampaignBudgetServiceClient budgetService = client.GetService(
        Services.V20.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);
    }

Xử lý lỗi

Không phải lệnh gọi API nào cũng thành công. Máy chủ có thể gửi lỗi nếu lệnh gọi API của bạn không thành công vì lý do nào đó. Bạn cần nắm bắt và xử lý các lỗi API một cách thích hợp.

Một thực thể GoogleAdsException sẽ được gửi đi khi xảy ra lỗi API. Thông báo này có thông tin chi tiết để giúp bạn xác định vấn đề:

// Get the CampaignService.
CampaignServiceClient campaignService = client.GetService(Services.V20.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}");
}