使用 IMA SDK 时,大多数发布商都会在广告展示容器上方添加一个大部分透明的视图,以实现这些控件。通常,控件是此视图的子元素,会完全遮挡底层视频播放器。此透明叠加层用于捕获点按事件,然后在用户点按时向用户呈现控件。
通过 Open Measurement SDK 计算广告可见度时,所有叠加在媒体元素上的视图都会被视为遮挡,并会降低可见度。如果透明点按叠加层位于整个广告展示容器上方,则广告资源可能会被声明为完全不可见。
Open Measurement SDK 提供了相应规定,将视频控件视为对用户体验至关重要的“友好”遮挡。注册为友好控制功能后,这些控制功能将从广告可见度衡量范围中排除。
IMA SDK 在获得 IAB 和 MRC 支持后,引入了一个 API,用于在 Open Measurement SDK 中注册这些叠加层。这些控件必须是完全透明的叠加层或小按钮。不得注册任何与视频控件无关的其他视图。
DO 寄存器
请勿注册
用于捕获用户点按的透明叠加层
暂时性按钮
暂停
播放
全屏
投屏/AirPlay
收起
进度/快进
与播放相关的其他操作
水印
弹出式窗口
对话框
非暂时性按钮
其他遮挡视图
以下示例代码演示了如何在广告展示容器上注册视频控件叠加层:
UIView*myTransparentTapOverlay=[[UIViewalloc]initWithFrame:CGRectMake(0,0,300,250)];UIButton*myPauseButton=[[UIButtonalloc]initWithFrame:CGRectMake(0,0,50,10)];// Substitute "myTransparentTapOverlay" and "myPauseButton" with the elements// you want to register as video controls overlays.// Make sure to register before ad playback starts.IMAFriendlyObstruction*overlayObstruction=[[IMAFriendlyObstructionalloc]initWithView:myTransparentTapOverlaypurpose:IMAFriendlyObstructionPurposeNotVisibledetailedReason:@"This overlay is transparent"];IMAFriendlyObstruction*pauseButtonObstruction=[[IMAFriendlyObstructionalloc]initWithView:myPauseButtonpurpose:IMAFriendlyObstructionPurposeMediaControlsdetailedReason:@"This is the video player pause button"];[displayContainerregisterFriendlyObstruction:overlayObstruction];[displayContainerregisterFriendlyObstruction:pauseButtonObstruction];
[null,null,["最后更新时间 (UTC):2025-08-31。"],[[["\u003cp\u003eThe IMA SDK for iOS integrates the Open Measurement (OM) SDK for third-party viewability and verification measurement, automatically sending data to specified vendors when \u003ccode\u003e<AdVerifications>\u003c/code\u003e tags are present in VAST ad tags.\u003c/p\u003e\n"],["\u003cp\u003eTo utilize Open Measurement, ensure you are using IMA SDK for iOS version 3.9.0 or higher and have configured your ads to include \u003ccode\u003e<AdVerifications>\u003c/code\u003e or \u003ccode\u003e<Extension type="AdVerifications">\u003c/code\u003e in their VAST responses.\u003c/p\u003e\n"],["\u003cp\u003eAvoid obstructing the \u003ccode\u003eAdDisplayContainer\u003c/code\u003e with overlays to prevent reduced viewability, but utilize the \u003ccode\u003eIMAFriendlyObstruction\u003c/code\u003e API to register essential video control overlays for accurate measurement.\u003c/p\u003e\n"],["\u003cp\u003eWhen registering friendly obstructions using \u003ccode\u003eIMAFriendlyObstruction\u003c/code\u003e, ensure the \u003ccode\u003edetailedReason\u003c/code\u003e string adheres to IAB standards by being 50 characters or less, containing only \u003ccode\u003eA-z\u003c/code\u003e, \u003ccode\u003e0-9\u003c/code\u003e, or spaces, and can optionally be nil.\u003c/p\u003e\n"]]],[],null,["The IMA SDK for iOS includes the\n[Open Measurement (OM) SDK](//iabtechlab.com/standards/open-measurement-sdk/),\nan industry standard developed by the\n[Interactive Advertising Bureau (IAB)](//www.iab.com/) to enable third-party\nviewability and verification measurement. When using the IMA SDK for\niOS, the included OM SDK automatically parses\nthe `\u003cAdVerifications\u003e` tag within VAST ad tags and sends viewability data to\nthe specified measurement vendors via the OMID API.The IMA SDK supports OM SDK\nv1.4, GAM AdVerifications extensions on VAST 2+,\nand the AdVerifications node on VAST 4+.To take advantage of Open Measurement,\nkeep the following points in mind:\n\n- To use Open Measurement you must have version\n 3.9.0 or greater of the\n IMA SDK for iOS.\n\n- Ads must be configured to traffic `\u003cAdVerifications\u003e` in their VAST as per\n the [VAST 4.1 spec](//iabtechlab.com/wp-content/uploads/2018/06/VAST4.1-June7-FINAL.pdf)\n if using VAST 4.1+; otherwise, `\u003cExtension type=\"AdVerifications\"\u003e`\n should be used.\n\n- Refrain from covering the `AdDisplayContainer` with any overlays\n (transparent or opaque), since these will be flagged as obstructions by the OM\n SDK and reduce viewability.\n\nPrerequisites\n\n- If your ads are trafficked through Ad Manager, [configure a viewability\n provider for your Ad Manager network](//support.google.com/admanager/answer/9025968#configure-a-viewability-provider) and assign that viewability provider to your line item.\n\nTesting\n\nTo test Open Measurement using the IMA SDK, use one of the required versions of\nthe SDK above, along with a [test ad tag](https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/omid_ad_samples&env=vp&gdfp_req=1&output=vast&sz=640x480&description_url=http%3A%2F%2Ftest_site.com%2Fhomepage&vpmute=0&vpa=0&vad_format=linear&url=http%3A%2F%2Ftest_site.com&vpos=preroll&unviewed_position_start=1&correlator=).\n\nYou should see the `\u003cAdVerifications\u003e` returned in your VAST response.\n\nRegister video controls overlay obstructions\n\nVideo controls such as pause buttons or progress bars provide essential playback\ninformation and actions to users. On mobile, imprecise taps and user\nexpectations have made it common practice to render large, touch-friendly\ncontrols over the media element. These controls usually fade in and out on a\nuser tap and are not visible for the vast majority of playback time.\n\nBelow is an example of video controls rendered by the YouTube app:\n\nWhen using the IMA SDK, most publishers implement these controls by adding a\nview above the ad display container that is mostly transparent. Usually, the\ncontrols are child elements of this view that fully occludes the underlying\nvideo player. This transparent overlay is used to capture tap events and then\nrender the controls to users when tapped.\n\nWhen ad viewability via the Open Measurement SDK is calculated, all views\noverlaying the media element are considered obstructions and reduce the\nviewability rate. In the case where a transparent tap overlay sits above the\nentire ad display container, it is possible for inventory to be declared\ncompletely unviewable.\n\nThe Open Measurement SDK makes provisions for video controls to be considered\n\"friendly\" obstructions that are essential to the user's experience. Once\nregistered as friendly, these controls are excluded from ad viewability\nmeasurement.\n\nWith IAB and MRC support, the IMA SDK introduces an API for registering these\noverlays with the Open Measurement SDK. These controls must be fully transparent\noverlays or small buttons. Any other views not related to video controls must\nnot be registered.\n\n| DO register | DO NOT register |\n|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|\n| - Transparent overlay to capture user taps - Transient buttons - Pause - Play - Fullscreen - Cast/AirPlay - Collapse - Progress/Seek - Other playback relevant actions | - Watermarks - Pop ups - Dialogs - Non-transient buttons - Other obscuring views |\n\nThe following sample code demonstrates how to register video controls overlays\non the ad display container:\n\n\n| **Key Point:** The `detailedReason` string used when creating a [`IMAFriendlyObstruction`](/interactive-media-ads/docs/sdks/ios/client-side/reference/Classes/IMAFriendlyObstruction#detailedreason) must follow the IAB standard by:\n|\n| - Being 50 characters or less.\n| - Only contain characters `A-z`, `0-9`, or spaces\n- The string can be nil. \n\n UIView *myTransparentTapOverlay = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 250)];\n UIButton *myPauseButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 50, 10)];\n // Substitute \"myTransparentTapOverlay\" and \"myPauseButton\" with the elements\n // you want to register as video controls overlays.\n // Make sure to register before ad playback starts.\n IMAFriendlyObstruction *overlayObstruction =\n [[IMAFriendlyObstruction alloc] initWithView:myTransparentTapOverlay\n purpose:IMAFriendlyObstructionPurposeNotVisible\n detailedReason:@\"This overlay is transparent\"];\n IMAFriendlyObstruction *pauseButtonObstruction =\n [[IMAFriendlyObstruction alloc] initWithView:myPauseButton\n purpose:IMAFriendlyObstructionPurposeMediaControls\n detailedReason:@\"This is the video player pause button\"];\n\n [displayContainer registerFriendlyObstruction:overlayObstruction];\n [displayContainer registerFriendlyObstruction:pauseButtonObstruction];\n\nWhen you're done with them, these obstructions can be removed by calling the\nfollowing method:\n\n [displayContainer unregisterAllFriendlyObstructions];\n\n| **Note:** For information on measurement and verification providers that have committed to the development of this new viewability standard, see the [IAB open measurement documentation](//iabtechlab.com/working-groups/open-measurement-working-group/)."]]