收集媒体方案的定位设置和产品组合后,您可以使用 GenerateReachForecastmethod in ReachPlanService 生成预算与潜在覆盖面的曲线。如需详细了解请求字段,请参阅
术语表和媒体方案
指南。
预测指标
GenerateReachForecast 的响应包含
Forecast 消息中的各种指标,可帮助您深入了解
计划广告系列的潜在效果。这些指标包括:
- 覆盖面(目标内覆盖面和总覆盖面,包括同看)
- 展示次数(目标内展示次数和总展示次数,包括同看和可见展示次数)
- 有效频次细分(至少看到广告一定次数(例如 1 次以上、2 次以上、3 次以上)的唯一身份用户人数)。
- 用户操作(TrueView 观看次数、转化和点击次数)
保存曲线
您只能保存单个曲线,以便为用户提供便利。 严禁批量缓存曲线。如果您确实需要批量生成曲线,请先与您的 Google 代表联系。
错误处理
对 ReachPlanService 的请求必须遵循 基本的 API
结构,如果验证失败,可能会返回 常见错误。
除了常见错误之外,ReachPlanService 还可以返回特定于
覆盖面规划的错误,这些错误列在
ReachPlanError中。
YouTube 优选频道组的变化
与之前的 Run-of-Network 相比,覆盖面规划服务中的 YouTube 优选频道组 (YTS) 支持在即时预订定价的所有符合条件的 YTS 位置定位到频道组级。使用 youtube_select_lineup_targeting 字段在
ReachPlanService.ListPlannableProducts
中来确定哪些频道组可用。
使用即时预订时,请求 YTS 预测时也可能会出现以下错误:
预测需求开发广告系列的覆盖面
为 DEMAND_GEN 可规划产品生成曲线时,您还必须为每个产品添加预期转化率。
如需获取受支持的可规划产品的转化率建议,请使用
GenerateConversionRates 方法。此方法会根据您账号的历史表现或所有广告客户的表现建议转化率。
对于 DEMAND_GEN 产品,GenerateConversionRates 可能会为同一产品返回多个建议。其中一些建议会填充 surface_targeting 字段,这表示该建议仅适用于该特定平台组合(例如:YouTube Shorts)。如果未填充 surface_targeting,则该建议是该产品的需求开发广告系列平均转化率。为采用平台定位的需求开发广告系列生成预测时,您应使用最具体的可用转化率建议。
除了转化率之外,需求开发广告系列用户还可以使用 GenerateReachForecast 来预测 clicks,这对于以点击为优化目标(例如采用“尽可能争取更多点击次数”出价策略的需求开发广告系列)的广告系列尤其重要。
代码示例
该曲线包含绝对数字的展示次数和用户覆盖面,以及与所请求人群和国家/地区的人口普查人口和 YouTube 受众群体规模相对应的覆盖面规模。
Java
private void getReachCurve( ReachPlanServiceClient reachPlanServiceClient, GenerateReachForecastRequest request) { GenerateReachForecastResponse response = reachPlanServiceClient.generateReachForecast(request); System.out.println("Reach curve output:"); System.out.println( "Currency, Cost Micros, On-Target Reach, On-Target Imprs, Total Reach, Total Imprs," + " Products"); for (ReachForecast point : response.getReachCurve().getReachForecastsList()) { System.out.printf( "%s, \"", Joiner.on(", ") .join( request.getCurrencyCode(), String.valueOf(point.getCostMicros()), String.valueOf(point.getForecast().getOnTargetReach()), String.valueOf(point.getForecast().getOnTargetImpressions()), String.valueOf(point.getForecast().getTotalReach()), String.valueOf(point.getForecast().getTotalImpressions()))); for (PlannedProductReachForecast product : point.getPlannedProductReachForecastsList()) { System.out.printf("[Product: %s, ", product.getPlannableProductCode()); System.out.printf("Budget Micros: %s]", product.getCostMicros()); } System.out.printf("\"%n"); } }
C#
public void GetReachCurve(ReachPlanServiceClient reachPlanService, GenerateReachForecastRequest request) { GenerateReachForecastResponse response = reachPlanService.GenerateReachForecast( request); Console.WriteLine("Reach curve output:"); Console.WriteLine( "Currency, Cost Micros, On-Target Reach, On-Target Impressions, Total Reach," + " Total Impressions, Products"); foreach (ReachForecast point in response.ReachCurve.ReachForecasts) { Console.Write($"{request.CurrencyCode}, "); Console.Write($"{point.CostMicros}, "); Console.Write($"{point.Forecast.OnTargetReach}, "); Console.Write($"{point.Forecast.OnTargetImpressions}, "); Console.Write($"{point.Forecast.TotalReach}, "); Console.Write($"{point.Forecast.TotalImpressions}, "); Console.Write("\"["); foreach (PlannedProductReachForecast productReachForecast in point.PlannedProductReachForecasts) { Console.Write($"(Product: {productReachForecast.PlannableProductCode}, "); Console.Write($"Budget Micros: {productReachForecast.CostMicros}), "); } Console.WriteLine("]\""); } }
PHP
private static function getReachCurve( GoogleAdsClient $googleAdsClient, int $customerId, array $productMix, string $locationId, string $currencyCode ) { // Valid durations are between 1 and 90 days. $duration = new CampaignDuration(['duration_in_days' => 28]); $targeting = new Targeting([ 'plannable_location_id' => $locationId, 'age_range' => ReachPlanAgeRange::AGE_RANGE_18_65_UP, 'genders' => [ new GenderInfo(['type' => GenderType::FEMALE]), new GenderInfo(['type' => GenderType::MALE]) ], 'devices' => [ new DeviceInfo(['type' => Device::DESKTOP]), new DeviceInfo(['type' => Device::MOBILE]), new DeviceInfo(['type' => Device::TABLET]) ] ]); // See the docs for defaults and valid ranges: // https://developers.google.com/google-ads/api/reference/rpc/latest/GenerateReachForecastRequest $response = $googleAdsClient->getReachPlanServiceClient()->generateReachForecast( GenerateReachForecastRequest::build($customerId, $duration, $productMix) ->setCurrencyCode($currencyCode) ->setTargeting($targeting) ); printf( "Reach curve output:%sCurrency, Cost Micros, On-Target Reach, On-Target Imprs," . " Total Reach, Total Imprs, Products%s", PHP_EOL, PHP_EOL ); foreach ($response->getReachCurve()->getReachForecasts() as $point) { $products = ''; /** @var ReachForecast $point */ foreach ($point->getPlannedProductReachForecasts() as $plannedProductReachForecast) { /** @var PlannedProductReachForecast $plannedProductReachForecast */ $products .= sprintf( '(Product: %s, Budget Micros: %s)', $plannedProductReachForecast->getPlannableProductCode(), $plannedProductReachForecast->getCostMicros() ); } printf( "%s, %d, %d, %d, %d, %d, %s%s", $currencyCode, $point->getCostMicros(), $point->getForecast()->getOnTargetReach(), $point->getForecast()->getOnTargetImpressions(), $point->getForecast()->getTotalReach(), $point->getForecast()->getTotalImpressions(), $products, PHP_EOL ); } }