モバイルアプリ キャンペーン

このガイドでは、次の種類のモバイルアプリ キャンペーンの作成、設定、および掲載結果の確認について説明します。

ユニバーサル アプリ キャンペーン

ユニバーサル アプリ キャンペーン(UAC)は、Android および iOS アプリを、Google の主要なプロパティ(Google 検索、Google Play、YouTube、Google ディスプレイ ネットワーク)で手軽に宣伝できるキャンペーンです。このガイドでは、このタイプのキャンペーンの作成、ターゲティング設定、レポートの作成について説明します。

キャンペーンの構築

1. 予算を作成する

ユニバーサル アプリ キャンペーンを作成する際は、まず予算を作成します。ユニバーサル アプリ キャンペーンは予算の共有に対応していないため、予算の isExplicitlyShared プロパティを false に設定する必要があります。

Java

// Get the BudgetService.
BudgetServiceInterface budgetService =
    adWordsServices.get(session, BudgetServiceInterface.class);

// Create the campaign budget.
Budget budget = new Budget();
budget.setName("Interplanetary Cruise App Budget #" + System.currentTimeMillis());
Money budgetAmount = new Money();
budgetAmount.setMicroAmount(50000000L);
budget.setAmount(budgetAmount);
budget.setDeliveryMethod(BudgetBudgetDeliveryMethod.STANDARD);

// Universal app campaigns don't support shared budgets.
budget.setIsExplicitlyShared(false);
BudgetOperation budgetOperation = new BudgetOperation();
budgetOperation.setOperand(budget);
budgetOperation.setOperator(Operator.ADD);

// Add the budget
Budget addedBudget = budgetService.mutate(new BudgetOperation[] {budgetOperation}).getValue(0);
    

.NET

// Get the BudgetService.
BudgetService budgetService =
  (BudgetService) user.GetService(AdWordsService.v201609.BudgetService);

// Create the campaign budget.
Budget budget = new Budget();
budget.name = "Interplanetary Cruise App Budget #" + ExampleUtilities.GetRandomString();
budget.deliveryMethod = BudgetBudgetDeliveryMethod.STANDARD;
budget.amount = new Money();
budget.amount.microAmount = 5000000;

// Universal app campaigns don't support shared budgets.
budget.isExplicitlyShared = false;

BudgetOperation budgetOperation = new BudgetOperation();
budgetOperation.@operator = Operator.ADD;
budgetOperation.operand = budget;

BudgetReturnValue budgetRetval = budgetService.mutate(
  new BudgetOperation[] { budgetOperation });
    

Python

budget_service = client.GetService('BudgetService', version='v201609')

# Create a budget.
budget = {
    'name': 'Interplanetary Cruise App Budget #%s' % uuid.uuid4(),
    'amount': {
        'microAmount': '50000000'
    },
    'deliveryMethod': 'STANDARD',
    'isExplicitlyShared': False
}

budget_operations = [{
    'operator': 'ADD',
    'operand': budget
}]

# Create the budget and return its ID.
budget_id = budget_service.mutate(budget_operations)['value'][0]['budgetId']
    

PHP

// Get the BudgetService, which loads the required classes.
$budgetService = $user->GetService('BudgetService', ADWORDS_VERSION);

// Create the shared budget (required).
$budget = new Budget();
$budget->name = 'Interplanetary Cruise Budget #' . uniqid();
$budget->amount = new Money(50000000);
$budget->deliveryMethod = 'STANDARD';

// Universal App campaigns don't support shared budgets.
$budget->isExplicitlyShared = false;
$operations = array();

// Create operation.
$operation = new BudgetOperation();
$operation->operand = $budget;
$operation->operator = 'ADD';
$operations[] = $operation;

// Make the mutate request.
$result = $budgetService->mutate($operations);
$budget = $result->value[0];

printf("Budget with name '%s' and ID %d was created.\n",
    $budget->name, $budget->budgetId);
    

Perl

# Create the campaign budget.
my $budget = Google::Ads::AdWords::v201609::Budget->new({
  # Required attributes.
  name => "Interplanetary Cruise App Budget #" . uniqid(),
  amount =>
    Google::Ads::AdWords::v201609::Money->new({microAmount => 5000000}),
  deliveryMethod => "STANDARD",
  # Universal app campaigns don't support shared budgets.
  isExplicitlyShared => 0
});

my $budget_operation = Google::Ads::AdWords::v201609::BudgetOperation->new({
  operator => "ADD",
  operand  => $budget
});

# Add budget.
my $addedBudget =
  $client->BudgetService()->mutate({operations => ($budget_operation)})
  ->get_value();
printf
  "Budget with name '%s' and ID %d was created.\n",
  $addedBudget->get_name(), $addedBudget->get_budgetId()->get_value();
    

Ruby

# Create a budget.
budget = {
  :name => 'Interplanetary budget #%d' % (Time.new.to_f * 1000).to_i,
  :amount => {:micro_amount => 50000000},
  :delivery_method => 'STANDARD',
  # Universal app campaigns don't support shared budgets.
  :is_explicitly_shared => false
}
budget_operation = {:operator => 'ADD', :operand => budget}

# Add the budget.
return_budget = budget_srv.mutate([budget_operation])
budget_id = return_budget[:value].first[:budget_id]
    

詳しくはキャンペーン予算についてのガイドをご覧ください。

2. キャンペーンを作成する

次にキャンペーンを作成します。ユニバーサル アプリ キャンペーンを作成する際は、次の制約事項に留意してください。

  1. キャンペーンの advertisingChannelTypeMULTI_CHANNEL に、advertisingChannelSubTypeUNIVERSAL_APP_CAMPAIGN に設定する必要があります。
  2. サポートされている入札戦略タイプは TARGET_CPA のみです。
  3. 通常のキャンペーンの設定の多く(networkSettingfrequencyCaptrackingUrlTemplate など)は、ユニバーサル アプリ キャンペーンでは設定できません。使用できない設定の一覧は、リファレンス ドキュメントでご確認いただけます。

Java

// Get the CampaignService.
CampaignServiceInterface campaignService =
    adWordsServices.get(session, CampaignServiceInterface.class);

// Create the campaign.
Campaign campaign = new Campaign();
campaign.setName("Interplanetary Cruise App #" + System.currentTimeMillis());

// Recommendation: Set the campaign to PAUSED when creating it to prevent
// the ads from immediately serving. Set to ENABLED once you've added
// targeting and the ads are ready to serve.
campaign.setStatus(CampaignStatus.PAUSED);

// Set the advertising channel and subchannel types for universal app campaigns.
campaign.setAdvertisingChannelType(AdvertisingChannelType.MULTI_CHANNEL);
campaign.setAdvertisingChannelSubType(AdvertisingChannelSubType.UNIVERSAL_APP_CAMPAIGN);

// Set the campaign's bidding strategy. universal app campaigns
// only support TARGET_CPA bidding strategy.
BiddingStrategyConfiguration biddingConfig = new BiddingStrategyConfiguration();
biddingConfig.setBiddingStrategyType(BiddingStrategyType.TARGET_CPA);

// Set the target CPA to $1 / app install.
TargetCpaBiddingScheme biddingScheme = new TargetCpaBiddingScheme();
biddingScheme.setTargetCpa(new Money());
biddingScheme.getTargetCpa().setMicroAmount(1000000L);

biddingConfig.setBiddingScheme(biddingScheme);
campaign.setBiddingStrategyConfiguration(biddingConfig);

// Set the campaign's budget.
campaign.setBudget(new Budget());
campaign.getBudget().setBudgetId(createBudget(adWordsServices, session));

// Optional: Set the start date.
campaign.setStartDate(new DateTime().plusDays(1).toString("yyyyMMdd"));

// Optional: Set the end date.
campaign.setEndDate(new DateTime().plusYears(1).toString("yyyyMMdd"));
    

.NET

// Get the CampaignService.
CampaignService campaignService =
  (CampaignService) user.GetService(AdWordsService.v201609.CampaignService);

// Create the campaign.
Campaign campaign = new Campaign();
campaign.name = "Interplanetary Cruise App #" + ExampleUtilities.GetRandomString();

// Recommendation: Set the campaign to PAUSED when creating it to prevent
// the ads from immediately serving. Set to ENABLED once you've added
// targeting and the ads are ready to serve.
campaign.status = CampaignStatus.PAUSED;

// Set the advertising channel and subchannel types for universal app campaigns.
campaign.advertisingChannelType = AdvertisingChannelType.MULTI_CHANNEL;
campaign.advertisingChannelSubType = AdvertisingChannelSubType.UNIVERSAL_APP_CAMPAIGN;

// Set the campaign's bidding strategy. Universal app campaigns
// only support TARGET_CPA bidding strategy.
BiddingStrategyConfiguration biddingConfig = new BiddingStrategyConfiguration();
biddingConfig.biddingStrategyType = BiddingStrategyType.TARGET_CPA;

// Set the target CPA to $1 / app install.
TargetCpaBiddingScheme biddingScheme = new TargetCpaBiddingScheme();
biddingScheme.targetCpa = new Money();
biddingScheme.targetCpa.microAmount = 1000000;

biddingConfig.biddingScheme = biddingScheme;
campaign.biddingStrategyConfiguration = biddingConfig;

// Set the campaign's budget.
campaign.budget = new Budget();
campaign.budget.budgetId = CreateBudget(user).budgetId;

// Optional: Set the start date.
campaign.startDate = DateTime.Now.AddDays(1).ToString("yyyyMMdd");

// Optional: Set the end date.
campaign.endDate = DateTime.Now.AddYears(1).ToString("yyyyMMdd");
    

Python

# Initialize appropriate services.
campaign_service = client.GetService('CampaignService', version='v201609')

budget_id = CreateBudget(client)

# Create the Universal App campaign.
universal_app_campaign = {
    'name': 'Interplanetary Cruise App #%s' % uuid.uuid4(),
    'status': 'PAUSED',
    'advertisingChannelType': 'MULTI_CHANNEL',
    'advertisingChannelSubType': 'UNIVERSAL_APP_CAMPAIGN',
    # Set the campaign's bidding strategy. Universal app campaigns only
    # support TARGET_CPA bidding strategy.
    'biddingStrategyConfiguration': {
         # Set the target CPA to $1 / app install.
        'biddingScheme': {
            'xsi_type': 'TargetCpaBiddingScheme',
            'targetCpa': {
                'microAmount': '1000000'
            }
        },
        'biddingStrategyType': 'TARGET_CPA'
    },
    # Note that only the budgetId is required
    'budget': {
        'budgetId': budget_id
    },
    # Optional fields
    'startDate': (datetime.datetime.now() +
                  datetime.timedelta(1)).strftime('%Y%m%d'),
    'endDate': (datetime.datetime.now() +
                datetime.timedelta(365)).strftime('%Y%m%d'),
}
    

PHP

// Get the CampaignService, which loads the required classes.
$campaignService = $user->GetService('CampaignService', ADWORDS_VERSION);

// Create campaign with some properties set.
$campaign = new Campaign();
$campaign->name = 'Interplanetary Cruise #' . uniqid();
// Recommendation: Set the campaign to PAUSED when creating it to stop
// the ads from immediately serving. Set to ENABLED once you've added
// targeting and the ads are ready to serve.
$campaign->status = 'PAUSED';

// Set the advertising channel and subchannel types for Universal app
// campaigns.
$campaign->advertisingChannelType = 'MULTI_CHANNEL';
$campaign->advertisingChannelSubType = 'UNIVERSAL_APP_CAMPAIGN';

// Set the campaign's bidding strategy. Universal App campaigns
// only support TARGET_CPA bidding strategy.
$biddingStrategyConfiguration = new BiddingStrategyConfiguration();
$biddingStrategyConfiguration->biddingStrategyType = 'TARGET_CPA';

// Set the target CPA to $1 / app install.
$biddingScheme = new TargetCpaBiddingScheme();
$biddingScheme->targetCpa = new Money(1000000);

$biddingStrategyConfiguration->biddingScheme = $biddingScheme;
$campaign->biddingStrategyConfiguration = $biddingStrategyConfiguration;

