スタートガイド

このガイドでは、Google 広告 API .NET ライブラリの使用を開始する方法について簡単に説明します。

インストール

クライアント ライブラリのバイナリは NuGet を使用して配布されます。クライアント ライブラリを使用するには、プロジェクトの Google.Ads.GoogleAds パッケージに NuGet 参照を追加します。

認可を設定する

API 呼び出しを承認するには、クライアント ID、クライアント シークレット、更新トークン、開発者トークンをライブラリに指定する必要があります。

認証情報を生成する必要がある場合

認証情報をすでにお持ちの場合

  • GitHub の App.config ファイルから、App.config / Web.config ファイルに GoogleAdsApi ノードと configSections ノードの下の GoogleAdsApi セクションをコピーします。NuGet を使用してパッケージをインストールした場合、これらのノードは App.config / Web.config ファイルに自動的に挿入されます。
  • アプリの App.config / Web.config に、デベロッパー トークン、クライアント ID、クライアント シークレット、更新トークンを追加します。

GitHub に含まれている App.config ファイルには詳細なドキュメントが用意されていますが、構成ガイドを参照して詳細を確認したり、環境変数など、クライアント ライブラリを構成する別の方法を使用したりすることもできます。

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.

サポートされているすべての API バージョンとサービスを列挙する Services クラスが用意されています。GetService メソッドは、サービスを作成するときにこれらの列挙型オブジェクトを引数として受け取ります。たとえば、Google Ads API のバージョン V18CampaignServiceClient のインスタンスを作成するには、前の例に示すように、Services.V18.CampaignService を引数として GoogleAdsClient.GetService メソッドを呼び出す必要があります。

スレッドの安全性

1 つのスレッドのインスタンスで行った構成変更が、他のスレッドで作成したサービスに影響する可能性があるため、複数のスレッド間で 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 アプリケーションがフリーズする可能性があります。一般的な例としては、WinForm アプリケーションのイベント ハンドラ メソッドから API 呼び出しを行うことが挙げられます。

この問題に対処するには、次の 2 つの方法があります。

  1. 以前の Grpc ライブラリを使用する。

    デフォルトの Grpc.Net.Client ライブラリではなく、従来の Grpc.Core ライブラリを使用するように、GoogleAdsConfigUseGrpcCore プロパティを設定できます。この方法は .NET Framework アプリケーションで広範にテストされていないため、問題が解決しない可能性があります。以下にサンプル スニペットを示します。

    GoogleAdsConfig config = new GoogleAdsConfig();
    config.UseGrpcCore = true;
    GoogleAdsClient client = new GoogleAdsClient(config);
    
  2. 非同期メソッドを使用する。

    フリーズを回避するには、非同期メソッドを使用します。次に例を示します。

    SearchStream

    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}");
}