适用于 iOS 的 IMA SDK 包含
Open Measurement (OM) SDK,
这是由
美国互动广告局 (IAB) 开发的业界标准,用于实现第三方
可见度和验证衡量。使用适用于 iOS 的 IMA SDK 时,其中包含的 OM SDK 会自动解析 <AdVerifications> 标记,并使用 OMID API 将可见度数据发送给指定的衡量供应商。IMA SDK 支持 OM SDK v1.4、VAST 2+ 上的 GAM AdVerifications 扩展程序,以及 VAST 4+ 上的 AdVerifications 节点。如需利用 Open Measurement,请注意以下几点:
如需使用 Open Measurement,您必须拥有适用于 iOS 的 IMA SDK 3.9.0 或更高版本 。
如果使用 VAST 4.1+,则必须按照 VAST 4.1 规范 将广告配置为在 VAST 中投放
<AdVerifications>;否则,应使用<Extension type="AdVerifications">。请勿使用任何叠加层(透明或不透明)覆盖
AdDisplayContainer,因为这些叠加层会被 OM SDK 标记为遮挡,并降低可见度。
前提条件
- 如果您的广告是通过 Ad Manager 投放的,请为您的 Ad Manager 广告资源网配置可见度 提供商 ,并将该可见度提供商分配给您的订单项。
测试
如需使用 IMA SDK 测试 Open Measurement,请使用支持 OM SDK 的 IMA 版本以及 测试广告代码。
您应该会在 VAST 响应中看到返回的 <AdVerifications>。
注册视频控件叠加层遮挡
视频控件(例如暂停按钮或进度条)可为用户提供基本的播放信息和操作。在移动设备上,由于用户可能会不小心点按,以及用户期望在媒体元素上呈现大型、易于点按的控件,因此在媒体元素上呈现大型、易于点按的控件已成为一种常见做法。这些控件通常会在用户点按时淡入和淡出,并且在大部分播放时间内都不可见。
如需查看视频控件叠加层的示例,请参阅 YouTube 应用呈现控件的下图:

使用 IMA SDK 时,大多数发布商都会通过在广告展示容器上方添加一个大部分透明的视图来实现这些控件。通常,这些控件是此视图的子元素,它们会完全遮挡底层的视频播放器。此透明叠加层用于捕获点按事件,然后在点按时向用户呈现控件。
在使用 Open Measurement SDK 计算广告可见度时,叠加在媒体元素上的所有视图都会被视为遮挡,并降低可见率。如果透明点按叠加层位于整个广告展示容器上方,则广告资源可能会被声明为完全不可见。
Open Measurement SDK 规定,视频控件应被视为对用户体验至关重要的“友好”遮挡。注册为友好遮挡后,这些控件将从广告可见度衡量中排除。
在 IAB 和 MRC 的支持下,IMA SDK 引入了一个 API,用于向 Open Measurement 衡量 SDK 注册这些叠加层。这些控件必须是完全透明的叠加层或小按钮。不得注册与视频控件无关的任何其他视图。
| 应注册 | 不应注册 |
|---|---|
|
|
以下示例代码演示了如何在广告展示容器上注册视频控件叠加层:
Objective-C
- (void)registerObstructionsForContainer:(IMAAdDisplayContainer *)displayContainer {
UIView *transparentTapOverlay = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 250)];
UIButton *myPauseButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 50, 10)];
IMAFriendlyObstruction *overlayObstruction =
[[IMAFriendlyObstruction alloc] initWithView:transparentTapOverlay
purpose:IMAFriendlyObstructionPurposeNotVisible
detailedReason:@"This overlay is transparent"];
IMAFriendlyObstruction *pauseButtonObstruction =
[[IMAFriendlyObstruction alloc] initWithView:myPauseButton
purpose:IMAFriendlyObstructionPurposeMediaControls
detailedReason:@"This is the video player pause button"];
[displayContainer registerFriendlyObstruction:overlayObstruction];
[displayContainer registerFriendlyObstruction:pauseButtonObstruction];
}
Swift
func registerObstructions(displayContainer: IMAAdDisplayContainer) {
let transparentTapOverlay = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 250))
let myPauseButton = UIButton(frame: CGRect(x: 0, y: 0, width: 50, height: 10))
let overlayObstruction = IMAFriendlyObstruction(
view: transparentTapOverlay,
purpose: .notVisible,
detailedReason: "This overlay is transparent")
let pauseButtonObstruction = IMAFriendlyObstruction(
view: myPauseButton,
purpose: .mediaControls,
detailedReason: "This is the video player pause button")
displayContainer.register(overlayObstruction)
displayContainer.register(pauseButtonObstruction)
}
使用完毕后,可以通过调用以下方法移除这些遮挡:
Objective-C
- (void)unregisterObstructionsForContainer:(IMAAdDisplayContainer *)displayContainer {
// This removes all previously registered friendly obstructions from the container.
[displayContainer unregisterAllFriendlyObstructions];
}
Swift
func unregisterObstructions(displayContainer: IMAAdDisplayContainer) {
// This removes all previously registered friendly obstructions from the container.
displayContainer.unregisterAllFriendlyObstructions()
}