原生广告

原生广告是一种格式来契合周围内容和视觉设计的广告,更有可能被用户查看和点击。原生广告资源在移动应用、桌面版网站和移动网站上均可使用。如需详细了解原生广告,请参阅原生广告概览

Authorized Buyers 和公开出价均支持原生广告。

以下是原生广告的工作流程:

  1. 向 Google 发出原生广告调用请求。该调用会指定下面的一个或两个原生广告模板,每个模板都指定首选的原生广告字段。
  2. Google 向买方发送实时出价请求,其中包含所请求的字段列表。
  3. 感兴趣的买方使用请求的字段进行响应。
  4. Google 开展竞价,以选择获胜出价,并将相应买方提供的广告素材资源发送给发布商。
  5. 发布商将这些素材资源整合到一个原生广告中,并调整它们的样式以契合网站的设计。

消息格式

Google 支持 JSON 和 Protobuf 格式的 OpenRTB 规范

对于 OpenRTB Protobuf 原生广告,以下字段与规范不同:

JSON 规范
(PROTOCOL_OPENRTB_2_4)
JSON 类型 OpenRTB 实现
(PROTOCOL_OPENRTB_PROTOBUF_2_4)
OpenRTB 类型
BidRequest.imp[].native.request string BidRequest.imp[].native.request_native NativeRequest
BidResponse.seatbid[].bid[].adm string BidResponse.seatbid[].bid[].adm_native NativeResponse

OpenRTB 字段是 Protobuf 消息,而不是字符串。

如果您使用 OpenRTB Protobuf 实现,则不会收到 BidRequest.imp[].native.request,并且必须使用 BidResponse.seatbid[].bid[].adm_native 进行响应。包含 BidResponse.seatbid[].bid[].adm 的出价响应会被滤除。OpenRTB Protobuf 出价响应不需要素材资源 ID。

如果您使用买方 SDK 呈现原生广告,那么在提交广告素材以供审核时,您必须在 declared_ad 中添加图片 type

原生广告模板

对于非视频广告和视频原生广告,Google 支持以下两种最常见的原生广告模板:

还有其他模板,这些模板可能对字段、维度和尺寸有不同的要求。

应用安装广告模板

下表显示了标记为必需建议的字段。 以下规则适用:

  • 标记为必需的字段为出价工具的必填字段。
  • 标记为 Recommended 的字段并非出价方的必填字段;如果提供,发布商不一定会显示这些字段(例如,星级)。
  • 号召性用语 (CTA) 始终被标记为 Recommended,因为如果出价工具未发送,则会分配默认号召性用语,但如果出价工具发送,则始终会显示该默认值。

下表列出了应用安装广告模板的字段。 移动应用会使用这些字段来制作原生应用安装广告。

字段 说明 必需或推荐? 始终显示? 建议的图片大小/字符数上限 示例
标题 应用名称 必需 25 个字符 Flood-It!
图片 应用的屏幕截图或其他相关图片 必需 1,200 像素 x 627 像素或 600 像素 x 600 像素,具体取决于发布商要求的宽高比。 <Flood-It! 游戏的屏幕截图>
Body 应用的主要文字 必需 90 个字符 看似简单 + 诱人挑战 = 令人欲罢不能!
应用图标 应用图标 必需 128 x 128 像素 <Flood-it! 应用图标>
号召性用语 首选用户操作 推荐 15 个字符 安装
星级 表示应用在应用商店中的评分的星标数 (0 - 5) 推荐 0 - 5 个 4.5
Price 应用的费用 推荐 15 个字符 免费

有关文本长度的注意事项

如果买方发送的文字素材资源(例如正文)超出建议的最大字符数,Google 或发布商可能会截断和省略文字。请注意,在中文、日语和韩语中,截断限制大小只有一半。例如,英文标题限制为 90 个,中文标题限制为 45 个。

关于图片大小的注意事项

发布商可以:

  • 对称剪裁主图片,在一个维度(高度或宽度)不超过 20%。
  • 缩放图片,而不更改其宽高比。
  • 如果图片的宽高比与高度和宽度所隐含的宽高比明显不同,则可能会被滤除。

内容广告模板

下表列出了内容广告模板的字段。发布商可以使用这些字段制作原生内容广告。

字段 说明 必需或推荐? 始终显示? 建议的图片大小/字符数上限 * 示例
标题 广告标题 必需 25 个字符 最低按揭贷款利率
图片 广告的主要图片 必需 1,200 像素 x 627 像素或 600 像素 x 600 像素,具体取决于发布商要求的宽高比。 <广告的主图片>
Body 广告内容 必需 90 个字符 布鲁克林的温馨家 - 价格更实惠,而且比你想象的要快!
徽标 广告客户的徽标或其他相关的小图片 推荐 128 x 128 像素 <NY Mortgage Inc. 的徽标>
号召性用语 用户的首选操作 推荐 15 个字符 获取报价
广告客户 标识广告客户或品牌的文字 必需 25 个字符 纽约抵押贷款公司

