<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://nielsentest.mywikis.net/w/index.php?action=history&amp;feed=atom&amp;title=Objective-c_Basic_example</id>
	<title>Objective-c Basic example - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://nielsentest.mywikis.net/w/index.php?action=history&amp;feed=atom&amp;title=Objective-c_Basic_example"/>
	<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=Objective-c_Basic_example&amp;action=history"/>
	<updated>2026-04-13T05:54:46Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.5</generator>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=Objective-c_Basic_example&amp;diff=4592&amp;oldid=prev</id>
		<title>ColinBrown: /* NielsenInit.m */</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=Objective-c_Basic_example&amp;diff=4592&amp;oldid=prev"/>
		<updated>2020-12-01T21:09:37Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;NielsenInit.m&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:09, 1 December 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l20&quot;&gt;Line 20:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 20:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     //Initialising the NielsenAppApi class by passing app information which returns the instance of NielsenAppApi.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     //Initialising the NielsenAppApi class by passing app information which returns the instance of NielsenAppApi.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     NSDictionary *appInformation = @{ @&amp;quot;appid&amp;quot;: @&amp;quot;PDA7D5EE6-B1B8-4123-9277-&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;2A788BC653CA&lt;/del&gt;&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     NSDictionary *appInformation = @{ @&amp;quot;appid&amp;quot;: @&amp;quot;PDA7D5EE6-B1B8-4123-9277-&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;2A788BC65XXX&lt;/ins&gt;&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                                       @&amp;quot;appversion&amp;quot;: @&amp;quot;1.0&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                                       @&amp;quot;appversion&amp;quot;: @&amp;quot;1.0&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                                       @&amp;quot;sfcode&amp;quot;: @&amp;quot;dcr&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                                       @&amp;quot;sfcode&amp;quot;: @&amp;quot;dcr&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>ColinBrown</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=Objective-c_Basic_example&amp;diff=2957&amp;oldid=prev</id>
		<title>Admin3 at 23:19, 15 October 2018</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=Objective-c_Basic_example&amp;diff=2957&amp;oldid=prev"/>
		<updated>2018-10-15T23:19:36Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 23:19, 15 October 2018&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|DCR &amp;amp; DTVR}} {{Breadcrumb|&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;DCR_Video_iOS_SDK&lt;/del&gt;}} {{CurrentBreadcrumb}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|DCR &amp;amp; DTVR}} {{Breadcrumb|&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;DCR Video iOS SDK&lt;/ins&gt;}} {{CurrentBreadcrumb}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Digital]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Digital]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:iphonescreenshot.png|thumb]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:iphonescreenshot.png|thumb]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Admin3</name></author>
	</entry>
	<entry>
		<id>https://nielsentest.mywikis.net/w/index.php?title=Objective-c_Basic_example&amp;diff=2927&amp;oldid=prev</id>
		<title>Admin3: Created page with &quot;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|DCR &amp; DTVR}} {{Breadcrumb|DCR_Video_iOS_SDK}} {{CurrentBreadcrumb}} Category:Digital [[File:iphonescreenshot.png|thumb]...&quot;</title>
		<link rel="alternate" type="text/html" href="https://nielsentest.mywikis.net/w/index.php?title=Objective-c_Basic_example&amp;diff=2927&amp;oldid=prev"/>
		<updated>2018-10-02T21:04:15Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|DCR &amp;amp; DTVR}} {{Breadcrumb|DCR_Video_iOS_SDK}} {{CurrentBreadcrumb}} &lt;a href=&quot;/wiki/Category:Digital&quot; title=&quot;Category:Digital&quot;&gt;Category:Digital&lt;/a&gt; [[File:iphonescreenshot.png|thumb]...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Breadcrumb|}} {{Breadcrumb|Digital}} {{Breadcrumb|DCR &amp;amp; DTVR}} {{Breadcrumb|DCR_Video_iOS_SDK}} {{CurrentBreadcrumb}}&lt;br /&gt;
