DCR Pre-Certification Checklist: Difference between revisions

From Engineering Client Portal

No edit summary
No edit summary
 
(4 intermediate revisions by 3 users not shown)
Line 80: Line 80:


== Digital Content Rating (DCR) Metadata ==
== Digital Content Rating (DCR) Metadata ==
Use the monitoring tools and the device logs to view the following DCR metadata keys to ensure all parameters are being passed accordingly. Tag Parameters are listed in here: Section 5 [[INSERT LINK TO PORTION OF THIS GUIDE THAT CONTAINS THESE INSTRUCTIONS]].
Use the monitoring tools and the device logs to view the following DCR metadata keys to ensure all parameters are being passed accordingly. Tag Parameters are listed in here: [[DCR_Pre-Certification_Checklist#Tag_Parameters]].


== DCR Metadata - Content ==
== DCR Metadata - Content ==
Line 103: Line 103:
| title || Episode Title || Descriptive of the content, should align with TV where applicable || <code>Big Bang Theory - S2 - E1</code> || &tl
| title || Episode Title || Descriptive of the content, should align with TV where applicable || <code>Big Bang Theory - S2 - E1</code> || &tl
|-
|-
| assetid || Asset ID || Unique in-house ID assigned to Content and Ads || <code>XID345-67483</code> || &ch
| assetid || Asset ID || Unique in-house ID assigned to Content and Ads (no [[Special Characters]])|| <code>XID345-67483</code> || &ch
|-
|-
| isfullepisode || Full Episode Flag || To distinguish between full episodic and non-full episodic content for reporting
| isfullepisode || Full Episode Flag || To distinguish between full episodic and non-full episodic content for reporting
Line 111: Line 111:
| &c53
| &c53
|-
|-
| length || Length || Length of content in seconds minus ads. For live content, use "86400" (number of seconds in 24 hours) || <code>3600</code> || &sd
| length || Length || Length of content in seconds minus ads. For live content, use "0" || <code>3600</code> || &sd
|-
|-
| segA || Segment A || Client customized metadata – Static Only || <code>CustomSegmentValueA</code> || &c32
| segA || Segment A || Client customized metadata – Static Only || <code>CustomSegmentValueA</code> || &c32
Line 230: Line 230:
| &ch || Channel Asset - Channel Asset is not one to one mapping to content id. One channel asset can have multiple content IDs. || SDK || Dynamic ||  
| &ch || Channel Asset - Channel Asset is not one to one mapping to content id. One channel asset can have multiple content IDs. || SDK || Dynamic ||  
|-
|-
|&asn || Site Section || Client || Dynamic ||
|&asn || Site Section/Asset Name || Client || Dynamic ||
|-
|-
|&tl || Episode Title || Client || Dynamic ||
|&tl || Episode Title || Client || Dynamic ||
Line 473: Line 473:
#Video end time.
#Video end time.
|
|
#Opt-out page should be available in all the supported languages in the App Store description. The URL to this webpage should be called from the SDK and opened in webview within the App.
#Opt-out page should be available in all the supported languages - The URL to this webpage should be called from the SDK and opened in webview within the App.
#'''Goodbye ping''' fires with '''uoo=true''' upon opt-out. Pings will still fire, but will be discarded on Nielsen's backend.  
#'''Goodbye ping''' fires with '''uoo=true''' upon opt-out. Pings will still fire, but will be discarded on Nielsen's backend.  
#'''Hello ping''' fires with '''uoo=false''' when opted back in and play resumes. New set of '''V/D''' pings should fire for 5 minutes of streaming.
#'''Hello ping''' fires with '''uoo=false''' when opted back in and play resumes. New set of '''V/D''' pings should fire for 5 minutes of streaming.

Latest revision as of 15:24, 6 April 2023

Engineering Portal / Digital / DCR & DTVR / DCR Pre-Certification Checklist

App Pre-Certification Checklist

The purpose of this document is to provide instruction on determining if your implementation of Digital Content Ratings (DCR) via App is ready to be submitted for certification. This document provides you the ability understand what is expected after implementation and before submitting to Nielsen. After all checks in this document are completed and passed, your Digital Implementation Manager (DIM) will further assess the implementation’s readiness for certification.

Before You Start

Item
For testing, your AppID should start with a "P" and your sfcode should be set to "dcr-cert".
The opt-out/opt-in functionality has been implemented within your App.
Ensure the AppSDK initializes and the API events are enabled for DCR.
Ensure stop API for all scenarios where the video could be interrupted (e.g., alerts, alarm, calendar, incoming calls, killing the app, channel change, stop/pause, background/foreground, etc.).
Android:setPlayheadPosition).
Record the Device Identifier of your test device for your Digital Implementation Manager. See DCR_Pre-Certification_Checklist#Obtaining Your Device Identifier.
Ensure that all content is consistently available and CMS enabled. Any interruptions or intermittence in the flow will cause delays in the testing process for all parties involved.

Monitoring Tools

You will need an HTTP traffic-monitoring tool, such as Charles or Fiddler.

Testing Your App Implementation

Capture Traffic

To capture traffic from the SDK, filter HTTP traffic with the string "imr", as seen in Figure 1. This will capture traffic going to Nielsen servers. You will then need to set up your device to proxy to this traffic analyzer. Instructions may vary from device to device and are available online.

  • Charles: View → Focused Hosts

FocusedHostsScreenshot.png

  • Fiddler: Filters (tab)

fiddlerScreenshot.png

Ensure opt-in

If you previously tested the opt-out function or app disable feature, make sure that an opt-in was completed on your device before continuing. Terminate your app completely before starting.

"Hello" Ping

The first HTTPS traffic you should see is the SDK request for configuration information, called a "hello ping". An example has been included below. In order to see this ping, Charles/Fiddler has to be configured to capture HTTPS traffic. This ping will be cached in memory, so it will be seen only on the first launch of the app or when metadata changes.

https://secure-dcr-cert.imrworldwide.com/cgi-bin/cfg?cfgv=300&bldv=aa.5.1.1.4&apid=<yourappid>&apv=.54120&apn=XXX&bid=com.sample.osmpSamplePlayer&sdkv=aa.5.1.1&nuid=bffd02d414622b36801fe547fba9acef83239fd062d50e0ab76e9eeb306d34b5&osver=ANDROID.4.4.2&devtypid=samsung-SM-T230NU&devid=47e100d36744f745ef04c17799f92bfc42840533a2267589149f2c0395829555&enc=true&fmt=json&adf=&uoo=&longitude=&latitude=&tz=-14400&locale=en_US&lang=en&ccode=1&dma=&sfcode=dcr-cert&sendTime=1470591848&rnd=1470591848353

Static

When you start your app after fresh install, and your app is measuring DCR Static content only, you should see a DCR static "app launch" known as "L" ping firing to secure-dcr-cert.imrworldwide.com server in your traffic-monitor. However, the "L" ping will be observed again if app goes into background and resumes back after 5 minutes.

https://secure-dcr-cert.imrworldwide.com/cgi-bin/gn?prd=dcr&ci=APRP7&ch=APRP7_NA_defChnAsset&asn=defChnAsset&tl=&c6=vc,NA&c13=asid,<yourappid>&c32=segA,&c33=segB,&c34=segC,&c15=apn,MTVR-APT-QA&sup=0&segment2=539&segment1=usa&forward=1&ad=1&cr=L&c9=devid,a69983bc65ad94f9e57109fec68cc847bf59575ee03cadb76b187f4c24eaf793&enc=true&c1=nuid,142a40706f9c03bfea020f7297828534a1f14895d7a8c5303d9b8a19b3337c13&r=&at=launch&rt=text&c16=sdkv,aa.4.0.0&c27=cln,473&crs=0&si=&lat=28.0 9&lon=-82.76&c29=plid,XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&c30=bldv,aa.4.0.0.3&st=dcr&c7=osgrp,DROID&c8=devgrp,TAB&c10=plt,MBL&c40=adbid,&c14=osver,ANDROID.4.4.4&c26=1&c35=&c36=cref1,&c37=cref2,&c11=agg,1&c12=apv,apt.4.0.0.3&h33=2&c51=adl,0&c52=noad,0&devtypid=asus-Nexus-7&rnd=1432529128693

If your app is measuring DCR Video Content only, the "L" ping will not be observed upon app launch, only the “hello ping” will fire.

Static "view" ping

For any sections that are tagged for static content, you should receive a DCR Static "view" ping. The first landing page should always be tagged. An example of this ping:

https://secure-dcr-cert.imrworldwide.com/cgi-bin/gn?prd=dcr&ci=APRP7&ch=APRP7_NA_defChnAsset&asn=defChnAsset&tl=&c6=vc,NA&c13=asid,<yourappid>&c32=segA,&c33=segB,&c34=segC,&c15=apn,MTVR-APT-QA&sup=0&segment2=539&segment1=usa&forward=1&ad=1&cr=V&c9=devid,a69983bc65ad94f9e57109fec68cc847bf59575ee03cadb76b187f4c24eaf793&enc=true&c1=nuid,142a40706f9c03bfea020f7297828534a1f14895d7a8c5303d9b8a19b3337c13&r=&at=view&rt=text&c16=sdkv,aa.4.0.0&c27=cln,0&crs=0&si=&lat=&lon=&c29=plid,XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&c30=bldv,aa.4.0.0.1&st=dcr&c7=osgrp,DROID&c8=devgrp,TAB&c10=plt,MBL&c40=adbid,&c14=osver,ANDROID.4.4.4&c26=1&c35=&c36=cref1,&c37=cref2,&c11=agg,1&c12=apv,apt.4.0.0.2&h33=2&c51=adl,0&c52=noad,0&devtypid=asus-Nexus-7&rnd=1432068181560

Video

"cr" Value

Approximately 60 seconds into viewing of your stream, you should see a DCR Video "view" ping fire to secure-dcr-cert.imrworldwide.com server indicated by the cr value containing a "V" in the format of 4__00_99_V1_00000. The significant values are highlighted below in Table 2.

Duration Ping

The first duration ping is fired after you’ve viewed 5 minutes of content. You should see a DCR Video "duration" ping fire to secure-dcr-cert.imrworldwide.com indicated by the cr value containing a "D" in the format of 4_00_99_D1_11111. This “D” ping should fire approximately every 5 minutes after this initial duration ping has fired or when the content switches to an advertisement The ad length (c51) is the total ad duration viewed in the previous session, and the ad count (c52) is the number of ads viewed in previous segment. The significant values are highlighted below in Table 3.

View 5 minutes

View all channels for 5 minutes to ensure all channels fire a "duration" ping.

Duration Ping

Play a stream and move the app to the background. A pending "duration" ping should fire; crediting the appropriate number of minutes viewed from last ping (i.e. 4_00_99_D1_11100). No other pings should fire after it has been moved to the background. In case SDK does not get a chance to send out the ping while going to background, SDK will send the pending ping on next re-launch.

Interruption

The same action will occur with any interruption to the stream’s playback (e.g., alarm, incoming call, etc.).

Digital Content Rating (DCR) Metadata

Use the monitoring tools and the device logs to view the following DCR metadata keys to ensure all parameters are being passed accordingly. Tag Parameters are listed in here: DCR_Pre-Certification_Checklist#Tag_Parameters.

DCR Metadata - Content

Key Description Purpose Example Tag Parameters
apid App ID This value should contain your AppID supplied by Nielsen asid,XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX &c13
clientid Parent Client ID Value is automatically populated through the AppID supplied by Nielsen us-123456 &ci
subbrand Sub-Brand (VCID) This value is automatically populated through the AppID, which is Nielsen supplied b01 &c6
type Type of Asset To distinguish between video content or static web
  • content = Video measurement
  • static = static (websites, etc.)
&rt
program Program Name Descriptive of the content, should align with TV where applicable Big Bang Theory &cg
title Episode Title Descriptive of the content, should align with TV where applicable Big Bang Theory - S2 - E1 &tl
assetid Asset ID Unique in-house ID assigned to Content and Ads (no Special Characters) XID345-67483 &ch
isfullepisode Full Episode Flag To distinguish between full episodic and non-full episodic content for reporting
  • y = Full Episode
  • n = Not full Episode (Clip)
&c53
length Length Length of content in seconds minus ads. For live content, use "0" 3600 &sd
segA Segment A Client customized metadata – Static Only CustomSegmentValueA &c32
segB Segment B Client customized metadata (e.g., genre, category) CustomSegmentValueB &c33
segA Segment A Client customized metadata (e.g., genre, category) CustomSegmentValueC &c34
adloadtype Ad load type The type of ad load
  • 1 = Linear (Match ad load)
  • 2 = Dynamic Ad Insertion (DAI)
&c57
airdate Air date Original air date and time in Eastern Time in US. For all other countries, it should be local time YYYY HH:MM:SS (HH=24 hour) &c54

If this ping fails to fire, a common cause is improper metadata being passed to the SDK. Examples of the proper metadata to be passed in the loadMetadata() API call can be found in the Developer's Guide

Test Case for Ad Measurement Metadata

The measurement of ad metadata is a playback program content that contains advertising that has had ad metadata correctly integrated (e.g., preroll, midroll and postroll). The /gn pings signify DCR, and it will fire with each instance, which should render the correct values for the advertising played in the c51 (ad duration) and c52 (ad count) parameters.

  • c51=adl, number of seconds ads played
  • c52=noad, number of individual ads

Note: these parameters are only populated on a D ping following an ad break

Below is an example of a content that was played for 4 minutes with a 28 second ad. https://secure-dcr-cert.imrworldwide.com/cgi-bin/gn?prd=dcr&ci=us-500207&ch=us-500207_c77&asn=defChnAsset&tl=Big%20Buck%20Bunny&prv=1&c6=vc,c77&ca=us-500207_c77_2015Q2&cg=MyProgram&c13=asid,TBF0638A2-XXXX-XXXX-XXXXF45A0DA3B47C&c32=segA,&c33=segB,&c34=segC,&c15=apn,SDK%20Sample%20Player&sup=1&segment2=539&segment1=usa&forward=0&ad=1&cr=4_00_99_D1_11110&c9=devid,42ec6a26b000ccd34015ba8625ee29cd283190a8c00f1622f356e900bb5b2a23&enc=true&c1=nuid,00b5926fea1807638ebfe6f04af6a455c5d9b2a1ed3e39f550f44daa39d0886d&at=timer&rt=video&c16=sdkv,aa.4.0.0&c27=cln,216&crs=0&si=&lat=&lon=&c29=plid,TBF0638A2-XXXX-XXXXXXXF45A0DA3B47C&c30=bldv,aa.4.0.0.5&st=dcr&c7=osgrp,DROID&c8=devgrp,TAB&c10=plt,MBL&c40=adbid,&c14=osver,ANDROID.4.4.4&c26=dmap,1&dd=&hrd=&wkd=&c35=adrsid,&c36=cref1,&c37=cref2,&c11=agg,1&c12=apv,1.0.1.4.1&h33=2&c51=adl,28&c52=noad,1&sd=&devtypid=samsung-SAMSUNG-SM-N910A&rnd=1434634421194

Once your app has passed all the test cases and scenarios referenced in this pre-certification checklist, we’re confident that it will also pass Nielsen’s certification process. Upon completion of the checklist, please submit the test results (i.e., monitor logs, worksheet, and test app) to your Nielsen Digital Implementation Manager for certification.

DCR Metadata - AD

Key Description Example
type Type of Ad preroll, midroll, postroll
assetid Unique ID assigned to the ad XID345-67483

Total Content Ratings (TCR) Metadata

Total Content Ratings (TCR)

Total Content Ratings (TCR) provides content measurement on TV and Digital. Bringing together TV and Digital measurement in reporting requires maintaining consistent metadata for your content where it is offered.

DCR

DCR is a key component to measuring viewing on digital platforms. There are a number of DCR metadata keys that are crucial to TCR measurement. The following table provides guidance on the values that are expected to be passed in the required metadata keys that will be used or TCR.

TCR Metadata

Key Description Purpose Example
program Program Name Program name must be identical to program name passed in TV metadata. It is recommended to use the metadata registered in Nielsen TV Names systems (myEVNTS/myVOD). If Nielsen TV Names systems are not used, then you may use the name registered with a 3rd party television listing service. Big Bang Theory
title Episode Title Episode name must be identical to episode name passed in TV metadata. It is recommended to use the metadata registered in Nielsen TV Names systems (myEVNTS/myVOD). If Nielsen TV Names systems are not used, then you may use the name registered with a 3rd party television listing service. Big Bang Theory - S2 - E1 – LF
airdate Airdate The date the episode was first made available on TV. This value is used as the default episode name when the episode metadata is not available. YYYY HH:MM:SS (HH=24 hour)
isfullepisode Full Episode Flag To distinguish between full episodic and non-full episodic content for reporting. Full Episodes are eligible for TCR reporting. A value of "y" should be passed to identify full episodes.
  • y = Full Episode
  • n = Not full Episode (Clip)
crossId1 Cross Reference ID1 Standard Episode ID - The ID should be a unique value for each episode. You can use the episode ID that is registered through Nielsen TV Names systems (myEVNTS/myVOD) or a 3rd party television listing service. (i.e., Gracenote/Tribune ID, Enterprise ID) gNID123
crossId2 Cross Reference ID2 Content Originator ID - The ID is used to identify the originator of the content. This value is only required for distributors. Distributors will be provided a listing of content originator IDs from Nielsen that should be passed for secondary crediting. Required for Distributors ABC

Passing Metadata

The required metadata can be passed as key-values through the loadMetadata() method. All values should be passed as strings. The sample code below shows a metadata JSON object for a video and static asset:

Video Asset Example

jsonMetadata={
 type: "content",
 assetid: "VID345-67483",
 isfullepisode: "y",
 program: "programName",
 title: "Program S3 - EP1",
 length: "3600",
 segB: "segmentB",
 segC: "segmentC",
 crossId1: "CS-1",
 crossId2: "CS-2",
 airdate: "20161013 20:00:00",
 adloadtype: "2",
 mediaURL: "http://../exampledomain.com",
 hasAds: "1"
};

Static Asset Example

jsonMetadata={
 type: "static",
 assetid: "SID724-38054",
 section: "App Section",
 segA: "segmentA",
 segB: "segmentB",
 segC: "segmentC"
};

Ad Asset Example

jsonMetadata={
 type: "preroll",
 assetid ad: "AD361-84413"
};

Tag Parameters

Parameter Description Supplier Data Type Value
&ci Client ID Nielsen Static
&ch Channel Asset - Channel Asset is not one to one mapping to content id. One channel asset can have multiple content IDs. SDK Dynamic
&asn Site Section/Asset Name Client Dynamic
&tl Episode Title Client Dynamic
&c6 Sub-Brand Nielsen Static dcr,
&ca Content ID - unique ID generated by SDK based on ci, vcid, and the metadata for the Asset ID. SDK Dynamic
&cg Program Name Client Dynamic
&c13 App ID - A Nielsen ID for player/site/app assigned when onboarding. The client ID and sub-brand values are configured to the App ID. Nielsen Static asid,
&c32 Segment A Client Dynamic segA,
&c33 Segment B Client Dynamic segB,
&c34 Segment C Client Dynamic segC,
&c15 App Name Client Dynamic apn,
&sup Suppress SDK Dynamic
&segment2 Designated Market Area (DMA) Client/SDK Dynamic
&segment1 Country Code Client/SDK Dynamic
&forward Backend forward flag SDK Dynamic 1 (e.g. forward to Facebook on backend)
&ad Access Method SDK Static ad,
&cr Segment Code SDK Dynamic crediting ping identifier: 4_00_99_V1_0000
&c9 Advertising ID - IDFA on iOS or Google Advertising ID on Android SDK Dynamic devid,
&enc Hash Indicator SDK Dynamic true (e.g. hashed with SHA 256) false (e.g. unhashed)
&c1 NUID SDK Dynamic nuid,
&at Action Type SDK Dynamic "view" or 'timer'
&rt Resource Type SDK Dynamic video (or text if Static)
&c16 SDK Version SDK Dynamic sdkv,
&c27 Browser/App Duration (in seconds) SDK Dynamic cln, 0
&crs Crash Identifier SDK Dynamic n/a
&lat GPS Latitude SDK Dynamic n/a
&lon GPS Longitude SDK Dynamic n/a
&c29 Player ID SDK Dynamic plid,
&c30 Build Version SDK Dynamic bldv,
&st Product (Sub-Resource Type) SDK Static dcr
&c7 OS Grouping SDK Dynamic osgrp,
&c8 Device Grouping SDK Dynamic devgrp,
&c10 Platform SDK Dynamic plt,
&c40 Adobe ID - Adobe Visitor ID Client Dynamic abide,
&c14 OS Version SDK Dynamic over,
&c26 GPS Precision SDK Dynamic 3 (Passed in from the host App) 1 (IP Address (v4 or v6))
&dd Reporting Data Date SDK Dynamic (e.g. data date in YYYYMMDD format)
&hrd HourCD SDK Dynamic n/a
&wkd DayCD SDK Dynamic n/a
&c35 Adobe Report Suite ID Adobe Dynamic adrsid,
&c36 Cross Reference ID1 Client Dynamic cref1,
&c37 Cross Reference ID2 Client Dynamic cref2,
&c11 Aggregator SDK Dynamic agg,
&c12 App Version Client Dynamic apv,
&c51 Total Ad Duration (in secs) SDK Dynamic adl,0
&c52 Number of Ads SDK Dynamic noad,0
&sd Set Duration (length) Client Dynamic
&devtypid Device Type SDK Dynamic
&c53 isfullepisode flag Client Dynamic fef,
&c54 Airdate Client Dynamic oad,
&c55 Segment Client Dynamic cref3,
&c57 Adloadtype Client Dynamic adldf,
&c3 Content/Ad identifier SDK Dynamic st,c (content) or st,a (ad)
&c64 Start Time Client Dynamic starttm,
&c58 isLive flag Client Dynamic isLive,
&c59 Session id SDK Dynamic sesid,
&c61 Create Time SDK Dynamic createtm,
&c63 pipMode Client Dynamic "true" or ""
&c62 Send Time SDK Dynamic sendTime, <1470421076>
&c68 Bundle id SDK Dynamic bndlid,
&c73 Device Type SDK Dynamic phtype,
&c74 Device Name SDK Dynamic dvcnm,
&c77 adsuprt Client Dynamic 0=no ads, 1=ads, 2=unknown
&c71 OTT flag SDK Dynamic ottflg,<0 (false) or 1 (true)>
&c72 OTT type SDK Dynamic otttyp,
&si Site Identifier SDK Dynamic n/a
&c66 Media URL Client Dynamic
&vtoff View Time Offset Adobe Dynamic Seconds offset/back from epoc (will be blank in w/ non batched)
&rnd Random Number SDK Dynamic random number (cache buster)

Nielsen Privacy Page Implementation

1. Complete an opt-out in your app through the Nielsen opt-out webview.

2. User opt-out, a goodbye ping is fired off to the Nielsen server.

Example Goodbye Ping:

&uoo=true

https://secure-dcr-cert.imrworldwide.com/cgi-bin/cfg?cfgv=300&bldv=aa.5.1.1.4&apid=<yourappid>&apv=.54120&apn=XXX&bid=com.sample.osmpSamplePlayer&sdkv=aa.5.1.1&nuid=bffd02d414622b36801fe547fba9acef83239fd062d50e0ab76e9eeb306d34b5&osver=Android4.4.2&devtypid=samsung-SMT230NU&devid=47e100d36744f745ef04c17799f92bfc42840533a2267589149f2c0395829555&enc=true&fmt=json&adf=&uoo=true&longitude=&latitude=&tz=-14400&locale=en_US&lang=en&ccode=1&dma=&sfcode=dcrcert&sendTime=1470593599&rnd=1470593599249

3.Watch any content (static or video) for at least three minutes. You will not see any pings rendering.

4. Opt back in, a hello ping is fired off to the Nielsen server.

Example Hello Ping

&uoo= [blank] or &uoo=false

https://secure-dcr-cert.imrworldwide.com/cgi-bin/cfg?cfgv=300&bldv=aa.5.1.1.4&apid=<yourappid>&apv=.54120&apn=XXX&bid=com.sample.osmpSamplePlayer&sdkv=aa.5.1.1&nuid=bffd02d414622b36801fe547fba9acef83239fd062d50e0ab76e9eeb306d34b5&osver=Android4.4.2&devtypid=samsung-SMT230NU&devid=47e100d36744f745ef04c17799f92bfc42840533a2267589149f2c0395829555&enc=true&fmt=json&adf=&uoo=&longitude=&latitude=&tz=-14400&locale=en_US&lang=en&ccode=1&dma=&sfcode=dcr-cert&sendTime=1470593666&rnd=1470593666380

5. Watch any video content for at least three minutes and you should see V/D pings - view and duration pings.

Your testing is complete for DCR and it's now time to start the app certification process with Nielsen!

Requirements to Start App Certification

The Pre-certification Checklist is a pre-requisite requirement that must be completed with each app being tested. Once testing is complete, provision this same test app build to Nielsen, and send the checklist results, which are the SDK debug logs and monitor sessions (i.e., Charles) per test scenario to your TAM for verification. Please individually-name each session log according to the test scenario performed. Additionally, make sure that all content to be used for testing is CMS enabled, and is consistently available at all times. Any interruptions or intermittence in the flow will cause delays in testing, increased troubleshooting sessions and can prolong the certification process.

  • You must enable the Debug flag in the development environment to check whether an AppSDK API call is made successfully in the device log
    • To activate the Debug flag, pass the argument @"nol_devDebug":@"XXXXX", in the JSON string for initWithAppInfo, as below. Where "XXXXX" is one of the following:
      • INFO: Displays the API calls and the input data from the application (validate player name, app ID, etc.). It can be used as certification Aid.
      • WARNING: Indicates potential integration / configuration errors or SDK issues.
      • ERROR: Indicates important integration errors or non-recoverable SDK issues.
      • DEBUG: Debug logs, used by the developers to debug more complex issues.
NSDictionary* appInformation = @{
 @ "appid": appID,
 @ "appversion" : appVersion,
 @ "appname": appName,
 @ "sfcode": sfcode,
 @ "nol_devDebug": @"INFO"};

NSData* jsonDataAppInfo = [NSJSONSerialization
dataWithJSONObject:appInformation options:0 error:nil];
NSString* jsonStringAppInfo = [[NSString alloc] initWithBytes:
[jsonDataAppInfo bytes] length: [jsonDataAppInfo length]
encoding:NSUTF8StringEncoding];
nlsAppApiMeter = [[NielsenAppApi sharedInstance]
initWithAppInfo:jsonStringAppInfo];
  • Once the flag is enabled, it logs each API call made and the data passed. The log created by this flag is minimal.

DO NOT leave the nol_devDebug flag enabled when your app has moved into production!

  • Nielsen must receive a production-ready version of your app provisioned to a minimum of 7 Nielsen devices to test on a mixture of devices and operating systems.

Nielsen will provide feedback on all defects found throughout the entire testing and certification process.

Testing Results Worksheet

Questions Your Results
Record the Test Device ID:
What type of App are you testing? Universal Device-type specific App (e.g. Phone, Tablet, iPod, etc.)
Devices and OS Tested:
Type of content being tested in the app: StaticVideoBoth
Is forward/rewind or pause modes available: Please describe.
Nielsen Policy Page (Opt-out/Opt-in):
Background/Foreground – Same Video:
Background/Foreground – Different Video:
Channel Change:
Interruption – Incoming Call:
Interruption – Airport Mode/Wi-Fi:
Interruption – Alarm/Sleep:
Headphone Removal:
Kill and Re-launch:
Please list any functions which will need special instructions or any known defects in your app:

Test Scenarios

Steps to Perform Record This Verification Steps What is this testing?
Nielsen Privacy Policy: Navigate to Nielsen's "About Nielsen Measurement" page and clicks on Opt-out, then play a video for 10 mins. Navigate back to Nielsen measurement Opt-out page, and Optin. Play same video for 5 mins.
  1. Opt-out time
  2. Video start time
  3. Video end time
  4. Opt-in time
  5. Video start time
  6. Video end time.
  1. Opt-out page should be available in all the supported languages - The URL to this webpage should be called from the SDK and opened in webview within the App.
  2. Goodbye ping fires with uoo=true upon opt-out. Pings will still fire, but will be discarded on Nielsen's backend.
  3. Hello ping fires with uoo=false when opted back in and play resumes. New set of V/D pings should fire for 5 minutes of streaming.
  1. Opt-out / opt-in implemented correctly.
  2. Playback resumes and play, loadMetadata, and playheadPosition tags called after video is interrupted; even for the same channel.
Background/Foreground – Same Video: Terminate the app and open it from a clean start. Play a video for 5 mins. Stop the video and put the app in the background. Stay in the background for 5 mins. Bring the app to the foreground and play the SAME video again for 5 mins.
  1. Video start time.
  2. Video stop time and put app in background.
  3. Time when app is put into foreground.
  4. Video play time.
  1. Hello ping is received when App launches (if 1st launch).
  2. V/D pings fire when video plays.
  3. App goes into background, stop method should be called when video pauses. As a result, pending pings fires upon video stop.
  4. Video isn’t playing in the background and no measurement pings fire.
  5. Different scenarios for iOS and Android when the video resumes from background:
  • iOS: V/D pings fire when video resumes.
  • Android: only Duration ping fires when same video resumes.
  1. SDK is being initialized correctly.
  2. The stop method should be called and no API is called in the background
  3. loadMetadata and playheadPosition methods are called upon resuming video in the foreground.
Background/Foreground – Different Video:Terminate the app and open it from a clean start. Play a video for 5 mins. Stop the video and put the app in the background. Stay in the background for 5 mins. Bring the app to the foreground and play a DIFFERENT video for 5 mins
  1. Video start time.
  2. Video stop time and put app in background.
  3. Time when app is put into foreground.
  4. Video play time
  1. Hello ping is received when App launches (if 1st launch).
  2. V/D pings fire when video plays.
  3. App goes into background, stop method should be called when video pauses. As a result, pending pings fires upon video stop.
  4. Video isn’t playing in the background and no measurement pings fire.
  5. Different scenarios for iOS and Android when the video resumes from background:
  • iOS: V/D pings fire when video resumes.
  • Android: V/D pings fire when different video plays on resume.
  1. SDK is being initialized correctly.
  2. The stop method should be called and no API is called in the background.
  3. Play, loadMetadata, and playheadPosition methods are called upon resuming video in the foreground.
Video Change: Play Video1 for 3 mins, then switch to Video2 without stopping Video1 and play for 2 mins and stop viewing.
  1. Video1 start time.
  2. Video1 stop time.
  3. Video2 start time.
  4. Video2 stop time.
  1. V/D pings are triggered for Video1.
  2. On video change, pending ping is fired upon stop for Video1.
  3. New V/D pings are triggered for Video2.
  1. The stop method should be called upon video change.
  2. Playback resumes, and play, loadMetadata and playheadPosition methods are triggered.
Interruption – Incoming Call: Stream content for 3 mins. Call the device to create an interruption. Video will stop playing. After 5 mins, resume the video activity for 3 mins.
  1. Video start time.
  2. Interruption time.
  3. Video start time.
  1. V/D pings are triggered.
  2. Pending ping fires when the call interrupts the video.
  3. Once playback resumes from the interruption, there are different scenarios for iOS and Android:
  • iOS: V/D pings fire when video resumes.
  • Android: only Duration ping fires when same video resumes.
  1. The stop method should be called when the interruption occurs.
  2. Playback resumes, and play, loadMetadata and playheadPosition methods are triggered.
Interruption – Airport Mode/Wi-Fi: Stream content for 3 mins. Switch airport mode ON. Video will stop playing after buffering has ended. After 5 mins, turn airplane mode OFF. Resume the video activity for 3 mins.
  1. Video start time.
  2. Interruption time.
  3. Video resumes time.
  1. V/D pings are triggered.
  2. Pending ping doesn’t occur until connectivity is reestablished.
  3. Once reconnected, and playback resumes from the interruption, there are different scenarios for iOS and Android:
  • iOS: V/D pings fire when video resumes.
  • Android: only Duration ping fires when same video resumes.
  1. The stop method should be called when the interruption occurs.
  2. Playback resumes, and loadMetadata and playheadPosition methods are triggered.
Interruption – Alarm/Sleep: Create an alarm or other timed interruption. Stream content until the interruption happens.After 5 mins, resume the video activity for 3 mins.
  1. Video start time.
  2. Interruption time.
  3. Video resumes time.
  1. V/D pings are triggered.
  2. Pending ping fires when the video is interrupted.
  3. Once playback resumes from the interruption, there are different scenarios for iOS and Android:
  • iOS: V/D pings fire when video resumes.
  • Android: only Duration ping fires when same video resumes.
  1. The stop method should be called when the interruption occurs.
  2. Playback resumes, and loadMetadata and playheadPosition methods are triggered.
Headphone – iOS ONLY: Insert headphone into your iOS device. Stream content for 3 mins and unplug the headphones.Re-insert the headphones.
  1. Video start time.
  2. Unplug the headphone time.
  3. Video resumes time.
  1. Duration ping will fire when the headphones are unplugged, and the audio will stop playing.
  2. Once playback resumes, measurement pings should fire.
  1. The stop method should be called when the interruption occurs.
  2. Playback resumes and loadMetadata and playheadPosition methods are triggered.
Kill and Relaunch: Terminate the app and open it from a fresh start. Play a video for 2 mins. Kill the app while video is playing. Relaunch the app and play any video for 5 mins.
  1. Video start time.
  2. App terminated time.
  3. App relaunch time.
  4. Video start time.
  1. Hello ping fires when the app launches (if 1st launch).
  2. V/D pings fire.
  3. Pending ping fires when the app is terminated. NOTE: If using an Android, this might not happen in some scenarios.
  4. Hello ping fires upon relaunch.
  5. V/D pings are triggered.
  1. The stop method should be called when the video is interrupted; even when the app is killed or quit. Some android kill methods will prevent pending pings from firing right away.

Obtaining Your Device Identifier

Nielsen will need your device's identifier to distinguish your test data from other devices.

iOS Devices

  1. You can obtain your device's Advertising Identifier with this app:
    1. https://itunes.apple.com/us/app/the-identifiers/id564618183
  2. Install and open the app on your Apple device
  3. From the "Raw" tab, use the "Advertising Identifier"

Android Devices

  1. Go into "Settings"
  2. Select "Google"
  3. Select "Ads"
  4. Advertising ID is on the bottom under "Your advertising ID:"