应用安装视频广告模板

字段 说明 必需或推荐? 始终显示? 建议的图片大小/字符数上限* 示例
视频 包含播放视频广告所需的所有素材资源的视频 VAST 响应。 必需 - 指向包含 Flood-It!视频广告
标题 应用名称 必需 25 个字符 Flood-It!
图片 点击视频广告前或视频广告加载时在播放器中显示的图片(缩略图)。 必需 应与视频的宽高比匹配(例如:16x9 视频为 1280x720,640x480 视频为 4x3)。 Flood-It! 游戏的屏幕截图或者在视频中
正文 应用的主要文字 必需 90 个字符 看似简单 + 诱人挑战 = 令人欲罢不能!
应用图标 应用图标 必需 128 x 128 像素 Flood-it! 应用图标
号召性用语 首选用户操作 必需 15 个字符 安装
星级 应用商店中代表应用评分的星标数 (0 - 5) 推荐 0 - 5 4.5
价格 应用的费用 推荐 15 个字符 免费

限制

  • 视频:所有视频都必须采用 VAST 网址或 VAST 代码的形式。无法指定 WebM、MP4 等原始视频文件。

  • 文本长度:如果买方在响应中指定了文本素材资源(例如 body),Google 或发布商可能会将其截断和省略。请注意,在中文、日语和韩语中,截断限制只有一半大小。例如,英文标题限制为 90 个字符,中文标题限制为 45 个字符。

  • 图片尺寸:发布商可以执行以下操作:

    • 对称裁剪主图片,方向各边最多裁剪 20%(高度或宽度)。
    • 缩放图片,而不更改其宽高比。

应用安装广告示例

原生视频广告素材

视频内容广告模板

字段 说明 必需或推荐? 始终显示? 建议的图片大小/字符数上限* 示例
视频 包含播放视频广告所需的所有素材资源的视频 VAST 响应。 必需 - 指向包含 Flood-It!视频广告
标题 广告标题 必需 25 个字符 最低按揭贷款利率
图片 点击视频广告前或视频广告加载时在播放器中显示的图片(缩略图)。 必需 应与视频的宽高比匹配(例如:16x9 视频为 1280x720,640x480 视频为 4x3)。 视频的屏幕截图
正文 广告内容 必需 90 个字符 布鲁克林的温馨家 - 价格更实惠,而且比你想象的要快!
徽标 广告客户的徽标或其他相关的小图片 推荐 128 x 128 像素 NY Mortgage Inc. 的徽标
号召性用语 用户的首选操作 必需 15 个字符 获取报价
广告客户 用于标识广告客户或品牌的文字 必需 25 个字符 NY Mortgage Inc.

元字段

所有支持的广告模板共享以下元字段:

Authorized Buyers 实时协议缓冲区 Authorized Buyers OpenRTB 等效项 说明
NativeAd.click_link_url Link.url 当用户点击广告时,浏览器会调用的网址。 可以是重定向链的第一步,该链最终会将用户引导至着陆页。对于原生广告,我们建议使用 click_link_url 作为字段来设置用户最终到达的目的地。如果使用动态着陆页,则必须使用此字段。
Ad.click_through_url Bid.adomain

如果出价方打算出价,则必须设置此字段。这是该代码段的一组目标网址,包括用户点击展示的广告后会进入的网址,以及在所呈现的广告中显示的所有网址。请勿添加与最终着陆页无关的对广告服务器的中间调用。返回代码段或视频广告但未声明任何 click_through_url 的 BidResponse 将被舍弃。请仅在设置了 html_snippetvideo_urlnative_ad 时才设置此字段。此类数据将用作目标网址声明,例如,对发布商屏蔽的网址进行后期过滤或对广告进行分类。在使用原生广告时,请参阅上文中的 NativeAd.click_link_url

对于非原生广告,它不用于点击跟踪或任何其他广告功能;它只用作目标网址声明。

对于原生广告,如果未设置 NativeAd.click_link_url,则系统会使用 click_through_url 的第一个值将用户引导至着陆页。此外,所有值都将用作目标网址声明(类似于非原生情况)。

NativeAd.click_tracking_urls Link.clicktrackers 可选。供广告客户跟踪用户点击广告的其他网址。
Ad.ad_choices_destination_url BidExt.ad_choices_destination_url 链接至广告偏好设置或选择停用页面。标准“广告选择”图标(如果存在)会添加到原生广告素材中,并链接到此网址。原生广告支持此属性,但出价响应中不包含原生消息。
Ad.impression_tracking_url NativeResponse.imptrackers 应使用 Authorized Buyers 实时出价协议中的 impression_tracking_url 或 OpenRTB 中的原生广告点击跟踪广告代码来跟踪原生展示。

