Кампании по продвижению мобильных приложений

В этом руководстве описывается, как выполнять настройку, а также отслеживать эффективность кампаний по продвижению мобильных приложений перечисленных ниже типов.

Универсальные кампании для приложений

Универсальные кампании для приложений позволяют рекламировать приложения для Android и iOS на таких популярных ресурсах Google, как Google Поиск, Google Play, YouTube, а также на ресурсах контекстно-медийной сети. Из этого руководства вы узнаете, как создавать такие кампании, настраивать для них таргетинг, а также получать отчеты по их эффективности.

Подготовка кампании

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. Параметру advertisingChannelType необходимо присвоить значение MULTI_CHANNEL, а параметру advertisingChannelSubType – UNIVERSAL_APP_CAMPAIGN.
  2. Допускается использование только стратегии назначения ставок с целевой ценой за конверсию (TARGET_CPA).
  3. Нельзя использовать многие параметры, доступные в кампаниях других типов, например networkSetting, frequencyCap и trackingUrlTemplate. Подробнее об этом читайте в полном списке параметров.

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. Оптимизация кампании

Для оптимизации назначения ставок используйте параметр 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

    

Загрузка медиа

В универсальной кампании для приложений можно определить до десяти графических объектов, на основе которых 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

Для определения imageMediaIds и других полей списка в универсальных кампаниях для приложений используется метод ListOperations. Этот метод, описывающий поведение элементов в списке, всегда определяется в объекте API вместе со списком (например, imageMediaIdsOps описывает, как обновлять список imageMediaIds). Количество операторов в ListOperations должно равняться количеству элементов списка (поскольку каждая операция определяется парой из оператора и соответствующего ему элемента списка).

Для примера допустим, что список imageMediaIds содержит исходные значения [1000, 1001, 1002]. В таблице ниже описан метод mutate, вызываемый для обновления элементов списка imageMediaIds с помощью операторов из списка ListOperations.

Индекс элемента Идентификатор изображения Операция ListOperation Значение
0 1003 PUT Идентификатор 1003 будет добавлен, поскольку его не было в исходном списке.
1 1002 REMOVE Идентификатор 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.

Примеры кода

Примеры полного кода для добавления универсальной кампании для приложений можно найти в клиентских библиотеках.

Java

Пример кода

.NET

Пример кода

PHP

Пример кода

Perl

Пример кода

Python

Пример кода

Ruby

Пример кода

Кампании типа "Установки мобильного приложения"

Кампании типа "Установки мобильного приложения" – это подтип кампаний AdWords, ориентированный на увеличение количества скачиваний приложения.

В этом разделе рассказывается, как создать кампанию такого типа и объявления для нее, а также отслеживать их эффективность с помощью AdWords API.

Создание бюджета кампании

В первую очередь необходимо установить бюджет. Вы можете создать новый бюджет с помощью службы BudgetService или применить уже существующий общий бюджет. Ниже приведен пример кода для создания дневного бюджета в 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, то идентификатор приложения нужно указывать в каждом объявлении, ориентированном на установку приложения. Подробнее об этом читайте в разделе Создание объявлений.

Выбор стратегии назначения ставок

В поисковой сети в кампаниях, ориентированных на установку приложения, поддерживаются следующие стратегии назначения ставок:

В контекстно-медийной сети доступны следующие стратегии:

Установки приложения Android из магазина Google Play автоматически учитываются как конверсии. Поэтому в кампаниях данного типа мы рекомендуем использовать целевую цену за конверсию. Укажите сумму, которую вы готовы платить за каждую установку приложения, и система будет оптимизировать ставки так, чтобы увеличить количество скачиваний по нужной цене. Вы также можете задать ставки для отдельных групп объявлений или критериев таргетинга.

Ниже приведен пример кода для создания кампании, ориентированной на установку приложения, в контекстно-медийной сети.

// 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];

Кампании для поисковой сети создаются аналогичным образом. Основное различие заключается в том, что в коде необходимо задать другие значения полей advertisingChannelType, advertisingChannelSubType и networkSetting.

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: с его помощью задается максимальная сумма, которую вы готовы платить за каждый клик по объявлению или конверсию, которую оно приносит, в зависимости от стратегии назначения ставок на уровне кампании. В приведенном ниже примере цена за конверсию равна 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];

Создание объявлений

Перейдем к созданию объявлений, ориентированных на установку приложения (объявлений с загрузкой по клику), которые будут перенаправлять пользователей на страницу приложения в Google Play или App Store.

