Open Measurement in the IMA SDK

The IMA SDK for iOS now includes the Open Measurement SDK, an industry standard developed by the IAB and designed to enable third-party viewability and verification measurement for ads served to mobile and desktop environments. To take advantage of Open Measurement, keep the following points in mind:

  • To use Open Measurement you must have version 3.9.0 or greater of the IMA SDK for iOS.

  • Ads must be configured to traffic <AdVerifications> in their VAST as per the VAST 4.1 spec if using VAST 4.1+; otherwise, <Extension type="AdVerifications"> should be used.

  • Refrain from covering the AdDisplayContainer with any overlays (transparent or opaque), since these are flagged as obstructions by the OM SDK and reduce viewability.


If your ads are trafficked through Ad Manager, configure a viewability provider for your Ad Manager network and assign that viewability provider to your line item.


To test Open Measurement using the IMA SDK, use one of the required versions of the SDK above, along with a test ad tag.

To simulate a full request from a browser, you need to include the (dc_)omid_p and (dc)sdk_apis ad tag parameters. These parameters are included automatically for mobile requests.

You should see the <AdVerifications> returned in your VAST response.

Register video controls overlay obstructions

Video controls such as pause buttons or progress bars provide essential playback information and actions to users. On mobile, imprecise taps and user expectations have made it common practice to render large, touch-friendly controls over the media element. These controls usually fade in and out on a user tap and are not visible for the vast majority of playback time.

Below is an example of video controls rendered by the YouTube app:

When using the IMA SDK, most publishers implement these controls by adding a view above the ad display container that is mostly transparent. Usually, the controls are child elements of this view that fully occludes the underlying video player. This transparent overlay is used to capture tap events and then render the controls to users when tapped.

When ad viewability via the Open Measurement SDK is calculated, all views overlaying the media element are considered obstructions and reduce the viewability rate. In the case where a transparent tap overlay sits above the entire ad display container, it is possible for inventory to be declared completely unviewable.

The Open Measurement SDK makes provisions for video controls to be considered "friendly" obstructions that are essential to the user’s experience. Once registered as friendly, these controls are excluded from ad viewability measurement.

With IAB and MRC support, the IMA SDK introduces an API for registering these overlays with the Open Measurement SDK. These controls must be fully transparent overlays or small buttons. Any other views not related to video controls must not be registered.

DO register DO NOT register
  • 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

The following sample code demonstrates how to register video controls overlays on the ad display container:

UIView *myTransparentTapOverlay = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 250)];
UIButton *myPauseButton = [[UIButton alloc] 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 =
      [[IMAFriendlyObstruction alloc] initWithView:myTransparentTapOverlay
                                    detailedReason:@"Transparent overlay does not impact viewability"];
IMAFriendlyObstruction *pauseButtonObstruction =
      [[IMAFriendlyObstruction alloc] initWithView:myPauseButton
                                    detailedReason:@"Pause button"];

[displayContainer registerFriendlyObstruction:overlayObstruction];
[displayContainer registerFriendlyObstruction:pauseButtonObstruction];

When you're done with them, these obstructions can be removed by calling the following method:

[displayContainer unregisterAllFriendlyObstructions];