Digital Pre-Certification Checklist Browser SDK

From Engineering Client Portal

Revision as of 22:46, 28 September 2017 by RyanCarlson (talk | contribs) (got rid of stuff)

Pre-Certification Checklist - VOD with Ads

Before starting the certification process, please verify the following steps have been completed.

  • Your Client Service representative should have already discussed a reporting hierarchy with you -- along with a Parent, Brand, and Sub-brand/Channel
  • Your Technical Account Manager should have:
    • provided you with an APID
    • informed you of our Opt-Out requirement to be included in your Privacy Policy section of your site
    • informed you to add the Static Queue Snippit on each page you wish to enable video measurement
    • informed you that the apid, 'instanceName', and ‘nol_sdkDebug’ : ‘DEBUG’ should be present in the SDK initialization

Initialization

The first step in the Certification process is to ensure that the Nielsen SDK is initializing on page load, and that the global metadata values are present.

Keys Value
apid PXXXXX-XXXXXX-XXXXX-XXXXX
instanceName 'nlsnInstance'
nol_sdkDebug debug

Browser SDK Queue Snippit & Initialization Example

NSDictionary* appInformation = @
<script type="text/javascript">
  // Add Static Queue Snippet
 !function(t,n)
 {
   t[n]=t[n]||{nlsQ:function(e,o,c,r,s,i)
   {
    return s=t.document,
    r=s.createElement("script"),
    r.async=1,
    r.src=("http:"===t.location.protocol?"http:":"https:")+"//cdn-gl.imrworldwide.com/conf/"+e+".js#name="+o+"&ns="+n,
    i=s.getElementsByTagName("script")[0],
    i.parentNode.insertBefore(r,i),
    t[o]=t[o]||{g:c,ggPM:function(n,e,c,r,s){(t[o].q=t[o].q||[]).push([n,e,c,r,s])}},
    t[o]
   }
 }
} 
(window,"NOLBUNDLE");

  // Created SDK Instance
  var nSdkInstance = NOLBUNDLE.nlsQ("XXXXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX","nlsnInstance", {nol_sdkDebug: "debug"});
</script>

Test Cases

The following lists the test cases along with the Expected results:

Test Case Param Expected Result Pass/Fail
SDK Initialized apid Correct APID
instanceName SDK Instance Name
nol_sdkDebug 'DEBUG

loadMetadata() - Content

  • Called at beginning of content, or when resuming content from interruption
Test Param Example Value Accepted Values Pass/Fail
loadMetadata type "content" "content"
assetid "unique_id_500291" (unique per asset)
length "600" length in seconds (int or float)
title "Episode Title" (any non-empty value)
program "Show Name" (any non-empty value)
segB "Primetime" (any value), used for optional breakdown
segC "Comedy" (any value), used for optional breakdown
crossId1 "EP018S9S290015" Gracenote ID
crossId2 "ABC" Network Name
isfullepisode "y" ("y" or "n") ("Y" or "N")
airdate "20160206 23:00:00 "YYYYMMDD[space]HH:MM:SS" -- note: HH=24 hour time
adloadtype "1" "1" for linear ads, "2" for DAI
hasAds "1" "0" for no ads, "1" for has ads

loadMetadata() - ad

  • Called at beginning of ad, or when resuming ad from interruption
Test Param Example Value Accepted Values Pass/Fail
loadMetadata assetid "ad_2201343201" (any non-empty value)
type "midroll" "preroll", "midroll", "postroll" Example

setPlayheadPosition() - Preroll ad

  • Track current position of playhead
  • Starts at 0 at the beginning of ad
  • Updated at least once per second
  • Separate playhead position for ads and content, should accurately reflect current position in either ads or content
Test Case Test Condition Pass/Fail
setPlayehadPosition Called every second
stop() Called at the end of Ad

loadMetadata() - Content

  • Test is to validate Content metadata is the same as original metadata passed during initial loadMetadata call.