Существует несколько форматов объявлений, ориентированных на установку приложения:

  • Объявления с загрузкой по клику. Такие объявления AdWords создает автоматически, используя отзывы о приложении и его значок из Google Play или Apple App Store. Их можно показывать как в поисковой, так и в контекстно-медийной сетях.

  • Графические объявления, ориентированные на установку приложения. Для их создания достаточно загрузить изображение и добавить текст. Данный формат доступен только в контекстно-медийной сети.

  • Видеообъявления, ориентированные на установку приложения. Доступны только в контекстно-медийной сети. Автоматическое создание таких объявлений можно настроить, указав ссылки на готовые видео в аккаунте YouTube или используя изображения, значки и отзывы со страницы магазина приложений.

Ниже приведен пример кода для создания объявления с загрузкой по клику с помощью службы AdGroupAdService.

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

Также список интересов приведен на этой странице в разделе о категориях мобильных приложений.

Новые мобильные устройства

Вы можете показывать рекламу пользователям, которые недавно приобрели телефон и, вероятно, заинтересованы в новых приложениях. Выберите этот вариант таргетинга в разделе категорий интересов, а затем установите период времени с момента активации устройства в диапазоне от недели до трех месяцев.

В примере ниже показано, как создать критерий CriterionUserInterest для таргетинга на пользователей, активировавших устройство в течение последних семи дней. Идентификаторы критериев для этого варианта таргетинга можно найти здесь.

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

Таргетинг на устройства

По умолчанию реклама будет показываться на подходящих для вашего приложения устройствах, если приложение ещё не установлено. В контекстно-медийной сети можно настроить таргетинг на определенные типы устройств, операторов связи и версии операционных систем. Этот тип таргетинга настраивается на уровне кампании с помощью службы 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 });

Список поддерживаемых версий операционных систем можно найти на этой странице в разделе, посвященном мобильным платформам, а также получить с помощью службы 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.

В примере ниже показано, как установить для выбранного места размещения цену за клик в 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});

Отслеживание конверсий

Настроив кампанию, вы наверняка захотите отслеживать ее эффективность. Кампании типа "Установки мобильного приложения" позволяют учитывать скачивания как конверсии. Существуют два типа конверсий, связанных с установкой приложения.

  1. Установка приложения из Google Play:
  2. Первый запуск установленного приложения:
    • для приложений Android и iOS;
    • appConversionType – FIRST_OPEN (Android) или DOWNLOAD (iOS).

Кроме того, в приложениях Android можно отслеживать действия с помощью параметра appConversionType – IN_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);

Поддерживаемые типы отчетов перечислены на этой странице.

Начиная с версии 201603 отчет 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 (а также сторонними службами отслеживания, если такие применяются) данные по конверсиям могут отображаться в отчетах с задержкой в несколько дней. В связи с этим статистика за последние три дня в отчетах по конверсиям может быть неполной.

Примеры кода

Кампании типа "Взаимодействие с мобильным приложением"

Кампании типа Взаимодействие с мобильным приложением позволяют обратиться к людям, установившим ваше приложение, и побудить их более активно им пользоваться.

Из этого раздела вы узнаете, как создать кампанию, ориентированную на взаимодействие с мобильным приложением, настроить в ней объявления и отслеживать конверсии с помощью AdWords API.

Примеры кода в этом руководстве написаны на C#. Ссылки на примеры на других языках программирования приведены в таблице ниже.

Создание бюджета кампании

В первую очередь необходимо установить бюджет. Вы можете создать новый бюджет с помощью службы BudgetService или же применить уже существующий общий бюджет. Ниже представлен пример кода для создания дневного бюджета в 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.

Однако перед этим необходимо выбрать рекламную сеть и стратегию назначения ставок.

Выбор рекламной сети

Выбирая рекламную сеть, вы определяете аудиторию для своей кампании.

  • Объявления в поисковой сети показываются в результатах веб-поиска на смартфонах и планшетах, пользователи которых уже установили ваше приложение.
  • Объявления в контекстно-медийной сети показываются внутри разных приложений тем пользователям, которые уже установили ваше приложение.

Независимо от выбранной сети, цель такой рекламы состоит в повышении интереса уже существующих пользователей к вашему приложению.

Выбор стратегии назначения ставок

Назначать ставки можно разными способами. В объекте BiddingStrategyConfiguration, применяемом на уровне кампании, поле biddingStrategyType определяет тип назначения ставок, а biddingScheme содержит метаданные о стратегии.

Назначение ставок в поисковой сети

Ниже перечислены стратегии назначения ставок, поддерживаемые в поисковой сети.

Описательное название Тип стратегии назначения ставок API Стратегия назначения ставок API
Максимальное количество кликов (по умолчанию) TARGET_SPEND TargetSpendBiddingScheme
Целевая цена за конверсию TARGET_CPA TargetCpaBiddingScheme
Целевая рентабельность инвестиций в рекламу TARGET_ROAS TargetRoasBiddingScheme
Целевое положение на странице поиска PAGE_ONE_PROMOTED PageOnePromotedBiddingScheme
Целевой процент выигрышей TARGET_OUTRANK_SHARE TargetOutrankShareBiddingScheme
Назначение цены за клик вручную MANUAL_CPC ManualCpcBiddingScheme
Назначение ставок в контекстно-медийной сети