required_fieldsrecommended_fields 由发布商指定。我们将展示如何转换这些位字段,以确定某个字段是必需字段还是建议字段。

位字段使用二进制值的每个位来存储一个 true 或 false 语句,相当于发送许多布尔信号(如 is_logo_requiredis_header_required 等),但所有这些信号都打包在一起。

示例

在此示例中,我们将使用 required_fields1085

首先,找到等效二元值10000111101

获得二进制值后,您可以检查各个位,了解某个字段是必需 (1) 还是不需要 (0)。

下表将这些字段映射到了它们在二进制值中的位置。从右到左读取二进制文件,其中 1 位对应于二进制值中最右边的位置。

字段 二进制值展示位置(从右到左)
HEADLINE 1
BODY 2
CALL_TO_ACTION 4
ADVERTISER 8
IMAGE 16
LOGO 32
APP_ICON 64
STAR_RATING 128
PRICE 256
STORE 512
VIDEO 1024

以示例二进制值 10000111101 为例,1 位(最右侧)是 1,表示必填值。根据该表,1 位对应于 HEADLINE

2 位(右边的第二个值)是 0,表示不需要。2 位对应于 BODY

以下是示例中所有经过解释的必填字段:

说明 是否必需?
1 VIDEO
0 STORE
0 PRICE
0 STAR_RATING
0 APP_ICON
1 LOGO
1 IMAGE
1 ADVERTISER
1 CALL_TO_ACTION
0 BODY
1 HEADLINE

NativeAdTemplate 消息

当收到包含原生广告资源的出价请求时,它将包含一个填充的 BidRequest.adSlot[].native_ad_templateNativeAdTemplate 消息提供了以下规范:

  • 必填字段或推荐字段。
  • 图片、徽标和应用图标的尺寸。
  • 广告呈现时所使用的样式规范。
message BidRequest {
  //...
  message AdSlot {
    //...

    message NativeAdTemplate {
      // Defines the bits used in required_fields and recommended_fields.
      // There is one bit for each of the fields in BidResponse.Ad.NativeAd
      enum Fields {
        NO_FIELDS = 0x0;
        HEADLINE = 0x1;
        BODY = 0x2;
        CALL_TO_ACTION = 0x4;
        ADVERTISER = 0x8;
        IMAGE = 0x10;
        LOGO = 0x20;
        APP_ICON = 0x40;
        STAR_RATING = 0x80;
        PRICE = 0x100;
        DEPRECATED_STORE = 0x200;
        VIDEO = 0x400;
      }

      // Bitfield describing which fields are required by the publisher. Bid
      // responses with no value for these fields will be rejected. Click
      // and view tracking urls are always implicitly required.
      optional int64 required_fields = 1;

      // Bitfield describing which fields are recommended by the publisher.
      // All recommended field are supported, but not all recommended fields
      // are required.
      optional int64 recommended_fields = 2;

      // max_safe_length indicates the maximum number of Unicode characters that
      // are guaranteed to be shown without truncation. Longer strings may be
      // truncated and ellipsized by Ad Exchange or the publisher during
      // rendering.
      optional int32 headline_max_safe_length = 3;
      optional int32 body_max_safe_length = 4;
      optional int32 call_to_action_max_safe_length = 5;
      optional int32 advertiser_max_safe_length = 6;
      optional int32 price_max_safe_length = 15;

      // The width and height from which to calculate the required aspect ratio.
      // You can provide a larger image in the response. Images that have aspect
      // ratios substantially different than those implied by the height and
      // width may be filtered.
      optional int32 image_width = 7;
      optional int32 image_height = 8;
      optional int32 logo_width = 9;
      optional int32 logo_height = 10;
      optional int32 app_icon_width = 11;
      optional int32 app_icon_height = 12;

      // Globally distinct id for the specific style, HTML, and CSS with which
      // the native ad is rendered.
      optional int32 style_id = 16;

      // Type of style layout for each native ad template.
      enum LayoutType {
        PIXEL = 0;
        FLUID = 1;
      }
      optional LayoutType style_layout_type = 17 [default = PIXEL];

      // If the style_layout_type is Pixel, width and height of the
      // entire native ad after rendering. If the style_layout_type is
      // Fluid, the style_height and style_width may optionally
      // not be populated.
      optional int32 style_height = 18;
      optional int32 style_width = 19;
    }
    repeated NativeAdTemplate native_ad_template = 51;
  }

    // NativePlacementType describes placement of native ad slot with respect to
    // surrounding context.
    enum NativePlacementType {
      PLACEMENT_UNKNOWN = 0;
      // In the feed of content - for example as an item inside the organic
      // feed/grid/listing/carousel.
      PLACEMENT_IN_FEED = 1;
      // In the atomic unit of the content - for example, in the article page or single
      // image page.
      PLACEMENT_ATOMIC_UNIT = 2;
      // Outside the core content - for example in the ads section on the right
      // rail, as a banner-style placement near the content, etc.
      PLACEMENT_OUTSIDE = 3;
      // Recommendation widget, most commonly presented below the article
      // content.
      PLACEMENT_RECOMMENDATION = 4;
    }

    optional NativePlacementType native_placement_type = 45;

  // ...
}

