IMA SDK 中的 Open Measurement

适用于 Android 的 IMA SDK 包含 Open Measurement (OM) SDK,这是由美国互动广告局 (IAB) 开发的业界标准,用于实现第三方可见度和验证衡量。使用适用于Android的 IMA SDK 时,随附的 OM SDK 会自动解析 VAST 广告代码中的 <AdVerifications> 代码,并通过 OMID API 将可见度数据发送到指定的衡量服务供应商。IMA SDK 支持 OM SDK v1.4、VAST 2 及更高版本上的 GAM AdVerifications 扩展程序,以及 VAST 4 及更高版本上的 AdVerifications 节点。要利用 Open Measurement,请注意以下几点:

  • 要使用 Open Measurement,您必须安装3.11.0 版或更高版本的 IMA SDK for Android。 但是,本指南中的示例是针对最新版本的 SDK 设计的,其中包含版本 3.16.5 中引入的 API。

  • 如果使用的是 VAST 4.1 及更高版本,则广告必须根据 VAST 4.1 规范配置为在 VAST 中对 <AdVerifications> 进行投放管理;否则,应使用 <Extension type="AdVerifications">

  • 避免使用任何叠加层(透明或不透明)遮盖 AdDisplayContainer,因为这些叠加层会被 OM SDK 标记为障碍,会降低可见度。

前提条件

测试

要使用 IMA SDK 测试 Open Measurement,请使用上述 SDK 的其中一个必需版本,以及一个测试广告代码

您应该会在 VAST 响应中看到返回的 <AdVerifications>

注册视频控件叠加层遮挡

暂停按钮或进度条等视频控件可为用户提供基本的播放信息和操作。在移动设备上,由于点按操作不精确以及用户的预期导致了在媒体元素上呈现便于触摸的大型控件,这种常见做法已成为一种常见做法。这些控件通常在用户点按时淡入和淡出,在绝大多数播放时间内都不可见。

以下是 YouTube 应用呈现的视频控件示例:

使用 IMA SDK 时,大多数发布商都是通过在大多为透明的广告展示容器上方添加一个视图来实现这些控件。通常情况下,控件是此视图的子元素,它会完全遮挡底层视频播放器。这个透明叠加层用于捕获点按事件,然后在用户点按时向其呈现控件。

通过 Open Measurement SDK 计算广告可见度时,叠加媒体元素的所有视图都会被视为障碍物,这会降低可见率。如果透明的点按叠加层位于整个广告展示容器上方,系统就可能会将广告资源声明为完全不可见。

Open Measurement SDK 将视频控件的相关规定视为对用户体验至关重要的“友好”遮挡。一旦注册为友好控件,这些控件就会从广告可见度衡量中排除。

支持 IAB 和 MRC 后,IMA SDK 引入了一个 API,用于向 Open Measurement SDK 注册这些叠加层。这些控件必须是完全透明的叠加层或小按钮。不得注册与视频控件无关的任何其他视图。

务必注册 不注册
  • 用于捕获用户点按的透明叠加层
  • 暂时性按钮
    • 暂停
    • 播放
    • 全屏
    • Cast/AirPlay
    • 收起
    • 进度/跳转
    • 其他与播放相关的操作
  • 水印
  • 弹出式窗口
  • 对话框
  • 非瞬态按钮
  • 其他遮挡视图

以下示例代码演示了如何在广告展示容器上注册视频控件叠加层:

myTransparentTapOverlay = (ViewGroup) rootView.findViewById(R.id.overlay);
myPauseButton = (ImageButton) rootView.findViewById(R.id.pauseButton);
// Substitute "myTransparentTapOverlay" and "myPauseButton" with the
// elements you want to register as video controls overlays.
// Make sure to register before ad playback starts.
overlayObstruction = ImaSdkFactory.createFriendlyObstruction(
  myTransparentTapOverlay,
  FriendlyObstructionPurpose.NOT_VISIBLE,
  "This overlay is transparent"
);
pauseButtonObstruction = ImaSdkFactory.createFriendlyObstruction(
  myPauseButton,
  FriendlyObstructionPurpose.VIDEO_CONTROLS,
  "This is the video player pause button"
);

displayContainer.registerFriendlyObstruction(overlayObstruction);
displayContainer.registerFriendlyObstruction(pauseButtonObstruction);

使用完这些障碍物后,可以通过调用以下方法移除这些障碍物:

displayContainer.unregisterAllFriendlyObstructions();