// Set the campaign's budget.
$campaign->budget = new Budget();
$campaign->budget->budgetId = CreateBudget($user);

// Optional: Set the start date.
$campaign->startDate = date('Ymd', strtotime('+1 day'));

// Optional: Set the end date.
$campaign->endDate = date('Ymd', strtotime('+1 year'));
    

Perl

my (undef, undef, undef, $mday, $mon, $year) = localtime(time + 60 * 60 * 24);
my $start_date = sprintf("%d%02d%02d", ($year + 1900), ($mon + 1), $mday);
(undef, undef, undef, $mday, $mon, $year) =
  localtime(time + 60 * 60 * 24 * 365);
my $end_date = sprintf("%d%02d%02d", ($year + 1900), ($mon + 1), $mday);

my $budgetId = create_budget($client);

my $campaign = Google::Ads::AdWords::v201609::Campaign->new({
    name => "Interplanetary Cruise App #" . uniqid(),
    # Bidding strategy (required).
    # Set the campaign's bidding strategy. Universal app campaigns
    # only support TARGET_CPA bidding strategy.
    biddingStrategyConfiguration =>
      Google::Ads::AdWords::v201609::BiddingStrategyConfiguration->new({
        biddingStrategyType => "TARGET_CPA",
        # Set the target CPA to $1 / app install.
        biddingScheme =>
          Google::Ads::AdWords::v201609::TargetCpaBiddingScheme->new({
            targetCpa => Google::Ads::AdWords::v201609::Money->new(
              {microAmount => 1000000})})}
      ),
    # Budget (required) - note only the budgetId is required.
    budget =>
      Google::Ads::AdWords::v201609::Budget->new({budgetId => $budgetId}),
    # Advertising channel type (required).
    # Set the advertising channel and subchannel types for universal
    # app campaigns.
    advertisingChannelType    => "MULTI_CHANNEL",
    advertisingChannelSubType => "UNIVERSAL_APP_CAMPAIGN",
    settings                  => [$universalAppSetting, $geoSetting],
    # Additional properties (non-required).
    startDate => $start_date,
    endDate   => $end_date,
    # Recommendation: Set the campaign to PAUSED when creating it to stop
    # the ads from immediately serving. Set to ENABLED once you've added
    # targeting and the ads are ready to serve.
    status    => "PAUSED"
  });
    

Ruby

campaign_srv = adwords.service(:CampaignService, API_VERSION)
budget_srv = adwords.service(:BudgetService, API_VERSION)

# Create a budget.
budget = {
  :name => 'Interplanetary budget #%d' % (Time.new.to_f * 1000).to_i,
  :amount => {:micro_amount => 50000000},
  :delivery_method => 'STANDARD',
  # Universal app campaigns don't support shared budgets.
  :is_explicitly_shared => false
}
budget_operation = {:operator => 'ADD', :operand => budget}

# Add the budget.
return_budget = budget_srv.mutate([budget_operation])
budget_id = return_budget[:value].first[:budget_id]

# Create campaigns.
universal_app_campaign = {
  :name => "Interplanetary Cruise #%d" % (Time.new.to_f * 1000).to_i,
  # Recommendation: Set the campaign to PAUSED when creating it to stop the
  # ads from immediately serving. Set it to ENABLED once you've added
  # targeting and the ads are ready to serve.
  :status => 'PAUSED',
  # Set the advertising channel and subchannel types for universal app
  # campaigns.
  :advertising_channel_type => 'MULTI_CHANNEL',
  :advertising_channel_sub_type => 'UNIVERSAL_APP_CAMPAIGN',
  # Set the campaign's bidding strategy. Universal app campaigns only support
  # the TARGET_CPA bidding strategy.
  :bidding_strategy_configuration => {
    :bidding_scheme => {
      :xsi_type => 'TargetCpaBiddingScheme',
      :target_cpa => {
        :micro_amount => 1000000
      }
    }
  },
  # Budget (required) - note only the budget ID is required.
  :budget => {:budget_id => budget_id},
  # Optional fields:
  :start_date =>
      DateTime.parse((Date.today + 1).to_s).strftime('%Y%m%d'),
  :end_date =>
      DateTime.parse((Date.today + 365).to_s).strftime('%Y%m%d')
}
    

3. 広告をカスタマイズする

他のキャンペーン タイプと異なり、ユニバーサル アプリ キャンペーンの場合、ユーザーが広告を作成することはできません。アプリストアのリスティング、登録された広告文の候補、キャンペーン設定で指定されたアセットなどを材料に、複数のネットワークに対応したさまざまなフォーマットの広告が自動生成されます。次のスニペットは、キャンペーンのアセットを設定する方法を示したものです。

Java

// Set the campaign's assets and ad text ideas. These values will be used to
// generate ads.
UniversalAppCampaignSetting universalAppSetting = new UniversalAppCampaignSetting();
universalAppSetting.setAppId("com.interplanetarycruise.booking");
universalAppSetting.setDescription1("Best Space Cruise Line");
universalAppSetting.setDescription2("Visit all the planets");
universalAppSetting.setDescription3("Trips 7 days a week");
universalAppSetting.setDescription4("Buy your tickets now!");

// Optional: You can set up to 10 image assets for your campaign.
// See UploadImage.java for an example on how to upload images.
//
// universalAppSetting.setImageMediaIds(new long[] { INSERT_IMAGE_MEDIA_ID_HERE });
    

.NET

// Set the campaign's assets and ad text ideas. These values will be used to
// generate ads.
UniversalAppCampaignSetting universalAppSetting = new UniversalAppCampaignSetting();
universalAppSetting.appId = "com.interplanetarycruise.booking";
universalAppSetting.description1 = "Best Space Cruise Line";
universalAppSetting.description2 = "Visit all the planets";
universalAppSetting.description3 = "Trips 7 days a week";
universalAppSetting.description4 = "Buy your tickets now!";

// Optional: You can set up to 10 image assets for your campaign.
// See UploadImage.cs for an example on how to upload images.
//
// universalAppSetting.imageMediaIds = new long[] { INSERT_IMAGE_MEDIA_ID_HERE };
    

Python

universal_app_campaign['settings'] = [
    # Set the campaign's assets and ad text ideas. These values will
    # be used to generate ads.
    {
        'xsi_type': 'UniversalAppCampaignSetting',
        'appId': 'com.interplanetarycruise.booking',
        'description1': 'Best Space Cruise Line',
        'description2': 'Visit all the planets',
        'description3': 'Trips 7 days a week',
        'description4': 'Buy your tickets now!',
        # Optional: You can set up to 10 image assets for your campaign.
        # See upload_image.py for an example on how to upload images.
        #
        # 'imageMediaIds': [INSERT_IMAGE_MEDIA_ID(s)_HERE]
    }
]
    

PHP

// Set the campaign's assets and ad text ideas. These values will be used to
// generate ads.
$universalAppSetting = new UniversalAppCampaignSetting();
$universalAppSetting->appId = 'com.interplanetarycruise.booking';
$universalAppSetting->description1 = 'Best Space Cruise Line';
$universalAppSetting->description2 = 'Visit all the planets';
$universalAppSetting->description3 = 'Trips 7 days a week';
$universalAppSetting->description4 = 'Buy your tickets now!';

// Optional: You can set up to 10 image assets for your campaign.
// See UploadImage.php for an example on how to upload images.
//
// $universalAppSetting->imageMediaIds = array(INSERT_IMAGE_MEDIA_ID_HERE);
    

Perl

# Set the campaign's assets and ad text ideas. These values will be used to
# generate ads.
my $universalAppSetting =
  Google::Ads::AdWords::v201609::UniversalAppCampaignSetting->new({
    appId        => "com.interplanetarycruise.booking",
    description1 => "Best Space Cruise Line",
    description2 => "Visit all the planets",
    description3 => "Trips 7 days a week",
    description4 => "Buy your tickets now!"
  });

# Optional: You can set up to 10 image assets for your campaign.
# See upload_image.pl for an example on how to upload images.
# universalAppSetting->set_imageMediaIds([INSERT_IMAGE_MEDIA_ID_HERE]);
    

Ruby

universal_app_setting = {
  # Set the campaign's assets and ad text ideas. These values will be used to
  # generate ads.
  :xsi_type => 'UniversalAppCampaignSetting',
  :app_id => 'com.interplanetarycruise.booking',
  :description1 => 'Best Space Cruise Line',
  :description2 => 'Visit all the planets',
  :description3 => 'Trips 7 days a week',
  :description4 => 'Buy your tickets now!'
  # Optional: You can set up to 10 image assets for your campaign. See
  # upload_image.rb for an example on how to upload images.
  #
  # :image_media_ids => [INSERT_IMGAGE_MEDIA_ID(s)_HERE]
}
    

4. キャンペーンを最適化する

次の 2 つの設定でキャンペーンを最適化することができます。 universalAppBiddingStrategyGoalType を使用すると、キャンペーンの入札戦略を最適化する際に、目標のタイプを指定することができます。 入札戦略タイプとして OPTIMIZE_FOR_INSTALL_CONVERSION_VOLUME を指定する場合、キャンペーンの selectiveOptimization フィールドを使用して、アプリ内コンバージョン タイプを基準とする最適化を行うことも可能です。ConversionTrackerService を使用すれば、コンバージョン トラッカーの一覧を取得できます。

Java

// Optimize this campaign for getting new users for your app.
universalAppSetting.setUniversalAppBiddingStrategyGoalType(
    UniversalAppBiddingStrategyGoalType.OPTIMIZE_FOR_INSTALL_CONVERSION_VOLUME);

// If you select the OPTIMIZE_FOR_IN_APP_CONVERSION_VOLUME goal type, then also specify
// your in-app conversion types so AdWords can focus your campaign on people who are
// most likely to complete the corresponding in-app actions.
// Conversion type IDs can be retrieved using ConversionTrackerService.get.
//
// campaign.selectiveOptimization = new SelectiveOptimization();
// campaign.selectiveOptimization.conversionTypeIds =
//    new long[] { INSERT_CONVERSION_TYPE_ID_1_HERE, INSERT_CONVERSION_TYPE_ID_2_HERE };

// Optional: Set the campaign settings for Advanced location options.
GeoTargetTypeSetting geoSetting = new GeoTargetTypeSetting();
geoSetting.setPositiveGeoTargetType(
    GeoTargetTypeSettingPositiveGeoTargetType.LOCATION_OF_PRESENCE);
geoSetting.setNegativeGeoTargetType(GeoTargetTypeSettingNegativeGeoTargetType.DONT_CARE);

campaign.setSettings(new Setting[] {universalAppSetting, geoSetting});
    

.NET

// Optimize this campaign for getting new users for your app.
universalAppSetting.universalAppBiddingStrategyGoalType =
    UniversalAppBiddingStrategyGoalType.OPTIMIZE_FOR_INSTALL_CONVERSION_VOLUME;

// Optional: If you select the OPTIMIZE_FOR_IN_APP_CONVERSION_VOLUME goal
// type, then also specify your in-app conversion types so AdWords can
// focus your campaign on people who are most likely to complete the
// corresponding in-app actions.
// Conversion type IDs can be retrieved using ConversionTrackerService.get.
//
// campaign.selectiveOptimization = new SelectiveOptimization();
// campaign.selectiveOptimization.conversionTypeIds =
//    new long[] { INSERT_CONVERSION_TYPE_ID_1_HERE, INSERT_CONVERSION_TYPE_ID_2_HERE };

// Optional: Set the campaign settings for Advanced location options.
GeoTargetTypeSetting geoSetting = new GeoTargetTypeSetting();
geoSetting.positiveGeoTargetType =
    GeoTargetTypeSettingPositiveGeoTargetType.LOCATION_OF_PRESENCE;
geoSetting.negativeGeoTargetType =
    GeoTargetTypeSettingNegativeGeoTargetType.DONT_CARE;

campaign.settings = new Setting[] { universalAppSetting, geoSetting };
    

Python