NativeAd 消息

对原生广告资源出价时,买方必须使用相应 BidRequest.adSlot[].native_ad_template 中声明的必填字段填充 BidResponse.ad[].native_ad

message BidResponse {
  //...
  message Ad {
    //...

    message NativeAd {
      // A short title for the ad.
      optional string headline = 1;

      // A long description of the ad.
      optional string body = 2;

      // A label for the button that the user is supposed to click.
      optional string call_to_action = 3;

      // The name of the advertiser or sponsor, to be displayed in the ad
      // creative.
      optional string advertiser = 4;

      // Next tag to use: 4
      message Image {
        optional string url = 1;

        // Image width and height are specified in pixels. You may provide a
        // larger image than was requested, so long as the aspect ratio is
        // preserved.
        optional int32 width = 2;
        optional int32 height = 3;
      }

      // A large image.
      optional Image image = 5;

      // A smaller image, for the advertiser's logo.
      optional Image logo = 6;

      // The app icon, for app download ads.
      optional Image app_icon = 7;

      // The video file. Only set this field if the video field is requested.
      oneof video {
        // The URL to fetch a video ad. The URL should return an XML response
        // that conforms to VAST standards.
        string video_url = 13;

        // The VAST document to be returned.
        string video_vast_xml = 16;
      }

      // The app rating in the app store. Must be in the range [0-5].
      optional double star_rating = 8;

      // The URL that the browser/SDK will load when the user clicks the ad.
      // This can be the landing page directly, or the first step of a redirect
      // chain that eventually leads to it. For backward compatibility, if this
      // is not set, the first Ad.click_through_url is used.
      optional string click_link_url = 14;

      // The URL to use for click tracking. The SDK pings click tracking url on
      // a background thread. When resolving the url, HTTP 30x redirects are
      // followed. The SDK ignores the contents of the response; this URL
      // has no effect on the landing page for the user.
      // This field is planned to be deprecated and we are moving to the
      // repeated click_tracking_urls field.
      optional string click_tracking_url = 11;

      // The URLs to use for click tracking. This will be used throughout the
      // serving stack and will incorporate any URL in click_tracking_urls.
      repeated string click_tracking_urls = 15;

      // The price of the promoted app including the currency info.
      optional string price = 10;

    };
    optional NativeAd native_ad = 18;

    // The set of destination URLs for the snippet. This includes the URLs that
    // the user will go to if they click on the displayed ad, and any URLs that
    // are visible in the rendered ad. Do not include intermediate calls to the
    // adserver that are unrelated to the final landing page. A BidResponse that
    // returns a snippet or video ad but declares no click_through_url will be
    // discarded. Only set this field if html_snippet or video_url or native_ad
    // are set. This data is used as a destination URL declaration, for example
    // for post-filtering of publisher-blocked URLs or ad categorization.
    //
    // For non-native ads, it is not used for click tracking or any
    // other ad functionality; it is only used as a destination URL
    // declaration.
    //
    // For native ads, if NativeAd.click_link_url is not set, the first
    // value of click_through_url is used to direct the user to the landing
    // page. In addition, all values are used as destination
    // URL declarations (similar to the non-native case).
    repeated string click_through_url = 4;

    //...

    // The URLs to call when the impression is rendered. The SDK pings
    // impression urls on a background thread and ignores the contents
    // of the response.
    repeated string impression_tracking_url = 19;

    // Link to ad preferences page. This is only supported for native ads.
    // If present, a standard AdChoices icon is added to the native ad creative and
    // linked to this URL.
    optional string ad_choices_destination_url = 21;
    // ...
  }
}

出价请求示例

非视频广告出价请求

Google

OpenRTB JSON

OpenRTB 协议缓冲区

视频广告出价请求

出价响应示例

请注意,这些响应中的值与上述相应请求并不相符。但是,如果请求中的模板建议必填字段/选填字段,则此处的响应符合这些要求。

非视频广告出价响应

Google

OpenRTB JSON

OpenRTB 协议缓冲区

视频广告出价响应数