Open Measurement in the IMA DAI SDK

The IMA SDK for Android includes the Open Measurement (OM) SDK, an industry standard developed by the Interactive Advertising Bureau (IAB) to enable third-party viewability and verification measurement. When using the IMA SDK for Android, the included OM SDK automatically parses the <AdVerifications> tag within VAST ad tags and sends viewability data to the specified measurement vendors via the OMID API.The IMA SDK supports OM SDK v1.4, GAM AdVerifications extensions on VAST 2+, and the AdVerifications node on VAST 4+.To take advantage of Open Measurement, keep the following points in mind:

  • To use Open Measurement you must have version 3.11.0 or greater of the IMA SDK for Android. However, the sample in this guide is designed for the newest version of the SDK and includes APIs introduced in version 3.16.5.

  • 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 will be flagged as obstructions by the OM SDK and reduce viewability.

Prerequisites

Testing

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

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:

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);

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

displayContainer.unregisterAllFriendlyObstructions();