Test Param Example Value Accepted Values Pass/Fail
loadMetadata type "content" "content"
assetid "unique_id_500291" (unique per asset)
length "600" length in seconds (int or float)
title "Episode Title" (any non-empty value)
program "Show Name" (any non-empty value)
segB "Primetime" (any value), used for optional breakdown
segC "Comedy" (any value), used for optional breakdown
crossId1 "EP018S9S290015" Gracenote ID
crossId2 "ABC" Network Name
isfullepisode "y" ("y" or "n") ("Y" or "N")
airdate "20160206 23:00:00 "YYYYMMDD[space]HH:MM:SS" -- note: HH=24 hour time
adloadtype "1" "1" for linear ads, "2" for DAI
hasAds "1" "0" for no ads, "1" for has ads

setPlayheadPosition() - Content

  • Track current position of playhead
  • Starts at 0 at the beginning of content
  • Starts at 0 at the beginning of each ad
  • Updated at least once per second
  • Separate playhead position for ads and content, should accurately reflect current position in either ads or content
  • Final playhead position for content must equal the length specified in loadMetadata(), followed by end() call
Test Case Test Condition Pass/Fail
setPlayehadPosition Called every second
stop() Called at the end of each asset before transition ie. content to ad, ad to content, ad to ad

stop()

  • Indicates one of the following:
  • Playback of content or ad was interrupted
  • Reached end of ad

end()

  • Reached the end of content

Interruptions

  • All interruptions to playback of content or ads should trigger a call to stop(). Once the interruption is over, loadMetadata() with the same metadata should be called, followed by playheadPosition resuming from where it left off.
  • Interruptions include:
    • user-induced pause
    • screen turned off
    • refresh page
    • internet connection lost (n.b. cached playback plays as normal until it expires)
Test Case Test Condition Pass/Fail
user-induced pause stop(), loadMetadata() & playheadPosition
screen turned off stop(), loadMetadata() & playheadPosition
app sent to background stop(), loadMetadata() & playheadPosition
headphones removed stop(), loadMetadata() & playheadPosition
alarm/call interruption stop(), loadMetadata() & playheadPosition
internet connection lost stop(), loadMetadata() & playheadPosition
content paused playheadPosition is not passed
resume content loadMetadata() is called for content
loadMetadataM is the same as original
playheadPosition continues from resumed position


Expected SDK behavior for all interruptions:

  1. interruption triggers stop() call
  2. when content resumes, loadMetadata() is called with the same metadata that was playing previously (ad or content)
  3. playheadPosition() resumes from the same position before the interruption

Example session:

  • 5 minutes of content played, call interruption, content resumes until end of 15 min video

Scrubbing

Test Case Test Condition Pass/Fail
Scrub Backward new playhead position is accurate
new playhead continues from new position
Scrub Forward new playhead position is accurate
new playhead continues from new position
Scrub to end final playhead position is passed
end event called at completion of content playback
Scrub past midroll Playhead for content stops

Midroll & Postroll Ads

Test Case Test Condition Pass/Fail
loadMetadata() Called for each Ad
Required Metadata is accurate
playheadPosition Passed every second
stop() called for each ad
loadMetadata(), playheadPosition, stop() correct sequence for each ad

Opt-Out

The site must provide a means for the user to opt-out of or opt back into Nielsen measurement. Include the following two items in the site’s Privacy Policy:

  • A notice that the player includes proprietary measurement software that allows users to contribute to market research (such as Nielsen TV Ratings)
  • A link to the Nielsen Digital Measurement Privacy Policy at http://www.nielsen.com/digitalprivacy

The following paragraph is a template for an opt-out statement Our properties may feature Nielsen proprietary measurement software, which will allow you to contribute to market research, such as Nielsen TV Ratings. To learn more about the information that Nielsen software may collect and your choices with regard to it, refer to Nielsen Digital Measurement Privacy Policy at http://www.nielsen.com/digitalprivacy.