# Optimize this campaign for getting new users for your app.
universal_app_campaign_setting = universal_app_campaign['settings'][0]
universal_app_campaign_setting['universalAppBiddingStrategyGoalType'] = (
    'OPTIMIZE_FOR_INSTALL_CONVERSION_VOLUME')

# Optional: If you select the OPTIMIZE_FOR_IN_APP_CONVERSION_VOLUME goal type,
# then also specify your in-app conversion types so AdWords can focus your
# campaign on people who are most likely to complete the corresponding in-app
# actions.
#
# Conversions type IDs can be retrieved using ConversionTrackerService.get.
# universal_app_campaign['selectiveOptimization'] = {
#     'conversionTypeIds': [INSERT_CONVERSION_TYPE_ID(s)_HERE]
# }

# Optional: Set the campaign settings for Advanced location options.
universal_app_campaign['settings'].append({
    'xsi_type': 'GeoTargetTypeSetting',
    'positiveGeoTargetType': 'DONT_CARE',
    'negativeGeoTargetType': 'DONT_CARE'
})
    

PHP

// Optimize this campaign for getting new users for your app.
$universalAppSetting->universalAppBiddingStrategyGoalType =
    'OPTIMIZE_FOR_INSTALL_CONVERSION_VOLUME';

// If you select bidding strategy goal type as
// OPTIMIZE_FOR_IN_APP_CONVERSION_VOLUME, then you may specify a set of
// conversion types for in-app actions to optimize the campaign towards.
// Conversion type IDs can be retrieved using ConversionTrackerService.get.
//
// $campaign->selectiveOptimization = new SelectiveOptimization();
// $campaign->selectiveOptimization->conversionTypeIds = array(
//     INSERT_CONVERSION_TYPE_ID_1_HERE,
//     INSERT_CONVERSION_TYPE_ID_2_HERE
// );

// Optional: Set the campaign settings for Advanced location options.
$geoTargetTypeSetting = new GeoTargetTypeSetting();
$geoTargetTypeSetting->negativeGeoTargetType = 'LOCATION_OF_PRESENCE';
$campaign->settings = array($universalAppSetting, $geoTargetTypeSetting);
    

Perl

# Optimize this campaign for getting new users for your app.
$universalAppSetting->set_universalAppBiddingStrategyGoalType(
  "OPTIMIZE_FOR_INSTALL_CONVERSION_VOLUME");

# If you select the OPTIMIZE_FOR_IN_APP_CONVERSION_VOLUME goal type, then also
# specify your in-app conversion types so AdWords can focus your campaign on
# people who are most likely to complete the corresponding in-app actions.
# Conversion type IDs can be retrieved using ConversionTrackerService.get.

# my $selectiveOptimization =
# Google::Ads::AdWords::v201609::SelectiveOptimization->new({
#  conversionTypeIds =>
#    [INSERT_CONVERSION_TYPE_ID_1_HERE, INSERT_CONVERSION_TYPE_ID_2_HERE]
# });
# $campaign->set_selectiveOptimization($selectiveOptimization);

# Optional: Set the campaign settings for advanced location options.
my $geoSetting = Google::Ads::AdWords::v201609::GeoTargetTypeSetting->new({
  positiveGeoTargetType => "LOCATION_OF_PRESENCE",
  negativeGeoTargetType => "DONT_CARE"
});
    

Ruby

# Optimize this campaign for getting new users for your app.
universal_app_setting[:universal_app_bidding_strategy_goal_type] =
    'OPTIMIZE_FOR_INSTALL_CONVERSION_VOLUME'

# Optional: If you select OPTIMIZE_FOR_IN_APP_CONVERSION_VOLUME goal type,
# then also specify your in-app conversion types so AdWords can focus your
# campaign on people who are most likely to complete the corresponding in-app
# actions.
# Conversion type IDs can be retrieved using ConversionTrackerService.get.
#
# universal_app_campaign[:selective_optimization] = {
#   :conversion_type_ids => [INSERT_CONVERSION_TYPE_ID(s)_HERE]
# }

# Optional: Set the campaign settings for Advanced location options.
geo_setting = {
  :xsi_type => 'GeoTargetTypeSetting',
  :positive_geo_target_type => 'DONT_CARE',
  :negative_geo_target_type => 'DONT_CARE'
}

universal_app_campaign[:settings] = [
  universal_app_setting,
  geo_setting
]
    

最後に、CampaignService.mutate メソッドを使ってキャンペーンを作成します。

Java

// Create the operation.
CampaignOperation operation = new CampaignOperation();
operation.setOperand(campaign);
operation.setOperator(Operator.ADD);

CampaignOperation[] operations = new CampaignOperation[] {operation};

// Add the campaign.
CampaignReturnValue result = campaignService.mutate(operations);

// Display the results.
for (Campaign newCampaign : result.getValue()) {
  System.out.printf(
      "Universal app campaign with name '%s' and ID %d was added.%n",
      newCampaign.getName(), newCampaign.getId());

  // Optional: Set the campaign's location and language targeting. No other targeting
  // criteria can be used for universal app campaigns.
  setCampaignTargetingCriteria(newCampaign, adWordsServices, session);
}
    

.NET

// Create the operation.
CampaignOperation operation = new CampaignOperation();
operation.@operator = Operator.ADD;
operation.operand = campaign;

try {
  // Add the campaign.
  CampaignReturnValue retVal = campaignService.mutate(new CampaignOperation[] { operation });

  // Display the results.
  if (retVal != null && retVal.value != null && retVal.value.Length > 0) {
    foreach (Campaign newCampaign in retVal.value) {
      Console.WriteLine("Universal app campaign with name = '{0}' and id = '{1}' was added.",
          newCampaign.name, newCampaign.id);

      // Optional: Set the campaign's location and language targeting. No other targeting
      // criteria can be used for universal app campaigns.
      SetCampaignTargetingCriteria(user, newCampaign);
    }
  } else {
    Console.WriteLine("No universal app campaigns were added.");
  }
} catch (Exception e) {
  throw new System.ApplicationException("Failed to add universal app campaigns.", e);
}
    

Python

# Construct operations and add campaigns.
operations = [{
    'operator': 'ADD',
    'operand': universal_app_campaign
}]

campaigns = campaign_service.mutate(operations)['value']
    

PHP

// Create the campaign operation.
$operations = array();
$operation = new CampaignOperation();
$operation->operand = $campaign;
$operation->operator = 'ADD';
$operations[] = $operation;

// Add campaigns on the server.
$result = $campaignService->mutate($operations);

// Print information for each campaign.
foreach ($result->value as $campaign) {
  printf("Universal App Campaign with name '%s' and ID %d was added.\n",
      $campaign->name, $campaign->id);
  // Optional: Set the campaign's location and language targeting. No other
  // targeting criteria can be used for Universal App campaigns.
  SetCampaignTargetingCriteria($campaign->id, $user);
}
    

Perl

# Create operation.
my $campaign_operation =
  Google::Ads::AdWords::v201609::CampaignOperation->new({
    operator => "ADD",
    operand  => $campaign
  });

# Add campaigns.
my $result =
  $client->CampaignService()->mutate({operations => [$campaign_operation]});

# Display campaigns.
foreach my $new_campaign (@{$result->get_value()}) {
  printf "Universal app campaign with name \"%s\" and ID %s was added.\n",
    $new_campaign->get_name(), $new_campaign->get_id();
  # Optional: Set the campaign's location and language targeting. No other
  # targeting criteria can be used for universal app campaigns.
  set_campaign_targeting_criteria($client, $new_campaign->get_id());
}
    

Ruby

  # Construct the operation and add the campaign.
  operations = [{
    :operator => 'ADD',
    :operand => universal_app_campaign
  }]

  campaigns = campaign_srv.mutate(operations)[:value]

  if campaigns
    campaigns.each do |campaign|
      puts "Universal app campaign with name '%s' and ID %d was added." %
          [campaign[:name], campaign[:id]]
      set_campaign_targeting_criteria(adwords, campaign)
    end
  else
    raise new StandardError, 'No universal app campaigns were added.'
  end
end

def set_campaign_targeting_criteria(adwords, campaign)
  campaign_criterion_service =
      adwords.service(:CampaignCriterionService, API_VERSION)

  criteria = [
    {
      :xsi_type => 'Location',
      :id => 21137 # California
    },
    {
      :xsi_type => 'Location',
      :id => 2484 # Mexico
    },
    {
      :xsi_type => 'Language',
      :id => 1000 # English
    },
    {
      :xsi_type => 'Language',
      :id => 1003 # Spanish
    }
  ]

  operations = criteria.map do |criterion|
    {
      :operator => 'ADD',
      :operand => {
        :campaign_id => campaign[:id],
        :criterion => criterion
      }
    }
  end

  response = campaign_criterion_service.mutate(operations)

  if response and response[:value]
    # Display the added campaign targets.
    response[:value].each do |criterion|
      puts 'Campaign criteria of type "%s" and id %d was added.' % [
          criterion[:criterion][:criterion_type],
          criterion[:criterion][:id]
      ]
    end
  end
end

if __FILE__ == $0
  API_VERSION = :v201609

  begin
    add_universal_app_campaigns()

  # Authorization error.
  rescue AdsCommon::Errors::OAuth2VerificationRequired => e
    puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
        "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
        "to retrieve and store OAuth2 tokens."
    puts "See this wiki page for more details:\n\n  " +
        'https://github.com/googleads/google-api-ads-ruby/wiki/OAuth2'

  # HTTP errors.
  rescue AdsCommon::Errors::HttpError => e
    puts "HTTP Error: %s" % e

  # API errors.
  rescue AdwordsApi::Errors::ApiException => e
    puts "Message: %s" % e.message
    puts 'Errors:'
    e.errors.each_with_index do |error, index|
      puts "\tError [%d]:" % (index + 1)
      error.each do |field, value|
        puts "\t\t%s: %s" % [field, value]
      end
    end
  end
end

    

メディアのアップロード

各ユニバーサル アプリ キャンペーンでは、最大 10 個まで画像アセットを指定できます。指定したアセットは、AdWords が広告の自動生成に使用します。画像のアップロードには、MediaService.upload メソッドを使用できます。

Java

MediaServiceInterface mediaService =
    adWordsServices.get(session, MediaServiceInterface.class);

// Create image.
Image image = new Image();
image.setData(
    com.google.api.ads.common.lib.utils.Media.getMediaDataFromUrl("http://goo.gl/HJM3L"));
image.setType(MediaMediaType.IMAGE);

Media[] media = new Media[] {image};

// Upload image.
Media[] result = mediaService.upload(media);
    

.NET

MediaService mediaService = (MediaService) user.GetService(
    AdWordsService.v201609.MediaService);

// Create the image.
Image image = new Image();
image.data = MediaUtilities.GetAssetDataFromUrl("http://goo.gl/HJM3L");
image.type = MediaMediaType.IMAGE;