Ниже перечислены стратегии назначения ставок, поддерживаемые в контекстно-медийной сети.

Описательное название Тип стратегии назначения ставок API Стратегия назначения ставок API
Плата за клики (по умолчанию) – использовать максимальные цены за клик MANUAL_CPC ManualCpcBiddingScheme
Плата за установки – использовать цену за конверсию TARGET_CPA TargetCpaBiddingScheme

Создание кампании в поисковой сети

Чтобы создать кампанию для поисковой сети, измените поля advertisingChannelType и networkSetting кампании, как показано ниже.

Параметр NetworkSetting определяет сети, на которые будет настроен таргетинг. Если переменным targetGoogleSearch и targetSearchNetwork присвоить значение true, кампания будет проводиться только в поисковой сети.

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, то идентификатор приложения нужно указывать для каждого объявления, ориентированного на взаимодействие с приложением.

Создание кампании для контекстно-медийной сети

Вариант оптимизации по количеству конверсий становится доступным для кампании в КМС только после того, как кампания принесет определенное количество конверсий.

В следующем примере показано, как создать кампанию типа "Взаимодействие с мобильным приложением" для контекстно-медийной сети. Обратите внимание, что параметру 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];

Создание группы объявлений

Для создания объекта AdGroup используйте службу AdGroupService.

Сначала создайте группу объявлений:

// 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 группы объявлений определяет, сколько вы готовы платить за каждый клик или конверсию. Для этого используется стратегия назначения ставок, выбранная на уровне кампании.

// 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];

AdWords может показывать объявления, ориентированные на установку мобильного приложения, не только в приложениях, но и на мобильных сайтах. Это позволяет добиваться более широкого охвата рекламы при заданной целевой цене за установку. Ниже показано, как включить показ на мобильных сайтах в параметре optimizerSetting.

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

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

Обратите внимание, что вам нужно добавить в группу объявлений хотя бы один критерий таргетинга на мобильные устройства, чтобы эта функция работала.

Создание объявлений

Перейдем к созданию объявлений, ориентированных на взаимодействие с приложением. Чтобы такие объявления видели лишь те пользователи, у которых установлено ваше приложение, необходимо правильно настроить таргетинг. Нажав на такое объявление, пользователь переходит на контент приложения, установленного на его устройстве.

  • Объявления в поисковой сети применяются для перенаправления пользователей в раздел приложения, который больше всего соответствует их поисковым запросам в Google. Обратите внимание, что продвижение приложений iOS в поисковой сети в настоящее время не поддерживается.
  • Объявления в контекстно-медийной сети обычно включают призыв выполнить определенное действие в приложении (зарегистрироваться, купить товар, забронировать авиабилет и т. п.). Такие объявления могут ссылаться на определенный контент приложения или просто открывать приложение на том месте, где пользователь закрыл его в последний раз.

В качестве конечных URL в объявлениях, ориентированных на взаимодействие с приложением, необходимо указывать ссылки на контент – они не генерируются автоматически при создании приложения. Для кампаний типа "Взаимодействие с мобильным приложением" в поисковой сети система автоматически создает URI приложения на основе предоставленных вами ссылок. Подробнее о создании ссылок на контент читайте в следующих руководствах:

Ссылка на раздел приложения должна быть представлена в конечном URL следующим образом:

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

или

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

Например, вот как будет выглядеть ссылка на раздел demogame://loadlevel?level=mars приложения com.example.demogame в 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. Вы также можете составлять в AdWords более сложные списки, используя службу AdwordsUserListService. Затем настройте таргетинг групп объявлений на созданные списки.

Таргетинг объявлений

Определите, кому вы будете показывать свою рекламу, добавив к объявлениям критерии таргетинга.

Таргетинг в поисковой сети (необязательно)

В качестве критерия таргетинга в поисковой сети можно применять ключевые слова, по которым пользователи ищут в Google функции, доступные в вашем приложении.

Чтобы создать критерий таргетинга для группы объявлений, используйте службу 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. Это означает, что специальные ставки будут использоваться для разных мест размещения.

// 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. Ниже показано, как задать для места размещения ставку в 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);

Чтобы понять, как пользователи взаимодействуют с вашим приложением, настройте отслеживание конверсий. Инструкции по интеграции SDK отслеживания конверсий можно найти здесь.

Примеры кода

Оставить отзыв о...

Текущей странице
Нужна помощь? Обратитесь в службу поддержки.