[[Category:Digital]]&lt;br /&gt;
[[File:iphonescreenshot.png|thumb]]&lt;br /&gt;
== Objective-C Code Example ==&lt;br /&gt;
&lt;br /&gt;
==== NielsenInit.m ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Objective-C&amp;quot;&amp;gt;&lt;br /&gt;
//  NielsenInit.m&lt;br /&gt;
//  VideoPlayerAppObjC&lt;br /&gt;
// This is sample code of a very basic implementation of the Nielsen 'Simplified API'&lt;br /&gt;
// This code is for educational purposes only&lt;br /&gt;
&lt;br /&gt;
#import &amp;quot;NielsenInit.h&amp;quot;&lt;br /&gt;
#import &amp;lt;NielsenAppApi/NielsenAppApi.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@implementation NielsenInit&lt;br /&gt;
&lt;br /&gt;
+ (NielsenAppApi *)createNielsenAppApiWithDelegate:(id&amp;lt;NielsenAppApiDelegate&amp;gt;)delegate&lt;br /&gt;
{&lt;br /&gt;
    //Initialising the NielsenAppApi class by passing app information which returns the instance of NielsenAppApi.&lt;br /&gt;
    &lt;br /&gt;
    NSDictionary *appInformation = @{ @&amp;quot;appid&amp;quot;: @&amp;quot;PDA7D5EE6-B1B8-4123-9277-2A788BC653CA&amp;quot;,&lt;br /&gt;
                                      @&amp;quot;appversion&amp;quot;: @&amp;quot;1.0&amp;quot;,&lt;br /&gt;
                                      @&amp;quot;sfcode&amp;quot;: @&amp;quot;dcr&amp;quot;,&lt;br /&gt;
                                      @&amp;quot;nol_devDebug&amp;quot;: @&amp;quot;DEBUG&amp;quot; };&lt;br /&gt;
    &lt;br /&gt;
    return [[NielsenAppApi alloc] initWithAppInfo:appInformation delegate:delegate];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== NielsenInit.h ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Objective-C&amp;quot;&amp;gt;&lt;br /&gt;
#import &amp;lt;Foundation/Foundation.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@class NielsenAppApi;&lt;br /&gt;
@protocol NielsenAppApiDelegate;&lt;br /&gt;
&lt;br /&gt;
@interface NielsenInit : NSObject&lt;br /&gt;
&lt;br /&gt;
+ (NielsenAppApi *)createNielsenAppApiWithDelegate:(id&amp;lt;NielsenAppApiDelegate&amp;gt;)delegate;&lt;br /&gt;
&lt;br /&gt;
@end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SDKMethods.m ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Objective-C&amp;quot;&amp;gt;&lt;br /&gt;
#import &amp;lt;Foundation/Foundation.h&amp;gt;&lt;br /&gt;
#import &amp;quot;SDKMethods.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@implementation SDKMethods&lt;br /&gt;
NSDictionary *content;&lt;br /&gt;
&lt;br /&gt;
-(void)setContentUrl&lt;br /&gt;
{&lt;br /&gt;
    //Loading Content URL    &lt;br /&gt;
    self.url = [NSURL URLWithString:@&amp;quot;http://www.nielseninternet.com/NielsenConsumer/prog_index.m3u8&amp;quot;];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void)setAdUrl&lt;br /&gt;
{&lt;br /&gt;
    //Loading Ad URL    &lt;br /&gt;
    self.url = [NSURL URLWithString:@&amp;quot;http://www.nielseninternet.com/NWCC-3002/prog_index.m3u8&amp;quot;];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void)setDtvrUrl&lt;br /&gt;
{&lt;br /&gt;
    //Loading DTVR URL    &lt;br /&gt;
    self.url = [NSURL URLWithString:@&amp;quot;http://www.nielseninternet.com/VOD/NielsenScienceBehindWhatsNext/prog_index.m3u8&amp;quot;];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
- (NSDictionary *)loadChannelInfo&lt;br /&gt;
{&lt;br /&gt;
    //Loading Channel Info.    &lt;br /&gt;
    NSString *strUrl = self.url.absoluteString;  &lt;br /&gt;
    NSDictionary *channel = @{  @&amp;quot;channelName&amp;quot; : @&amp;quot;ChannelTitle&amp;quot;,&lt;br /&gt;
                             @&amp;quot;mediaURL&amp;quot;: strUrl };   &lt;br /&gt;
    return channel;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// http://www.nielseninternet.com/NielsenConsumer/prog_index.m3u8&lt;br /&gt;
- (NSDictionary *)loadContent&lt;br /&gt;
{&lt;br /&gt;
    //Loading Content data&lt;br /&gt;
        self.url = [NSURL URLWithString:@&amp;quot;http://www.nielseninternet.com/NielsenConsumer/prog_index.m3u8&amp;quot;];   &lt;br /&gt;
    NSDictionary *content = @{    @&amp;quot;type&amp;quot;:@&amp;quot;content&amp;quot;,&lt;br /&gt;
                                @&amp;quot;assetid&amp;quot;:@&amp;quot;C77664&amp;quot;,&lt;br /&gt;
                                @&amp;quot;length&amp;quot;:@&amp;quot;3600&amp;quot;,&lt;br /&gt;
                                @&amp;quot;program&amp;quot;:@&amp;quot;MyProgram&amp;quot;,&lt;br /&gt;
                                @&amp;quot;segB&amp;quot;:@&amp;quot;CustomSegmentValueB&amp;quot;,&lt;br /&gt;
                                @&amp;quot;segC&amp;quot;:@&amp;quot;segmentC&amp;quot;,&lt;br /&gt;
                                @&amp;quot;title&amp;quot;:@&amp;quot;S2,E3&amp;quot;,&lt;br /&gt;
                                @&amp;quot;section&amp;quot;:@&amp;quot;cloudApi_app&amp;quot;,&lt;br /&gt;
                                @&amp;quot;airdate&amp;quot;:@&amp;quot;20180301 10:00:00&amp;quot;,&lt;br /&gt;
                                @&amp;quot;isfullepisode&amp;quot;:@&amp;quot;y&amp;quot;,&lt;br /&gt;
                                @&amp;quot;adloadtype&amp;quot;:@&amp;quot;2&amp;quot;,&lt;br /&gt;
                                @&amp;quot;channelName&amp;quot;:@&amp;quot;My Channel 1&amp;quot;,&lt;br /&gt;
                                @&amp;quot;pipMode&amp;quot;:@&amp;quot;false&amp;quot; };&lt;br /&gt;
    &lt;br /&gt;
    return content;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
- (NSDictionary *)loadPreRollAd&lt;br /&gt;
{&lt;br /&gt;
    //loading Ad data.   &lt;br /&gt;
    self.url = [NSURL URLWithString:@&amp;quot;http://www.nielseninternet.com/NWCC-3002/prog_index.m3u8&amp;quot;];   &lt;br /&gt;
    NSDictionary *ad = @{ @&amp;quot;type&amp;quot;:@&amp;quot;preroll&amp;quot;,&lt;br /&gt;
                        @&amp;quot;assetid&amp;quot;:@&amp;quot;AD1&amp;quot;,&lt;br /&gt;
                        @&amp;quot;title&amp;quot;:@&amp;quot;ADPreTitle&amp;quot; };    &lt;br /&gt;
    return ad;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
- (NSDictionary *)loadDtvr{&lt;br /&gt;
    &lt;br /&gt;
    //Loading DTVR data  &lt;br /&gt;
    NSDictionary *dtvr = @{ @&amp;quot;adModel&amp;quot;:@&amp;quot;1&amp;quot; };  &lt;br /&gt;
    return dtvr;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== SDKMethods.h ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Objective-C&amp;quot;&amp;gt;&lt;br /&gt;
#import &amp;lt;Foundation/Foundation.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@interface SDKMethods : NSObject&lt;br /&gt;
&lt;br /&gt;
@property(nonatomic, strong) NSURL *url;&lt;br /&gt;
&lt;br /&gt;
- (void)setContentUrl;&lt;br /&gt;
- (void)setAdUrl;&lt;br /&gt;
- (void)setDtvrUrl;&lt;br /&gt;
- (NSDictionary *)loadChannelInfo;&lt;br /&gt;
- (NSDictionary *)loadContent;&lt;br /&gt;
- (NSDictionary *)loadPreRollAd;&lt;br /&gt;
- (NSDictionary *)loadDtvr;&lt;br /&gt;
&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ViewController.m ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Objective-C&amp;quot;&amp;gt;&lt;br /&gt;
#import &amp;quot;ViewController.h&amp;quot;&lt;br /&gt;
#import &amp;quot;NielsenInit.h&amp;quot;&lt;br /&gt;
#import &amp;quot;SDKMethods.h&amp;quot;&lt;br /&gt;
#import &amp;lt;MediaPlayer/MediaPlayer.h&amp;gt;&lt;br /&gt;
#import &amp;lt;AVKit/AVKit.h&amp;gt;&lt;br /&gt;
#import &amp;quot;Constants.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;NielsenAppApi/NielsenAppApi.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NSMutableDictionary *mutableData;&lt;br /&gt;
NSDictionary *data;&lt;br /&gt;
SDKMethods *sdkMethods;&lt;br /&gt;
AVPlayer  *player;&lt;br /&gt;
AVPlayerViewController *playerController;&lt;br /&gt;
NielsenAppApi *nielsenApi;&lt;br /&gt;
&lt;br /&gt;
int totalVideosPlayed;&lt;br /&gt;
id timeObserver;&lt;br /&gt;
static void *TimedMetadataObserverContext = &amp;amp;TimedMetadataObserverContext;&lt;br /&gt;
NSString *timedMetadataKey = @&amp;quot;currentItem.timedMetadata&amp;quot;;&lt;br /&gt;
id array;&lt;br /&gt;
&lt;br /&gt;
@interface ViewController()&amp;lt;AVPlayerViewControllerDelegate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
@implementation ViewController&lt;br /&gt;
&lt;br /&gt;
- (void)viewDidLoad {&lt;br /&gt;
    [super viewDidLoad];&lt;br /&gt;
    &lt;br /&gt;
    //Setting background image&lt;br /&gt;
    UIImage *backgroundImage = [UIImage imageNamed:@&amp;quot;bg_image.jpg&amp;quot;];&lt;br /&gt;
    UIImageView *backgroundImageView=[[UIImageView alloc]initWithFrame:self.view.frame];&lt;br /&gt;
    backgroundImageView.image=backgroundImage;&lt;br /&gt;
    [self.view insertSubview:backgroundImageView atIndex:0];&lt;br /&gt;
    &lt;br /&gt;
    //Mark: In NielsenInit class we are initialising the NielsenEventTracker.&lt;br /&gt;
    &lt;br /&gt;
    //Getting the instance of NielsenEventTracker&lt;br /&gt;
    nielsenApi = [NielsenInit createNielsenAppApiWithDelegate:nil];&lt;br /&gt;
    &lt;br /&gt;
    //Mark: In SDKMethods class we wrote methods which creates content,Ad objects&lt;br /&gt;
    sdkMethods = [[SDKMethods alloc] init];&lt;br /&gt;
    &lt;br /&gt;
    if(self.videoType == onlyContent){&lt;br /&gt;
        //loading video content url&lt;br /&gt;
        [sdkMethods setContentUrl];&lt;br /&gt;
        &lt;br /&gt;
    }else if(self.videoType == dtvrVideo){&lt;br /&gt;
        //loading video DTVR url&lt;br /&gt;
        [sdkMethods setDtvrUrl];&lt;br /&gt;
        &lt;br /&gt;
    }else{&lt;br /&gt;
        //loading video Ad url&lt;br /&gt;
        [sdkMethods setAdUrl];&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    [self setPlayer];&lt;br /&gt;
    &lt;br /&gt;
    if(self.videoType != dtvrVideo){&lt;br /&gt;
        &lt;br /&gt;
        //For DTVR video playHeadPosition is not required&lt;br /&gt;
        //For DCR Content,Ad videos only this method will execute.&lt;br /&gt;
        [self setPlayHeadPosition];&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    //Setting observer to know the completion of video&lt;br /&gt;
    [self setVideoFinishObserver];&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-(void) setPlayer {&lt;br /&gt;
    &lt;br /&gt;
    //creating player&lt;br /&gt;
    player = [AVPlayer playerWithURL:[sdkMethods url]];&lt;br /&gt;
    playerController = [[AVPlayerViewController alloc] init];&lt;br /&gt;
    playerController.view.frame = CGRectMake(0,100,self.view.frame.size.width, 300);&lt;br /&gt;
    playerController.player = player;&lt;br /&gt;
    playerController.showsPlaybackControls = YES;&lt;br /&gt;
    playerController.delegate = self;&lt;br /&gt;
    &lt;br /&gt;
    [player play];&lt;br /&gt;
    &lt;br /&gt;
    if(totalVideosPlayed == 0){&lt;br /&gt;
        //For first time sending Channel info to SDK using &amp;quot;play&amp;quot; method.&lt;br /&gt;
        [nielsenApi play:([sdkMethods loadChannelInfo])];&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    if(self.videoType == dtvrVideo){&lt;br /&gt;
        &lt;br /&gt;
        //loading DTVR metadata&lt;br /&gt;
        data = [sdkMethods loadDtvr];&lt;br /&gt;
    }else{&lt;br /&gt;
        &lt;br /&gt;
        //loading video content metadata data&lt;br /&gt;
        data = [sdkMethods loadContent];&lt;br /&gt;
    }&lt;br /&gt;
    //Sending metadata to SDK.&lt;br /&gt;
    [nielsenApi loadMetadata:(data)];&lt;br /&gt;
    &lt;br /&gt;
    if(self.videoType == contentWithOneAd){&lt;br /&gt;
        //loading Ad data&lt;br /&gt;
        data = [sdkMethods loadPreRollAd];&lt;br /&gt;
        [nielsenApi loadMetadata:(data)];&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //Adding observer to player to track play,pause and reverse&lt;br /&gt;
    [player addObserver:self&lt;br /&gt;
             forKeyPath:@&amp;quot;rate&amp;quot;&lt;br /&gt;
                options:(NSKeyValueObservingOptionNew)&lt;br /&gt;
                context:nil];&lt;br /&gt;
    &lt;br /&gt;
    //Only for DTVR videos we are tracking iD3 Tags and sends to SDK after extracting.&lt;br /&gt;
    if(self.videoType == dtvrVideo){&lt;br /&gt;
        &lt;br /&gt;
        //Setting observer to track timedMetadata&lt;br /&gt;
        [player addObserver:self&lt;br /&gt;
                 forKeyPath: timedMetadataKey&lt;br /&gt;
                    options: (NSKeyValueObservingOptionNew)&lt;br /&gt;
                    context: &amp;amp;TimedMetadataObserverContext];&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    [self addChildViewController:playerController];&lt;br /&gt;
    [self.view addSubview:playerController.view];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void) setPlayHeadPosition {&lt;br /&gt;
    &lt;br /&gt;
    //Setting play head position&lt;br /&gt;
    CMTime timeInterval = CMTimeMakeWithSeconds(1, 1);&lt;br /&gt;
    [player addPeriodicTimeObserverForInterval:(timeInterval) queue:dispatch_get_main_queue() usingBlock:^(CMTime time){&lt;br /&gt;
        NSTimeInterval seconds = CMTimeGetSeconds(time);&lt;br /&gt;
        NSInteger intSec = seconds;&lt;br /&gt;
        &lt;br /&gt;
        //Sending data dictionary to SDK with updated playHead position.&lt;br /&gt;
        [nielsenApi playheadPosition:(intSec)];&lt;br /&gt;
    }];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
- (void) setVideoFinishObserver {&lt;br /&gt;
    &lt;br /&gt;
    //observer fires on completion of Ad&lt;br /&gt;
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerDidFinishPlaying:) name:AVPlayerItemDidPlayToEndTimeNotification object:playerController.player.currentItem];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//rate 0 = Video Pause or stopped&lt;br /&gt;
//rate 1 = Video played or resumed&lt;br /&gt;
- (void)observeValueForKeyPath:(NSString *)keyPath&lt;br /&gt;
                      ofObject:(id)object&lt;br /&gt;
                        change:(NSDictionary *)change&lt;br /&gt;
                       context:(void *)context&lt;br /&gt;
{&lt;br /&gt;
    if(keyPath == timedMetadataKey){&lt;br /&gt;
        if(context == &amp;amp;TimedMetadataObserverContext){&lt;br /&gt;
            &lt;br /&gt;
            id newMetadataArray = [change objectForKey:NSKeyValueChangeNewKey];&lt;br /&gt;
            if (newMetadataArray != [NSNull null])&lt;br /&gt;
            {&lt;br /&gt;
                array = newMetadataArray;&lt;br /&gt;
                for (AVMetadataItem *metadataItem in array)&lt;br /&gt;
                {&lt;br /&gt;
                    //Handling TimedMetadata&lt;br /&gt;
                    [self handleTimedMetadata: metadataItem];&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    if (object == player &amp;amp;&amp;amp; [keyPath isEqualToString:@&amp;quot;rate&amp;quot;]) {&lt;br /&gt;
        &lt;br /&gt;
        NSNumber * newValue = [change objectForKey:NSKeyValueChangeNewKey];&lt;br /&gt;
        int intValue = newValue.intValue;&lt;br /&gt;
        if(intValue == 0){&lt;br /&gt;
            NSLog(@&amp;quot;playback paused&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            //On Video pause calling the &amp;quot;stop&amp;quot; method of SDK.&lt;br /&gt;
            [nielsenApi stop];&lt;br /&gt;
            &lt;br /&gt;
        }else if(intValue == 1){&lt;br /&gt;
            NSLog(@&amp;quot;Normal playback&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            //On video Resume calling &amp;quot;loadMetada&amp;quot; method of SDK&lt;br /&gt;
            [nielsenApi loadMetadata:(data)];&lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
- (void)viewDidDisappear:(BOOL)animated&lt;br /&gt;
{&lt;br /&gt;
    ///On moving to other screen calling &amp;quot;stop&amp;quot; method of SDK.&lt;br /&gt;
    [nielsenApi stop];&lt;br /&gt;
    &lt;br /&gt;
    player.rate = 0;&lt;br /&gt;
    [player pause];&lt;br /&gt;
    &lt;br /&gt;
    [super viewDidDisappear:animated];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-(void)playerDidFinishPlaying:(NSNotification *) notification {&lt;br /&gt;
    &lt;br /&gt;
    [player removeObserver:self forKeyPath:@&amp;quot;rate&amp;quot;];&lt;br /&gt;
    &lt;br /&gt;
    //As 1 video completed playing, incrementing the variable value.&lt;br /&gt;
    totalVideosPlayed += 1;&lt;br /&gt;
    &lt;br /&gt;
    if(self.videoType == onlyContent || totalVideosPlayed == self.totalVideos){&lt;br /&gt;
        //When content video completes or total videos finishes, call &amp;quot;end&amp;quot; method.&lt;br /&gt;
        [nielsenApi end];&lt;br /&gt;
        &lt;br /&gt;
    }else if(self.videoType == contentWithOneAd){&lt;br /&gt;
        &lt;br /&gt;
        //On completion of &amp;quot;AD&amp;quot; call &amp;quot;stop&amp;quot; method.&lt;br /&gt;
        [nielsenApi stop];&lt;br /&gt;
        &lt;br /&gt;
        //After preRoll ad completes, load content video.&lt;br /&gt;
        data = [sdkMethods loadContent];&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //Checking if total videos played or not.&lt;br /&gt;
    if(totalVideosPlayed != self.totalVideos){&lt;br /&gt;
        &lt;br /&gt;
        [self setPlayer];&lt;br /&gt;
        [self setPlayHeadPosition];&lt;br /&gt;
        &lt;br /&gt;
        //Setting observer to know the completion of video&lt;br /&gt;
        [self setVideoFinishObserver];&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
- (void)dealloc {&lt;br /&gt;
    NSLog(@&amp;quot;Remove NotificationCenter dealloc&amp;quot;);&lt;br /&gt;
    [[NSNotificationCenter defaultCenter] removeObserver:self];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
- (void)handleTimedMetadata:(AVMetadataItem *)timedMetadata&lt;br /&gt;
{&lt;br /&gt;
    // We expect the content to contain plists encoded as timed metadata&lt;br /&gt;
    // AVPlayer turns these into NSDictionaries&lt;br /&gt;
    &lt;br /&gt;
    id extraAttributeType = [timedMetadata extraAttributes];&lt;br /&gt;
    NSString *extraString = nil;&lt;br /&gt;
    if ([extraAttributeType isKindOfClass:[NSDictionary class]])&lt;br /&gt;
    {&lt;br /&gt;
        extraString = [extraAttributeType valueForKey:@&amp;quot;info&amp;quot;];&lt;br /&gt;
    }&lt;br /&gt;
    else if ([extraAttributeType isKindOfClass:[NSString class]])&lt;br /&gt;
    {&lt;br /&gt;
        extraString = extraAttributeType;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    NSString *key = [NSString stringWithFormat:@&amp;quot;%@&amp;quot;, [timedMetadata key]];&lt;br /&gt;
    &lt;br /&gt;
    //If tag starts with &amp;quot;www.nielsen.com&amp;quot;, then only sending to SDK&lt;br /&gt;
    if ([key isEqualToString:@&amp;quot;PRIV&amp;quot;] &amp;amp;&amp;amp; [extraString rangeOfString:@&amp;quot;www.nielsen.com&amp;quot;].length &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        &lt;br /&gt;
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{&lt;br /&gt;
            [nielsenApi sendID3:extraString];&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ViewController.h ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Objective-C&amp;quot;&amp;gt;&lt;br /&gt;
#import &amp;lt;UIKit/UIKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@class NielsenAppApi;&lt;br /&gt;
@protocol NielsenAppApiDelegate;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
@interface ViewController : UIViewController&lt;br /&gt;
&lt;br /&gt;
@property (nonatomic) int videoType;&lt;br /&gt;
@property (nonatomic) int totalVideos;&lt;br /&gt;
&lt;br /&gt;
@end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== OptOutVC.h ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Objective-C&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#import &amp;lt;UIKit/UIKit.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
@class NielsenEventTracker;&lt;br /&gt;
@protocol NielsenEventTrackerDelegate;&lt;br /&gt;
&lt;br /&gt;
@interface OptOutVC : UIViewController&lt;br /&gt;
&lt;br /&gt;
@property (nonatomic, weak) NielsenEventTracker *nielsenEventTracker;&lt;br /&gt;
&lt;br /&gt;
@end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin3</name></author>
	</entry>
</feed>