try {
  // Upload the image.
  Media[] result = mediaService.upload(new Media[] {image});
    

Python

media_service = client.GetService('MediaService', version='v201609')

with open(image_filename, 'r') as image_handle:
  image_data = base64.encodestring(image_handle.read())

# Construct media and upload image.
media = [{
    'xsi_type': 'Image',
    'data': image_data,
    'type': 'IMAGE'
}]
media = media_service.upload(media)[0]
    

PHP

$mediaService = $user->GetService('MediaService', ADWORDS_VERSION);

// Create image.
$image = new Image();
$image->data = MediaUtils::GetBase64Data('http://goo.gl/HJM3L');
$image->type = 'IMAGE';

// Make the upload request.
$result = $mediaService->upload(array($image));
    

Perl

# Create image.
my $image_data = Google::Ads::Common::MediaUtils::get_base64_data_from_url(
  "http://goo.gl/HJM3L");
my $image = Google::Ads::AdWords::v201609::Image->new({
    data => $image_data,
    type => "IMAGE"
  }
);

# Upload image.
$image = $client->MediaService()->upload({media => [$image]});
    

Ruby

media_srv = adwords.service(:MediaService, API_VERSION)

# Create image.
image_url =
    'http://www.google.com/intl/en/adwords/select/images/samples/inline.jpg'
# This utility method retrieves the contents of a URL using all of the config
# options provided to the Api object.
image_data = AdsCommon::Http.get(image_url, adwords.config)
base64_image_data = Base64.encode64(image_data)
image = {
  # The 'xsi_type' field allows you to specify the xsi:type of the object
  # being created. It's only necessary when you must provide an explicit
  # type that the client library can't infer.
  :xsi_type => 'Image',
  :data => base64_image_data,
  :type => 'IMAGE'
}

# Upload image.
response = media_srv.upload([image])
    

ListOperations の使用

ユニバーサル アプリ キャンペーンでは、ListOperations を使って imageMediaIds などのリストフィールドを設定します。 ListOperations はリストに含まれる要素の動作を説明したもので、必ずなんらかの API オブジェクトのリストに対して定義されます(たとえば imageMediaIdsOpsimageMediaIds を更新する方法を説明したものです)。ListOperations に含まれる演算子の数は、対応するリスト内の要素の数と一致している必要があります。各演算子は、対応するリスト要素との組み合わせによって、実行する変更の内容を説明します。

仮に、imageMediaIds[1000, 1001, 1002] という初期値が含まれていたものとします。下の表は、ListOperations を使って imageMediaIds を更新する mutate 呼び出しの例を説明したものです。

アイテム インデックス 画像メディア ID ListOperation 意味
0 1003 PUT 元のリストから抜けていたアイテム ID 1003 を追加します。
1 1002 REMOVE アイテム ID 1002 を削除します。

mutate 呼び出しの完了後、imageMediaIds には [1000, 1001, 1003] という値が残ることになります。

ターゲティング

ユニバーサル アプリ キャンペーンがサポートしているターゲティングは、キャンペーン単位で指定する言語地域のみです。デフォルトでは、すべての地域と言語がキャンペーンのターゲットとなります。次のコード スニペットでは、キャンペーンのターゲット地域をカリフォルニアとメキシコ、ターゲット言語を英語とスペイン語に設定します。

Java

// Get the CampaignCriterionService.
CampaignCriterionServiceInterface campaignCriterionService =
    adWordsServices.get(session, CampaignCriterionServiceInterface.class);

// Create locations. The IDs can be found in the documentation or
// retrieved with the LocationCriterionService.
Location california = new Location();
california.setId(21137L);

Location mexico = new Location();
mexico.setId(2484L);

// Create languages. The IDs can be found in the documentation or
// retrieved with the ConstantDataService.
Language english = new Language();
english.setId(1000L);

Language spanish = new Language();
spanish.setId(1003L);

List<Criterion> criteria = Lists.<Criterion>newArrayList(california, mexico, english, spanish);

// Create operations to add each of the criteria above.
List<CampaignCriterionOperation> operations = Lists.<CampaignCriterionOperation>newArrayList();
for (Criterion criterion : criteria) {
  CampaignCriterionOperation operation = new CampaignCriterionOperation();

  CampaignCriterion campaignCriterion = new CampaignCriterion();
  campaignCriterion.setCampaignId(campaign.getId());
  campaignCriterion.setCriterion(criterion);
  operation.setOperand(campaignCriterion);

  operation.setOperator(Operator.ADD);

  operations.add(operation);
}

// Set the campaign targets.
CampaignCriterionReturnValue returnValue =
    campaignCriterionService.mutate(
        operations.toArray(new CampaignCriterionOperation[operations.size()]));

if (returnValue != null && returnValue.getValue() != null) {
  // Display added campaign targets.
  for (CampaignCriterion campaignCriterion : returnValue.getValue()) {
    System.out.printf(
        "Campaign criteria of type '%s' and ID %d was added.%n",
        campaignCriterion.getCriterion().getCriterionType(),
        campaignCriterion.getCriterion().getId());
  }
}
    

.NET

// Get the CampaignCriterionService.
CampaignCriterionService campaignCriterionService =
  (CampaignCriterionService) user.GetService(
    AdWordsService.v201609.CampaignCriterionService);

// Create locations. The IDs can be found in the documentation or
// retrieved with the LocationCriterionService.
Location california = new Location() {
  id = 21137L
};

Location mexico = new Location() {
  id = 2484L
};

// Create languages. The IDs can be found in the documentation or
// retrieved with the ConstantDataService.
Language english = new Language() {
  id = 1000L
};

Language spanish = new Language() {
  id = 1003L
};

List<Criterion> criteria = new List<Criterion>() {
  california, mexico, english, spanish };

// Create operations to add each of the criteria above.
List<CampaignCriterionOperation> operations = new List<CampaignCriterionOperation>();
foreach (Criterion criterion in criteria) {
  CampaignCriterionOperation operation = new CampaignCriterionOperation() {
    operand = new CampaignCriterion() {
      campaignId = campaign.id,
      criterion = criterion
    },
    @operator = Operator.ADD
  };

  operations.Add(operation);
}

// Set the campaign targets.
CampaignCriterionReturnValue retVal = campaignCriterionService.mutate(operations.ToArray());

if (retVal != null && retVal.value != null) {
  // Display the added campaign targets.
  foreach (CampaignCriterion criterion in retVal.value) {
    Console.WriteLine("Campaign criteria of type '{0}' and id '{1}' was added.",
                      criterion.criterion.CriterionType, criterion.criterion.id);
  }
}
    

Python

campaign_criterion_service = client.GetService('CampaignCriterionService')

# Create locations. The IDs can be found in the documentation or retrieved
# with the LocationCriterionService.
criteria = [
    {
        'xsi_type': 'Location',
        'id': 21137  # California
    },
    {
        'xsi_type': 'Location',
        'id': 2484  # Mexico
    },
    {
        'xsi_type': 'Language',
        'id': 1000  # English
    },
    {
        'xsi_type': 'Language',
        'id': 1003  # Spanish
    }
]

operations = [{
    'operator': 'ADD',
    'operand': {
        'campaignId': campaign['id'],
        'criterion': criterion
    }
} for criterion in criteria]

response = campaign_criterion_service.mutate(operations)

if response and 'value' in response:
  # Display the added campaign targets.
  for criterion in response['value']:
    print ('Campaign criteria of type "%s" and id "%s" was added.'
           % (criterion['criterion']['type'],
              criterion['criterion']['id']))
    

PHP

// Get the service, which loads the required classes.
$campaignCriterionService =
    $user->GetService('CampaignCriterionService', ADWORDS_VERSION);

$campaignCriteria = array();
// Create locations. The IDs can be found in the documentation or retrieved
// with the LocationCriterionService.
$california = new Location();
$california->id = 21137;
$campaignCriteria[] = new CampaignCriterion($campaignId, null, $california);

$mexico = new Location();
$mexico->id = 2484;
$campaignCriteria[] = new CampaignCriterion($campaignId, null, $mexico);

// Create languages. The IDs can be found in the documentation or retrieved
// with the ConstantDataService.
$english = new Language();
$english->id = 1000;
$campaignCriteria[] = new CampaignCriterion($campaignId, null, $english);

$spanish = new Language();
$spanish->id = 1003;
$campaignCriteria[] = new CampaignCriterion($campaignId, null, $spanish);

// Create operations to add each of the criteria above.
$operations = array();
foreach ($campaignCriteria as $campaignCriterion) {
  $operations[] = new CampaignCriterionOperation($campaignCriterion, 'ADD');
}

// Set the campaign targets.
$result = $campaignCriterionService->mutate($operations);

// Display added campaign targets.
foreach ($result->value as $campaignCriterion) {
  printf("Campaign criterion of type '%s' and ID %d was added.\n",
      $campaignCriterion->criterion->CriterionType,
      $campaignCriterion->criterion->id
  );
}
    

Perl

# Create locations. The IDs can be found in the documentation or retrieved
# with the LocationCriterionService.
my $california = Google::Ads::AdWords::v201609::Location->new({id => 21137});
push @criteria, $california;
my $mexico = Google::Ads::AdWords::v201609::Location->new({id => 2484});
push @criteria, $mexico;

# Create languages. The IDs can be found in the documentation or retrieved
# with the ConstantDataService.
my $english = Google::Ads::AdWords::v201609::Language->new({id => 1000});
push @criteria, $english;
my $spanish = Google::Ads::AdWords::v201609::Language->new({id => 1003});
push @criteria, $spanish;

# Create operations.
my @operations = ();
foreach my $criterion (@criteria) {
  my $operation =
    Google::Ads::AdWords::v201609::CampaignCriterionOperation->new({
      operator => "ADD",
      operand  => Google::Ads::AdWords::v201609::CampaignCriterion->new({
          campaignId => $campaign_id,
          criterion  => $criterion
        })});
  push @operations, $operation;
}

# Set campaign criteria.
my $result =
  $client->CampaignCriterionService()->mutate({operations => \@operations});

# Display campaign criteria.
if ($result->get_value()) {
  foreach my $campaign_criterion (@{$result->get_value()}) {
    printf "Campaign criterion of type '%s' and ID %s was added.\n",
      $campaign_criterion->get_criterion()->get_type(),
      $campaign_criterion->get_criterion()->get_id();
  }
}
    

Ruby

campaign_criterion_service =
    adwords.service(:CampaignCriterionService, API_VERSION)

criteria = [
  {
    :xsi_type => 'Location',
    :id => 21137 # California
  },
  {
    :xsi_type => 'Location',
    :id => 2484 # Mexico
  },
  {
    :xsi_type => 'Language',
    :id => 1000 # English
  },
  {
    :xsi_type => 'Language',
    :id => 1003 # Spanish
  }
]

operations = criteria.map do |criterion|
  {
    :operator => 'ADD',
    :operand => {
      :campaign_id => campaign[:id],
      :criterion => criterion
    }
  }
end

response = campaign_criterion_service.mutate(operations)

if response and response[:value]
  # Display the added campaign targets.
  response[:value].each do |criterion|
    puts 'Campaign criteria of type "%s" and id %d was added.' % [
        criterion[:criterion][:criterion_type],
        criterion[:criterion][:id]
    ]
  end
end
    

レポート

ユニバーサル アプリ キャンペーンのデータは、キャンペーンの掲載結果レポートで参照できます。レポートのデータは、キャンペーンの advertisingChannelType および advertisingChannelSubType によってフィルタリング可能です。コードは次のようになります。

string query = "Select CampaignId, CampaignName, Clicks,
   Impressions, Cost from CAMPAIGN_PERFORMANCE_REPORT where
   AdvertisingChannelType = MULTI_CHANNEL and
   AdvertisingChannelSubType = UNIVERSAL_APP_CAMPAIGN during
   LAST_7_DAYS";

string fileName = ExampleUtilities.GetHomeDir() + Path.DirectorySeparatorChar +
    "CampaignPerformanceReport.gz";

ReportUtilities utilities = new ReportUtilities(user, "v201609", query,
    DownloadFormat.GZIPPED_CSV.ToString());
utilities.GetResponse().Save(fileName);

次のレポートからもデータを取得できます。

  • BUDGET_PERFORMANCE_REPORT
  • CAMPAIGN_LOCATION_TARGET_REPORT
  • CAMPAIGN_NEGATIVE_LOCATIONS_REPORT
  • ACCOUNT_PERFORMANCE_REPORT

コードサンプル

ユニバーサル アプリ キャンペーンを追加するための完全なコードの例は、各クライアント ライブラリでご確認いただけます。

AdWords の「モバイルアプリのインストール」キャンペーンは、モバイルアプリのダウンロード促進に最適化されたキャンペーン サブタイプです。

このセクションでは、AdWords API を使った「モバイルアプリのインストール」キャンペーンの作成、モバイルアプリ用の広告の作成、キャンペーンの掲載結果の確認について説明します。

キャンペーンの予算を作成する

キャンペーンを作成するには、まず Budget(予算)を作成する必要があります。予算は BudgetService を使って作成するか、既存の共有予算を選択します。次のコード スニペットは、標準の広告配信を使った 1 日 5 ドルの予算を作成する方法を示したものです。

// Get the BudgetService.
BudgetService budgetService =
    (BudgetService) user.GetService(AdWordsService.v201609.BudgetService);

// Create the campaign budget.
Budget budget = new Budget();
budget.name = "My App Budget 1";
budget.deliveryMethod = BudgetBudgetDeliveryMethod.STANDARD;
budget.amount = new Money();
budget.amount.microAmount = 5000000;

// Create the operation.
BudgetOperation budgetOperation = new BudgetOperation();
budgetOperation.@operator = Operator.ADD;
budgetOperation.operand = budget;

// Add the budget.
BudgetReturnValue budgetRetval = budgetService.mutate(
    new BudgetOperation[] {budgetOperation});
budget = budgetRetval.value[0];

キャンペーンを作成する

予算を作成したら、CampaignService を使って「モバイルアプリのインストール」キャンペーンを作成します。

まずはキャンペーンのターゲット ユーザーを決めて、掲載先の広告ネットワークと入札戦略を選ぶ必要があります。

広告ネットワークを選ぶ

  • 検索ネットワークでは、特定のタイプのアプリを検索しているユーザー、また特定の 機能について調べているユーザーにアプリ インストール広告を表示できます。
  • ディスプレイ ネットワークでは、類似のアプリを使用中のユーザーに広告を表示できます。このタイプのキャンペーンは多数のインプレッション(広告の表示)を稼ぐことができるため、アプリの認知度を高め、新たなユーザー獲得につなげることができます。

AdWords のオンライン管理画面では、アプリの指定をキャンペーン単位([設定] 内)で行うため、新しい広告を作成するたびにアプリを指定する必要はありません。一方 API にはこのような設定がないため、アプリ インストール広告を作成するごとにアプリ ID を指定してください。詳しくは後述の広告を作成するをご覧ください。

入札戦略を選ぶ

「モバイルアプリのインストール」キャンペーンは、検索ネットワークでは次の入札戦略に対応しています。

ディスプレイ ネットワークでは次の入札単価がサポートされています。

Google Play ストアの Android アプリの場合、インストールは自動的にコンバージョンとしてトラッキングされるため、入札戦略には「目標コンバージョン単価」の使用をおすすめします。この入札戦略では、アプリのインストール単価(CPI)に応じた目標コンバージョン単価を指定すると、その範囲内で最大限のダウンロード数が得られるよう、入札単価が自動的に最適化されます。また、広告グループや個別のターゲット条件に対して、具体的な入札単価を指定することも可能です。

このコード スニペットは、ディスプレイ ネットワーク用のアプリ インストール キャンペーンを作成する方法を示したものです。

// Get the CampaignService.
CampaignService campaignService =
     (CampaignService) user.GetService(AdWordsService.v201609.CampaignService);

Campaign campaign = new Campaign();
campaign.advertisingChannelType = AdvertisingChannelType.DISPLAY;
// Recommendation: Set the campaign to PAUSED when creating it to stop
// the ads from immediately serving. Set to ENABLED once you've added
// targeting and the ads are ready to serve.
campaign.status = CampaignStatus.PAUSED;

// Set the advertising channel subtype for mobile app install campaigns.
campaign.advertisingChannelSubType = AdvertisingChannelSubType.DISPLAY_MOBILE_APP;

campaign.name = "My App campaign 1";

BiddingStrategyConfiguration biddingConfig = new BiddingStrategyConfiguration();
biddingConfig.biddingStrategyType = BiddingStrategyType.TARGET_CPA;

// Specify a BiddingScheme with a target CPA.
TargetCpaBiddingScheme biddingScheme =  new TargetCpaBiddingScheme();
biddingScheme.targetCpa = new Money();
biddingScheme.targetCpa.microAmount = 1000000;
biddingConfig.biddingScheme = biddingScheme;
campaign.biddingStrategyConfiguration = biddingConfig;

// Use the ID of the Budget created in the previous step. You can also
// reuse an existing budget.
campaign.budget = new Budget();
campaign.budget.budgetId = budget.budgetId;

// Optional: Set the campaign ad serving optimization status.
campaign.adServingOptimizationStatus = AdServingOptimizationStatus.ROTATE;

// Create the operation.
CampaignOperation operation = new CampaignOperation();
operation.@operator = Operator.ADD;
operation.operand = campaign;

// Add the campaign.
CampaignReturnValue campaignRetVal = campaignService.mutate(new CampaignOperation[] {operation});

Campaign newCampaign = retVal.value[0];

検索ネットワークのキャンペーンを作成する方法もほぼ同様です。主な違いは、advertisingChannelTypeadvertisingChannelSubTypenetworkSetting の各フィールドに異なる値を設定する必要がある点です。コードは次のようになります。

campaign.advertisingChannelType = AdvertisingChannelType.SEARCH;
campaign.advertisingChannelSubType = AdvertisingChannelSubType.SEARCH_MOBILE_APP;

// Target the networks you want your ads to serve on.
campaign.networkSetting = new NetworkSetting();
campaign.networkSetting.targetGoogleSearch = true;
campaign.networkSetting.targetSearchNetwork = true;

広告グループを作成する

キャンペーンには、AdGroupService を使って広告グループを作成する必要があります。

ここで重要なのが広告グループの biddingStrategyConfiguration 設定です。これは、クリック 1 回またはコンバージョン(顧客獲得)1 件に対してどれくらいの費用を出す意思があるかを指定するものです(入札の対象は、キャンペーンで選択した入札戦略によって異なります)。以下のコードサンプルでは、コンバージョン単価を 10 ドルに設定した入札戦略を使用しています。

// Get the AdGroupService.
AdGroupService adGroupService =
    (AdGroupService) user.GetService(AdWordsService.v201609.AdGroupService);

// Create the ad group.
AdGroup adGroup = new AdGroup();
adGroup.name = "My Mobile adgroup 1";
adGroup.status = AdGroupStatus.ENABLED;
adGroup.campaignId = campaign.id;

// Set the ad group bids.
BiddingStrategyConfiguration biddingConfig = new BiddingStrategyConfiguration();

CpaBid cpaBid = new CpaBid();
cpaBid.bid = new Money();
cpaBid.bid.microAmount = 10000000;

biddingConfig.bids = new Bids[] {cpaBid};

adGroup.biddingStrategyConfiguration = biddingConfig;

// Optional: Set targeting restrictions.
// These settings only affect serving for the Display Network.
TargetingSetting targetingSetting = new TargetingSetting();

TargetingSettingDetail placementDetail = new TargetingSettingDetail();
placementDetail.criterionTypeGroup = CriterionTypeGroup.PLACEMENT;
placementDetail.targetAll = true;

targetingSetting.details = new TargetingSettingDetail[] {
    placementDetail};

adGroup.settings = new Setting[] {targetingSetting};

// Create the operation.
AdGroupOperation operation = new AdGroupOperation();
operation.@operator = Operator.ADD;
operation.operand = adGroup;

// Create the ad group.
AdGroupReturnValue adGroupRetVal = adGroupService.mutate(new AdGroupOperation[] {adGroup});
AdGroup newAdGroup = retVal.value[0];

広告を作成する

広告グループを作成できたら、キャンペーンにアプリ インストール広告(Click-to-Download 広告)を作成しましょう。これらの広告では、アプリを手軽にダウンロードしてもらえるよう、アプリストア内のアプリのページがリンク先となっています。

アプリ インストール広告は次のフォーマットで作成できます。

  • アプリ インストール広告(Click-to-Download 広告)は自動的に生成される広告です。この広告は、アプリのアイコンと、Google Play や Apple Store に寄せられたレビューをもとに作成されます。このフォーマットは、検索ネットワークとディスプレイ ネットワークの両方でご利用いただけます。

  • アプリ インストール イメージ広告は、画像をアップロードし、テキストを 指定して作成するカスタム広告です。ユーザーの目を引く美しいグラフィックを 使用できます。このフォーマットは、ディスプレイ ネットワークでのみご利用いただけます。

  • アプリ インストール動画広告は、ディスプレイ ネットワークに掲載できる動画広告です。YouTube アカウントのリンクを使用して作成するか、アプリの画像、アイコン、レビューをもとに自動的に生成することができます。

AdGroupAdService を使って Click-to-Download 広告を作成するコードは次のようになります。

AdGroupAdService adGroupAdService =
    (AdGroupAdService) user.GetService(AdWordsService.v201609.AdGroupAdService);

// Create the template ad.
TemplateAd clickToDownloadAppAd = new TemplateAd();

clickToDownloadAppAd.name = "Ad for demo game";
clickToDownloadAppAd.templateId = 353;
clickToDownloadAppAd.url =
    "http://play.google.com/store/apps/details?id=com.example.demogame123";
clickToDownloadAppAd.displayUrl = "play.google.com";

// Create the template elements for the ad. You can refer to
// https://developers.google.com/adwords/api/docs/appendix/templateads
// for the list of available template fields.
TemplateElementField headline = new TemplateElementField();
headline.name = "headline";
headline.fieldText = "Enjoy your drive in Mars";
headline.type = TemplateElementFieldType.TEXT;

TemplateElementField description1 = new TemplateElementField();
description1.name = "description1";
description1.fieldText = "Realistic physics simulation";
description1.type = TemplateElementFieldType.TEXT;

TemplateElementField description2 = new TemplateElementField();
description2.name = "description2";
description2.fieldText = "Race against players online";
description2.type = TemplateElementFieldType.TEXT;

TemplateElementField appId = new TemplateElementField();
appId.name = "appId";
appId.fieldText = "com.example.demogame";
appId.type = TemplateElementFieldType.TEXT;

TemplateElementField appStore = new TemplateElementField();
appStore.name = "appStore";
appStore.fieldText = "2";
appStore.type = TemplateElementFieldType.ENUM;

TemplateElement adData = new TemplateElement();
adData.uniqueName = "adData";
adData.fields = new TemplateElementField[] {headline, description1,
    description2, appId, appStore};

clickToDownloadAppAd.templateElements = new TemplateElement[] {adData};

// Create the adgroupad.
AdGroupAd clickToDownloadAppAdGroupAd = new AdGroupAd();
clickToDownloadAppAdGroupAd.adGroupId = adGroupId;
clickToDownloadAppAdGroupAd.ad = clickToDownloadAppAd;

// Create the operation.
AdGroupAdOperation operation = new AdGroupAdOperation();
operation.@operator = Operator.ADD;
operation.operand = clickToDownloadAppAdGroupAd;

// Create the ad.
AdGroupAdReturnValue adRetval = adGroupAdService.mutate(
    new AdGroupAdOperation[] {operation});
AdGroupAd newAd = retval.value[0];

このほか、画像や動画を使ったアプリ インストール広告も API 経由で作成可能です。関係するフィールドについては、テンプレート広告についてのドキュメントでご確認ください。

広告のターゲット設定を行う

広告を作成できたら、広告が表示されるユーザーを指定するためのターゲット条件を追加しましょう。検索ネットワークの場合、ユーザーがアプリを探す際に Google 検索や Google Play で検索しそうな語句を追加します。

広告グループの条件は、AdGroupCriterionService を使って作成します。

次のコード スニペットは、キャンペーンに「android race game」というキーワードを追加する方法を示したものです。

AdGroupCriterionService adGroupCriterionService =
    (AdGroupCriterionService) user.GetService(
        AdWordsService.v201609.AdGroupCriterionService);

// Create the keyword.
Keyword keyword = new Keyword();
keyword.text = "android race game";
keyword.matchType = KeywordMatchType.BROAD;

// Create the biddable ad group criterion.
BiddableAdGroupCriterion keywordCriterion = new BiddableAdGroupCriterion();
keywordCriterion.adGroupId = adGroupId;
keywordCriterion.criterion = keyword;

// Optional: Set the keyword final url.
keywordCriterion.finalUrls = new string[] {
    "http://play.google.com/store/apps/demogame123" };

// Create the operations.
AdGroupCriterionOperation operation = new AdGroupCriterionOperation();
operation.@operator = Operator.ADD;
operation.operand = keywordCriterion;

// Create the keywords.
AdGroupCriterionReturnValue criteriaRetVal = adGroupCriterionService.mutate(
    new AdGroupCriterionOperation[] {operation});

ディスプレイ ネットワークでは、より多彩なターゲティング オプションを利用できます。作成方法は同様で、AdGroupCriterionService を使用しますが、使用する Criterion タイプが異なります。

モバイルアプリのカテゴリ

広告を表示するモバイルアプリのカテゴリを指定できます。たとえば、「ゲーム」や「健康」といったカテゴリを選択します。次のコード スニペットは、Google Play の「ゲーム」アプリで広告が表示されるようにアプリをターゲット設定する方法を示しています。

MobileAppCategory category = new MobileAppCategory();
category.mobileAppCategoryId = 60008;

サポートされるモバイルアプリのカテゴリの一覧は、モバイルアプリのカテゴリについてのページからご確認いただけます。

過去にダウンロードしたアプリ

指定したカテゴリのアプリをダウンロードしたことがあるユーザーを、広告表示のターゲットにすることができます。このターゲティング方法では、指定カテゴリのアプリを購入したか、アプリ内購入を行ったことがあるユーザーだけをターゲットにすることも可能です。次のコード スニペットは、「パズルゲーム」カテゴリの有料アプリをインストールしたことがあるユーザーのみをターゲットにする方法を示したものです。

// Target paid users. The list of valid IDs for this criteria can be found on
// https://developers.google.com/adwords/api/docs/reference/latest/AdGroupCriterionService.AppPaymentModel
AppPaymentModel paymentModel = new AppPaymentModel();
paymentModel.id = 30;

// Create the biddable ad group criterion.
BiddableAdGroupCriterion paymentModelCriterion = new BiddableAdGroupCriterion();
paymentModelCriterion.adGroupId = adGroupId;
paymentModelCriterion.criterion = paymentModel;

// Target users interested in Puzzle Games. See
// https://developers.google.com/adwords/api/docs/appendix/mobileappcategories for the list
// of valid IDs.
CriterionUserInterest userInterest = new CriterionUserInterest();
userInterest.userInterestId = 87086;

// Create the biddable ad group criterion.
BiddableAdGroupCriterion userInterestCriterion = new BiddableAdGroupCriterion();
userInterestCriterion.adGroupId = adGroupId;
userInterestCriterion.criterion = userInterest;

// Create the operations.
AdGroupCriterionOperation operation1 = new AdGroupCriterionOperation();
operation1.@operator = Operator.ADD;
operation1.operand = paymentModelCriterion;

AdGroupCriterionOperation operation2 = new AdGroupCriterionOperation();
operation2.@operator = Operator.ADD;
operation2.operand = userInterestCriterion;

有効なユーザー インタレスト カテゴリの一覧は ConstantDataService から取得できます。

CriterionUserInterest[] userInterests = constantDataService.getUserInterestCriterion(
    ConstantDataServiceUserInterestTaxonomyType.MOBILE_APP_INSTALL_USER);

これらの値は、モバイルアプリのカテゴリについてのページでもご参照いただけます。

新しいモバイル端末

端末(スマートフォン)の利用開始から日が浅く、新しいアプリを積極的にインストールすると見込まれるユーザーに広告を表示できます。この設定を行うには、インタレスト カテゴリで、モバイル端末を使い始めてからの日数(1 週間から 3 か月まで)を選択します。

次のコード スニペットは、端末の利用開始から 7 日以内のユーザーをターゲットに設定する CriterionUserInterest 条件の作成方法を示したものです。有効なユーザー インタレスト ID の一覧は、スマートフォン ユーザーのインタレストについてのページでご確認いただけます。

// Target users who activated a new device within the last 7 days. See
// https://developers.google.com/adwords/api/docs/appendix/smartphone-userinterest for the list
// of valid IDs.
CriterionUserInterest userInterest = new CriterionUserInterest();
userInterest.userInterestId = 85002;

// Create the biddable ad group criterion.
BiddableAdGroupCriterion userInterestCriterion = new BiddableAdGroupCriterion();
userInterestCriterion.adGroupId = adGroupId;
userInterestCriterion.criterion = userInterest;

userInterestCriterion.biddingStrategyConfiguration.bids = new Bids[] { cpcBid };

年齢や性別によるターゲット設定

年齢や性別などのユーザー属性を基準に、広告のターゲット設定を行います。次のコード スニペットは、18~24 歳のユーザーをターゲットに設定する方法を示しています。

AgeRange ageRange = new AgeRange();
ageRange.ageRangeType = AgeRangeAgeRangeType.AGE_RANGE_18_24;

同様に、Gender 条件を追加すれば、性別による絞り込みが可能です。

モバイル端末のターゲット設定

デフォルトでは、まだ広告主様のアプリをインストールしていない、互換性のある端末が、広告の表示対象となります。ディスプレイ ネットワークをターゲットにしている場合は、広告の表示を特定の端末、OS のバージョン、携帯電話会社に制限することができます。モバイル端末のターゲット設定は、CampaignCriterionService を使ってキャンペーン単位で定義します。

次のコード スニペットは、Android Jelly Bean 4.1 以降のみをキャンペーンのターゲットにする方法を示したものです。

// Create the OS version restriction.
OperatingSystemVersion osVersion = new OperatingSystemVersion();
osVersion.id = 630257; // Android 4.1 Jelly Bean

CampaignCriterion osVersionCriterion = new CampaignCriterion();
osVersionCriterion.campaignId = campaignId;
osVersionCriterion.criterion = osVersion;

CampaignCriterionOperation operation = new CampaignCriterionOperation();
operation.@operator = Operator.ADD;
operation.operand = osVersionCriterion;

CampaignCriterionReturnValue campaignCriterionRetVal = campaignCriterionService.mutate(
    new CampaignCriterionOperation[] { operation });

サポートされているモバイル OS のバージョンの一覧は、モバイル プラットフォームについてのページで、または ConstantDataService を通してご確認いただけます。同様に、モバイル端末携帯電話会社を条件にしてターゲットを絞ることも可能です。

個別の入札単価を設定する

デフォルトでは、ターゲット条件には広告グループ単位の入札単価が適用されます。ただし、独自の入札ロジックを使って、条件ごとに個別の入札単価を設定することも可能です。

ディスプレイ ネットワーク キャンペーンで、条件レベルの個別の入札単価を有効にするには、まず広告グループレベルで個別の入札単価を有効にします。そのためには、個別の入札単価設定を有効にするディメンションを指定する必要があります。検索ネットワーク キャンペーンの場合は、この手順は不要です。次のコード スニペットでは、この値を PLACEMENT に設定して、Placement 条件に個別の入札単価を設定できるようにしています。

// Get the AdGroupService.
AdGroupService adGroupService = (AdGroupService) user.GetService(
    AdWordsService.v201609.AdGroupService);

// Create the ad group.
AdGroup adGroup = new AdGroup();

// Optional: Set the bidding group. This allows you to set absolute bids on
// this dimension. This setting only affects serving for the Display Network.
adGroup.contentBidCriterionTypeGroup = CriterionTypeGroup.PLACEMENT;
adGroup.id = adGroupId;

// Create the operation.
AdGroupOperation operation = new AdGroupOperation();
operation.@operator = Operator.SET;
operation.operand = adGroup;

// Update the ad group.
AdGroupReturnValue adGroupRetVal = adGroupService.mutate(
   new AdGroupOperation[] {operation});

次に、AdGroupCriterionService を使って、条件の入札単価を更新しましょう。

次のコード スニペットでは、プレースメントに対してクリック 1 回あたり 3 ドルの個別単価を設定しています。

// Get the AdGroupCriterionService
AdGroupCriterionService adGroupCriterionService =
    (AdGroupCriterionService) user.GetService(
         AdWordsService.v201609.AdGroupCriterionService);

// Since we are not updating any placement-specific fields, it is enough to
// create a criterion object.
Criterion criterion = new Criterion();
criterion.id = placementId;

// Create ad group criterion.
BiddableAdGroupCriterion biddableAdGroupCriterion =
    new BiddableAdGroupCriterion();
biddableAdGroupCriterion.adGroupId = adGroupId;
biddableAdGroupCriterion.criterion = criterion;

// Create the bids.
BiddingStrategyConfiguration biddingConfig =
     new BiddingStrategyConfiguration();

// You may use CpaBid instead of CpcBid if your campaign uses
// a cost-per-acquisition bidding strategy.
CpcBid cpcBid = new CpcBid();
cpcBid.bid = new Money();
cpcBid.bid.microAmount = 3000000;
biddingConfig.bids = new Bids[] {cpcBid};

biddableAdGroupCriterion.biddingStrategyConfiguration = biddingConfig;

// Create the operation.
AdGroupCriterionOperation operation = new AdGroupCriterionOperation();
operation.@operator = Operator.SET;
operation.operand = biddableAdGroupCriterion;

// Update the placement.
AdGroupCriterionReturnValue agcRetVal = adGroupCriterionService.mutate(
    new AdGroupCriterionOperation[] {operation});

コンバージョン トラッキング

広告キャンペーンを設定できたら、効果を確認しましょう。 モバイルアプリのインストール キャンペーンでは、対象アプリのダウンロードがコンバージョンとして 追跡されます。アプリのインストール数に関連するアプリのコンバージョンには、次の 2 つの種類があります。

  1. アプリのインストール(Google Play):
  2. アプリのインストール(初回起動):
    • Android アプリと iOS アプリの両方が対象
    • appConversionType: FIRST_OPEN(Android)または DOWNLOAD(iOS)

これに加えて、Android では appConversionTypeIN_APP_PURCHASE」を使って、アプリ内のユーザー行動をトラッキングすることができます。

アプリ コンバージョンについて詳しくは、コンバージョン トラッキングに関するガイドや、AdWords ヘルプセンターのアプリ コンバージョン トラッキングについての記事(Android / iOS)をご覧ください。

レポート

キャンペーンの掲載結果レポートを使って、キャンペーンの コンバージョン統計情報を取得することができます。 以下のコード スニペットは、このレポートを作成する方法を示しています。

string query = "SELECT CampaignId, Conversions, Cost, Impressions " +
    "from CAMPAIGN_PERFORMANCE_REPORT DURING LAST_7_DAYS";

string fileName = ExampleUtilities.GetHomeDir() + Path.DirectorySeparatorChar +
    "CampaignPerformanceReport.gz";

ReportUtilities utilities = new ReportUtilities(user, "v201609", query,
    DownloadFormat.GZIPPED_CSV.ToString());
utilities.GetResponse().Save(fileName);

サポートされるレポートの一覧は、レポートについてのページでご確認いただけます。

v201603 より、CAMPAIGN_PERFORMANCE_REPORTユニバーサル アプリ キャンペーンのデータが含まれるようになりました。ユニバーサル アプリ キャンペーンは、AdvertisingChannelType = MULTI_CHANNEL かつ AdvertisingChannelSubType = UNIVERSAL_APP_CAMPAIGN という条件で抽出できます。コードは次のようになります。

string query = "SELECT CampaignId, Conversions, Cost, Impressions " +
    "from CAMPAIGN_PERFORMANCE_REPORT where " +
    "AdvertisingChannelType = MULTI_CHANNEL and " +
    "AdvertisingChannelSubType = UNIVERSAL_APP_CAMPAIGN DURING LAST_7_DAYS";

ReportUtilities utilities = new ReportUtilities(user, "v201609", query,
    DownloadFormat.GZIPPED_CSV.ToString());
utilities.GetResponse().Save(fileName);

コンバージョン データの反映の遅れについて

ユーザーの端末、Google、サードパーティのトラッキング サービス(ご使用の場合)の間で通信に遅延が発生すると、レポートにコンバージョンが反映されるまでに数日かかる場合があります。このため、コンバージョン レポートを確認する際は、過去 3 日間のコンバージョン データが反映されていない可能性があることにご留意ください。

コードサンプル

「モバイルアプリのエンゲージメント」キャンペーン

「モバイルアプリのエンゲージメント」キャンペーンの目的は、アプリのユーザー エンゲージメントを増やすことにあります。アプリをインストール済みのユーザーに対して、アプリ利用を再開することや、アプリを起動して特定の操作を行うことを働きかけたい場合に使用するキャンペーン サブタイプです。

このセクションでは、AdWords API を使った「モバイルアプリのエンゲージメント」キャンペーンの作成、モバイルアプリ用の広告の作成、キャンペーンの掲載結果の確認について説明します。

コードサンプルは C# によるものです。他の言語によるサンプルは末尾でまとめて紹介しています。

キャンペーンの予算を作成する

キャンペーンを作成するには、まず予算を作成する必要があります。BudgetService を使って Budget を作成するか、既存の共有予算を選択してください。次のコード スニペットは、標準の広告配信を使った 1 日 5 ドルの予算を作成する方法を示したものです。

// Get the BudgetService.
AdWordsUser user = new AdWordsUser();
BudgetService budgetService =
    (BudgetService) user.GetService(AdWordsService.v201609.BudgetService);

// Create the campaign budget.
Budget budget = new Budget();
budget.name = "My App Budget 1";
budget.deliveryMethod = BudgetBudgetDeliveryMethod.STANDARD;
budget.amount = new Money();
budget.amount.microAmount = 500000;

BudgetOperation budgetOperation = new BudgetOperation();
budgetOperation.@operator = Operator.ADD;
budgetOperation.operand = budget;

BudgetReturnValue budgetRetval = budgetService.mutate(
    new BudgetOperation[] {budgetOperation});
budget = budgetRetval.value[0];

キャンペーンを作成する

予算を作成したら、CampaignService を使って「モバイルアプリのエンゲージメント」キャンペーンを作成します。

ただし、キャンペーンを作成する前に、掲載先の広告ネットワークと入札戦略を選ぶ必要があります。

広告ネットワークを選ぶ

キャンペーンによってリーチしたいユーザー層に応じて、広告ネットワークを選びます。

  • 検索ネットワークでは、広告主様のアプリをインストール済みのスマートフォンやタブレットで検索を行った場合に、検索結果に広告が表示されます。
  • ディスプレイ ネットワークでは、広告主様のアプリをインストール済みのユーザーに対して、他のアプリ内で広告が表示されます。

いずれの場合も、アプリ エンゲージメント広告によって、既存ユーザーにアプリとの接触を促すことができます。

入札戦略を選ぶ

広告に応じて、さまざまな入札方法が用意されています。Campaign 単位の BiddingStrategyConfiguration では、biddingStrategyType で入札のタイプを定義し、biddingScheme で入札戦略のメタデータを指定します。

検索ネットワークの入札

検索ネットワークでは、次の入札戦略がサポートされています。

わかりやすい名前 API 入札戦略タイプ API 入札戦略
クリック数の最大化(デフォルト) TARGET_SPEND TargetSpendBiddingScheme
目標コンバージョン単価(CPA) TARGET_CPA TargetCpaBiddingScheme
目標広告費用対効果 TARGET_ROAS TargetRoasBiddingScheme
検索ページの目標掲載位置 PAGE_ONE_PROMOTED PageOnePromotedBiddingScheme
目標優位表示シェア TARGET_OUTRANK_SHARE TargetOutrankShareBiddingScheme
個別クリック単価 MANUAL_CPC ManualCpcBiddingScheme
ディスプレイ ネットワークの単価設定

ディスプレイ ネットワークでは、次の入札戦略がサポートされています。

わかりやすい名前 API 入札戦略タイプ API 入札戦略
クリック重視(デフォルト)- 上限 CPC による入札を使用 MANUAL_CPC ManualCpcBiddingScheme
インストール数重視 - コンバージョン単価制を使用 TARGET_CPA TargetCpaBiddingScheme

検索ネットワーク キャンペーンを作成する

検索ネットワーク キャンペーンを作成するには、キャンペーンの advertisingChannelType および networkSetting フィールドを下記のように変更します。

NetworkSetting は、キャンペーンのターゲットにするネットワークを定義します。targetGoogleSearchtargetSearchNetworktrue に設定すると、検索ネットワークのみがターゲットとなります。

campaign.advertisingChannelType = AdvertisingChannelType.SEARCH;

campaign.networkSetting = new NetworkSetting();
campaign.networkSetting.targetGoogleSearch = true;
campaign.networkSetting.targetSearchNetwork = true;
campaign.networkSetting.targetContentNetwork = false;
campaign.networkSetting.targetPartnerSearchNetwork = false;

AdWords の管理画面では、アプリの指定をキャンペーン単位([設定] 内)で行うため、新しい広告を作成するたびにアプリを指定する必要はありません。一方 API にはこのような設定がないため、アプリ エンゲージメント広告を作成するごとにアプリ ID を指定してください。

ディスプレイ ネットワーク キャンペーンを作成する

ディスプレイ ネットワークの場合、キャンペーンが十分な数のコンバージョンを獲得するまで、コンバージョン重視の最適化は利用できません。

次のコード スニペットは、ディスプレイ ネットワーク向けの「モバイルアプリのエンゲージメント」キャンペーンの作成方法を示したものです。モバイルアプリのエンゲージメントに注力できるよう、キャンペーンの advertisingChannelSubType は必ず DISPLAY_MOBILE_APP に設定してください。

// Get the CampaignService.
AdWordsUser user = new AdWordsUser();
CampaignService campaignService =
     (CampaignService) user.GetService(AdWordsService.v201609.CampaignService);

Campaign campaign = new Campaign();
campaign.advertisingChannelType = AdvertisingChannelType.DISPLAY;
campaign.advertisingChannelSubType =
    AdvertisingChannelSubType.DISPLAY_MOBILE_APP;
// Recommendation: Set the campaign to PAUSED when creating it to stop
// the ads from immediately serving. Set to ENABLED once you've added
// targeting and the ads are ready to serve.
campaign.status = CampaignStatus.PAUSED;

campaign.name = "My App Engagement campaign 1";

BiddingStrategyConfiguration biddingConfig = new BiddingStrategyConfiguration();
biddingConfig.biddingStrategyType = BiddingStrategyType.TARGET_CPA;

// Specify a BiddingScheme with a target CPA.
TargetCpaBiddingScheme biddingScheme =  new TargetCpaBiddingScheme();
biddingScheme.targetCpa = new Money();
biddingScheme.targetCpa.microAmount = 1000000;
biddingConfig.biddingScheme = biddingScheme;
campaign.biddingStrategyConfiguration = biddingConfig;

// Use the ID of the Budget created in the previous step. You can also
// reuse an existing budget.
campaign.budget = new Budget();
campaign.budget.budgetId = budget.budgetId;

// Optional: Set the campaign ad serving optimization status.
campaign.adServingOptimizationStatus =
    AdServingOptimizationStatus.CONVERSION_OPTIMIZE;

// Create the operation.
CampaignOperation operation = new CampaignOperation();
operation.@operator = Operator.ADD;
operation.operand = campaign;

// Add the campaign.
CampaignReturnValue retVal = campaignService.mutate(new CampaignOperation[] {operation});

Campaign newCampaign = retVal.value[0];

広告グループを作成する

AdGroupService を使って、キャンペーンの広告を格納する AdGroup を作成します。

最初に、広告グループを作成します。

// Get the AdGroupService.
AdWordsUser user = new AdWordsUser();
AdGroupService adGroupService =
    (AdGroupService) user.GetService(AdWordsService.v201609.AdGroupService);

// Create the ad group.
AdGroup adGroup = new AdGroup();
adGroup.name = "My App Engagement adgroup 1";
adGroup.status = AdGroupStatus.ENABLED;
adGroup.campaignId = campaign.id;

次に、広告グループの入札単価を設定します。広告グループの biddingStrategyConfiguration を使って、クリック 1 回またはコンバージョン(顧客獲得)1 件に対してどれくらいの費用を出す意思があるかを指定します。 BiddingStrategyConfiguration は、キャンペーン単位で設定された入札戦略を継承します。

// Set the ad group bids.
BiddingStrategyConfiguration biddingConfig = new BiddingStrategyConfiguration();

CpaBid cpaBid = new CpaBid();
cpaBid.bid = new Money();
cpaBid.bid.microAmount = 10000000;

biddingConfig.bids = new Bids[] {cpaBid};

adGroup.biddingStrategyConfiguration = biddingConfig;

以下、ディスプレイ ネットワークで広告グループのターゲティングを絞り込む方法をいくつか例示します。

// Optional: Set targeting restrictions.
// These settings only affect serving for the Display Network.
TargetingSetting targetingSetting = new TargetingSetting();

TargetingSettingDetail placementDetail = new TargetingSettingDetail();
placementDetail.criterionTypeGroup = CriterionTypeGroup.PLACEMENT;
placementDetail.targetAll = true;

targetingSetting.details = new TargetingSettingDetail[] {
    placementDetail};

adGroup.settings = new Setting[] {targetingSetting};

// Optional: Set the bidding group. This allows you to set absolute bids on
// this dimension. These settings only affect serving for the Display Network.
adGroup.contentBidCriterionTypeGroup =
CriterionTypeGroup.USER_INTEREST_AND_LIST;

// Create the operation.
AdGroupOperation operation = new AdGroupOperation();
operation.@operator = Operator.ADD;
operation.operand = adGroup;

// Create the ad group.
AdGroupReturnValue retVal = adGroupService.mutate(new AdGroupOperation[]
{adGroup});
AdGroup newAdGroup = retVal.value[0];

ディスプレイ ネットワークのアプリ インストール広告は、アプリ内の広告プレースメントだけでなく、モバイルサイトの広告プレースメントにも表示できます。これにより、目標インストール単価を達成しつつ、広告のリーチをさらに広げることができます。この機能を有効にするには、optimizerSetting を使用します。

ExplorerAutoOptimizerSetting optimizerSettings = new ExplorerAutoOptimizerSetting();
optimizerSetting.optin = true;

adGroup.settings = new Setting[] {optimizerSetting};

この設定は、広告グループにモバイルのターゲット設定条件が追加されていなければ機能しない点に注意しましょう。

広告を作成する

広告グループが作成できたら、アプリ エンゲージメント広告の作成に進みます。アプリ エンゲージメント広告が、すでにアプリをインストール済みのユーザーにだけ表示されるよう、適切なターゲット設定を行う必要があります。ユーザーが広告をクリックすると、アプリが起動して、ディープリンクで指定したアプリ内のアクティビティに移動します。

  • 検索ネットワークの場合、この広告を利用することで、ユーザーが Google で検索していた内容に最も関連性が高いアプリ内の場所にユーザーを誘導できます。現在、検索ネットワークでは iOS 向けのアプリ エンゲージメント広告はサポートされていません。
  • ディスプレイ ネットワークの場合、この広告を利用することで、アプリ内で特定の操作(チェックイン、商品の購入、航空券の予約など)を行うように促すテキストを表示できます。ディープリンクを使ってユーザーをアプリ内の特定の場所に誘導するほか、単純にアプリを起動して直近の使用時の状態に戻すことも可能です。

アプリ エンゲージメント広告では、最終ページ URL をディープリンクにする必要があります。ディープリンクは、アプリを作成するときに自動的に設定されるものではありません。検索ネットワーク上のアプリ エンゲージメント キャンペーンでは、ご指定のディープリンクを使って自動的にアプリ URI が生成されるため、広告は Google 検索に対応したものとなります。ディープリンクの作成方法については、次のガイドをご覧ください。

ディープリンクを設定した後、アプリの最終リンク先 URL 内で次の形式を使って ディープリンクを指定してください。

android-app://{package_id}/{scheme}/{rest_of_url}

または

ios-app://{app_id}/{scheme}/{rest_of_url}

たとえば、com.example.demogame アプリのディープリンク demogame://loadlevel?level=mars は、広告 URL 内で次のように指定されます。

android-app://com.example.demogame/demogame/loadlevel?level=mars

ディープリンクの形式については、次のガイドをご覧ください。

以下のコード スニペットは、AdGroupAdService を使ってアプリ エンゲージメント広告を 作成する方法を示しています。 検索キャンペーン向けのアプリ エンゲージメント広告ではテンプレート 453 を使用します。 ディスプレイ キャンペーン向けのアプリ インストール広告ではテンプレート 445(テキスト広告の場合) または 455(イメージ広告の場合)を使用します。

AdWordsUser user = new AdWordsUser();
AdGroupAdService adGroupAdService =
    (AdGroupAdService) user.GetService(AdWordsService.v201609.AdGroupAdService);
    // Create the template ad.
TemplateAd appEngagementAd = new TemplateAd();

appEngagementAd.displayUrl = "play.google.com";

appEngagementAd.name = "Ad for demo game";
appEngagementAd.templateId = 445;

// Define the ad's URL. You can refer to
// https://developers.google.com/app-indexing/webmasters/server
// for the right formatting to use on Android.
// Refer to https://developers.google.com/app-indexing/ios/app
// for the right formatting to use on iOS.
// Only one URL is allowed in the finalAppUrls array.
appEngagementAd.finalAppUrls = new string[] {
    "android-app://com.example.demogame/demogame/loadlevel?level=mars" };

// Create the template elements for the ad. You can refer to
// https://developers.google.com/adwords/api/docs/appendix/templateads
// for the list of available template fields.
TemplateElementField headline = new TemplateElementField();
headline.name = "promoHeadline";
headline.fieldText = "New levels are available";
headline.type = TemplateElementFieldType.TEXT;

TemplateElementField description = new TemplateElementField();
description.name = "promoDescription";
description.fieldText = "Race against players online";
description.type = TemplateElementFieldType.TEXT;

TemplateElementField appId = new TemplateElementField();
appId.name = "appId";
appId.fieldText = "com.example.demogame";
appId.type = TemplateElementFieldType.TEXT;

TemplateElementField appStore = new TemplateElementField();
appStore.name = "appStore";
appStore.fieldText = "2";
appStore.type = TemplateElementFieldType.ENUM;

TemplateElementField callToActionOpen = new TemplateElementField();
callToActionOpen.name = "callToActionOpen";
callToActionOpen.fieldText = "Play Now";
callToActionOpen.type = TemplateElementFieldType.TEXT;

TemplateElementField layout = new TemplateElementField();
layout.name = "layout";
layout.fieldText = "dark";
layout.type = TemplateElementFieldType.ENUM;

TemplateElement adData = new TemplateElement();
adData.uniqueName = "adData";
adData.fields = new TemplateElementField[] {headline, description, appId,
    appStore, callToActionInstall, callToActionOpen, layout};

appEngagementAd.dimensions = new Dimensions() {
    width = 320,
    height = 480
};

appEngagementAd.templateElements = new TemplateElement[] {adData};

// Finally, we get to tie the ad to the AdGroup!
// An AdGroupAd is a container that ties an ad to an
// AdGroup in the AdWords API.
AdGroupAd appEngagementAdAppAdGroupAd = new AdGroupAd();
appEngagementAdAdGroupAd.adGroupId = adGroupId;
appEngagementAdAppAdGroupAd.ad = appEngagementAd;

 // Create the operation.
 AdGroupAdOperation operation = new AdGroupAdOperation();
 operation.@operator = Operator.ADD;
 operation.operand = appEngagementAdAppAdGroupAd;

// Send the command to create the ad.
// The command returns the successfully created ad.
AdGroupAdReturnValue retval = adGroupAdService.mutate(
    new AdGroupAdOperation[] {operation});
AdGroupAd newAd = retval.value[0];

画像アプリ エンゲージメント広告とアプリ再エンゲージメント広告は AdWords API を利用して作成することもできます。 フィールドの詳細については、 テンプレート広告を ご覧ください。

ターゲティング用のユーザーリストを作成する(ディスプレイ ネットワークでは必須)

ディスプレイ ネットワーク用の「モバイルアプリのエンゲージメント」キャンペーンでは、ユーザーリスト ターゲティングを利用して、すでにアプリを持っているユーザーだけをキャンペーンのターゲットに設定する必要があります。アプリをインストール済みのユーザーを収録したユーザーリストを自動作成するには、Google Play アカウントを AdWords アカウントとリンクします。これによって、アプリをインストール済みのユーザーをすべて登録したユーザーリストが自動的に作成されます。また、AdwordsUserListService を使って、より詳細なユーザーリストを AdWords アカウントに作成することも可能です。 ユーザーリストを定義できたら、 各広告グループでユーザーリストをターゲット設定します。

広告のターゲット設定を行う

広告を作成できたら、広告が表示されるユーザーを指定するためのターゲット条件を追加しましょう。

検索ネットワークのターゲット設定(任意)

検索ネットワークの場合、ユーザーがアプリを探す際に Google 検索や Google Play で検索しそうな語句を追加します。

広告グループの条件は、AdGroupCriterionService を使って作成します。次のコード スニペットは、キャンペーンに「mars race event」というキーワードを追加し、最終ページ URL によってアプリでレースイベントを読み込む方法を示したものです。

AdWordsUser user = new AdWordsUser();
AdGroupCriterionService adGroupCriterionService =
    (AdGroupCriterionService) user.GetService(
        AdWordsService.v201609.AdGroupCriterionService);

// Create the keyword.
Keyword keyword = new Keyword();
keyword.text = "mars race event";
keyword.matchType = KeywordMatchType.BROAD;

// Create the biddable ad group criterion.
BiddableAdGroupCriterion keywordCriterion = new BiddableAdGroupCriterion();
keywordCriterion.adGroupId = adGroupId;
keywordCriterion.criterion = keyword;

// Optional: Set the keyword final url.
keywordCriterion.finalAppUrls = new string[] {
    "android-app://com.example.demogame/loadevent/mars/megarace" };

// Create the operations.
AdGroupCriterionOperation operation = new AdGroupCriterionOperation();
operation.@operator = Operator.ADD;
operation.operand = keywordCriterion;

// Create the keywords.
AdGroupCriterionReturnValue criteriaRetVal = adGroupCriterionService.mutate(
    new AdGroupCriterionOperation[] {operation});

ディスプレイ ネットワークのターゲット設定(必須)

ディスプレイ ネットワークでの広告掲載の場合、ユーザーリスト ターゲティングを利用して、アプリをインストール済みのユーザーをターゲットに設定します。このターゲティングは、先程と同様 AdGroupCriterionService を使って作成しますが、こちらは CriterionUserList タイプを使用します。

オーディエンス ターゲティング

アプリの既存ユーザーに働きかけるため、リマーケティング リストを作成し、ターゲット条件として使用します。アプリ エンゲージメント広告では、アプリの既存ユーザーをターゲットに設定する必要があります。

次のコード スニペットでは、AdWords アカウントで作成したユーザーリストを取得する 方法を示しています。Google Play アカウントと AdWords アカウントをリンクしていた場合、 ユーザーリストは既に作成され、データが入力されているため、 単純にターゲットとして設定するだけで済みます。リンクしていない場合は、この手順に従ってユーザーリストを作成してください。

次のコード スニペットは、既存のユーザーリストをリスト名で取得する方法を示しています。

AdWordsUser user = new AdWordsUser();
AdwordsUserListService userListService =
    (AdwordsUserListService)
         user.GetService(AdWordsService.v201609.AdwordsUserListService);

Selector selector = new Selector() {
    fields = new string[] { "Id", "Name", "ListType"},
    predicates = new Predicate[] {
        new Predicate() {
            field = "Name",
            @operator = PredicateOperator.EQUALS,
            values = new string[] {"All users of Demo App (Google Play)"}
        }
    }
};

UserListPage page = userListService.get(selector);
UserList myUserList = page.values[0];

その後、この UserList インスタンスを使って、適用範囲を変更したり、個別の入札単価を設定したりすることができます。

個別の入札単価を設定する

デフォルトでは、ターゲット条件には広告グループ単位の入札単価が適用されます。ただし、独自の入札ロジックを使って、条件ごとに個別の入札単価を設定することも可能です。

ディスプレイ ネットワークにおける個別の入札単価

ディスプレイ ネットワーク キャンペーンで、条件レベルの個別の入札単価を有効にするには、まず広告グループレベルで個別の入札単価を有効にします。そのためには、個別の入札単価設定を有効にするディメンションを指定する必要があります。

次のコード スニペットでは、この値を PLACEMENT に設定して、Placement 条件に個別の入札単価を設定できるようにしています。

// Get the AdGroupService.
AdWordsUser user = new AdWordsUser();
AdGroupService adGroupService = (AdGroupService) user.GetService(
    AdWordsService.v201609.AdGroupService);

// Create the ad group.
AdGroup adGroup = new AdGroup();

// Optional: Set the bidding group. This allows you to set absolute bids on
// this dimension. This setting only affects serving for the Display Network.
adGroup.contentBidCriterionTypeGroup = CriterionTypeGroup.PLACEMENT;
adGroup.id = adGroupId;

// Create the operation.
AdGroupOperation operation = new AdGroupOperation();
operation.@operator = Operator.SET;
operation.operand = adGroup;

// Update the ad group.
AdGroupReturnValue adGroupRetVal = adGroupService.mutate(
   new AdGroupOperation[] {operation});

次に、AdGroupCriterionService を使って、条件の入札単価を更新しましょう。次のコード スニペットでは、プレースメントに対してコンバージョン 1 件あたり 6 ドルの個別単価を設定しています。

// Get the AdGroupCriterionService.
AdGroupCriterionService adGroupCriterionService =
    (AdGroupCriterionService) user.GetService(
         AdWordsService.v201609.AdGroupCriterionService);

// Since we are not updating any placement-specific fields, it is enough to
// create a criterion object. The placementId, in this case,
// is a pre-existing Placement targeting a website.
Criterion criterion = new Criterion();
criterion.id = placementId;

// Create ad group criterion.
BiddableAdGroupCriterion biddableAdGroupCriterion =
    new BiddableAdGroupCriterion();
biddableAdGroupCriterion.adGroupId = adGroupId;
biddableAdGroupCriterion.criterion = criterion;

// Create the bids.
BiddingStrategyConfiguration biddingConfig =
     new BiddingStrategyConfiguration();
CpaBid cpcBid = new CpaBid();
cpaBid.bid = new Money();
cpaBid.bid.microAmount = 6000000;
biddingConfig.bids = new Bids[] {cpaBid};

biddableAdGroupCriterion.biddingStrategyConfiguration = biddingConfig;

// Create the operation.
AdGroupCriterionOperation operation = new AdGroupCriterionOperation();
operation.@operator = Operator.SET;
operation.operand = biddableAdGroupCriterion;

// Update the placement.
AdGroupCriterionReturnValue agcRetVal = adGroupCriterionService.mutate(
    new AdGroupCriterionOperation[] {operation});

キャンペーンの掲載結果を確認する

キャンペーンの設定が済んだら、次は効果の測定です。AdWords API では、複数のレポートタイプを使ってキャンペーンの掲載結果を確認することができます。

次のコード スニペットでは、キャンペーンの掲載結果レポートを作成して、キャンペーンの掲載結果を確認する方法を示しています。

string query = "SELECT CampaignId, Conversions, Cost, Impressions from
CAMPAIGN_PERFORMANCE_REPORT DURING LAST_7_DAYS";

string filePath = ExampleUtilities.GetHomeDir() + Path.DirectorySeparatorChar
    + "CampaignPerformanceReport.gz";

ReportUtilities utilities = new ReportUtilities(user, "v201609", query,
    DownloadFormat.GZIPPED_CSV.ToString());
utilities.GetResponse().Save(fileName);

ユーザーがアプリをどのように利用しているか調査するには、 アプリ内コンバージョンを設定します。 コンバージョン トラッキングの設定手順に従って、 アプリ内コンバージョン用のコンバージョン トラッカーを 作成してください。 アプリのコンバージョン トラッキング の手順に従って、 コンバージョン時のユーザーのアプリ操作をトラッキングします。

コードサンプル

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。