IOS SDK

From MMwiki
(Redirected from Apple SDK)
Jump to: navigation, search

IMPORTANT NOTE: Effective January 4, APIDs will be assigned for each new placement in your apps & mobile websites. For existing placements, no action is required. For new apps & placements, we will provide an APID for each placement and you’ll simply need to include that APID in your apps. Learn more here.


Contents

Millennial Media iOS SDK - Version 4.5.3

Thank you for joining mmDev and becoming a Millennial Media Publisher! Included here are all the resources for integrating Millennial Media Advertising into your iPhone/iPod Touch or iPad application.

Contents of zip file

  • README.txt
  • Changelog # Changelog for libMMSDK.a
  • MMSDK/
    • libMMSDK_4.5.3_.a # Millennial Media SDK Static Library
    • MMAdView.h # MMAdView header file
    • nothumb/ # A nothumb build of libMMSDK.a
      • libMMSDK-nothumb.a
  • MMSDK_nothumb/
    • libMMSDK_4.5.3_nothumb.a # A nothumb build of libMMSDK.a
    • MMAdView.h # MMAdView header file
  • MMSDK_Split_Libraries/
    • libMMSDK_4.5.3_withoutJSON.a # libMMSDK.a without SBJSON included as part of the binary.
    • MMAdView.h # MMAdView header file
    • JSON/ # Contains files for SBJSON
  • MMiPadClient/
    • A sample application for adding a MMAdView to an iPad app
  • MMiPhoneClient/
    • A sample application for adding a MMAdView to an iPhone app

What's New In This Version

  • Fixed bug with precaching HTML creatives

1.Add Millennial SDK

Add MMAdView.h and libMMSDK.a to your XCode project by dragging both files into your "Groups & Files" view.

2.Add Frameworks

Add the QuartzCore, MediaPlayer, CoreGraphics, CoreLocation, MobileCoreServices, AudioToolbox, AVFoundation, SystemConfiguration, UIKit and Foundation frameworks to your project.

3.Add Linker Flags

In Xcode 4.2 your Other Linker Flags can be found by selecting your Project in your Xcode window, select your Target, select "Build Settings" and in the "Linking" section, find "Other Linker Flags" and add "-ObjC" and "-all_load".

Linker flags red.png

4.Create an instance of MMAdView and add it to your view

MMAdView *adView = [[MMAdView adWithFrame:CGRectMake(0,0,320,53) 
                                type:MMBannerAdTop 
                                apid:YOUR_APID 
                            delegate:self 
                              loadAd:YES 
                          startTimer:YES] retain];

[self.view addSubview:adView]; //required

5.Implement Delegate Methods (Optional)

// pass demographic data to serve targeted ads

- (NSDictionary *) requestData {
    return [NSDictionary dictionaryWithObjectsAndKeys: 
                                @"21224", @"zip", 
                                @"35", @"age",
                                @"male", @"gender",
                                nil];
                            }

6.Memory Management

adView.refreshTimerEnabled = NO;
adView.delegate = nil;
[adView release], adView = nil;   

Interstitial Ad QuickStart

1.Add Millennial SDK Add MMAdView.h and libMMSDK.a to your XCode project by dragging both files into your "Groups & Files" view.

2.Add Frameworks Add the QuartzCore, MediaPlayer, CoreGraphics, CoreLocation, MobileCoreServices, AudioToolbox, AVFoundation, SystemConfiguration, UIKit and Foundation frameworks to your project.

3.Add Linker Flags

In Xcode 4.2 your Other Linker Flags can be found by selecting your Project in your Xcode window, select your Target, select "Build Settings" and in the "Linking" section, find "Other Linker Flags" and add "-ObjC" and "-all_load".

4.Create an instance of MMAdView and setup for an interstitial

adView = [[MMAdView interstitialWithType:MMFullScreenAdLaunch 
                                    apid:YOUR_APID 
                                delegate:self 
                                loadAd:NO] retain];

[self.view addSubview:adView];

5.Implement Delegate Methods (Optional)

// pass demographic data to serve targeted ads

- (NSDictionary *) requestData {
    return [NSDictionary dictionaryWithObjectsAndKeys: 
                                @"21224", @"zip", 
                                @"35", @"age",
                                @"male", @"gender",
                                nil];
}

6.Memory Management

adView.refreshTimerEnabled = NO;
adView.delegate = nil;
[adView release], adView = nil;   

Note: Do not initialize an Interstitial ad view on a modal view controller.

Adding the SDK

Import libMMSDK.a and MMAdView.h

Open the iPhone/iPod-Touch/iPad window-based application where the library is going to be integrated into.


From the finder window where the libMMSDK.a file is located, drag the libMMSDK.a and MMAdView.h files into the XCode project, and drop it over the folder as shown in the image below:

Drag files.png


A dialog box will pop up; make sure that the "Copy items into destination group's folder" is checked as well as the "Add To Targets" option, as seen in the image below:

Adding options.png


The library file will be automatically added inside "Targets => '<project name>' => Link Binary With Libraries section" as well.

Using the Conversion Tracker

You can use our conversion tracker by simply calling the following method.

[MMAdView startSynchronousConversionTrackerWithGoalId:@"YOUR_GOAL_ID"];

See the API documentation for the conversion tracker for more information.

Passing Metadata

By adding a few lines to your code, you can provide metadata that can help Millennial deliver more relevant ads to your users. Metadata is information that your users have shared with you, and you have permission to share with us such as age, gender, zip code, income, and other such information. This can be done by simply utilizing the following method that returns a NSDictionary. Providing metadata is

The following is an example of inputting meta values into the ad request with the above mentioned method.

- (NSDictionary *) requestData {
    NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
    @"21224", @"zip", 
    @"28", @"age",
    @"male", @"gender",
    @"80000", @"income",
    @"single", @"marital",
    @"hispanic", @"ethnicity",
    @"single", @"orientation",
    @"0", @"children",
    @"independent", @"politics",
    @"bachelors", @"education",
    @"single", @"keywords",
    nil];
    return params;
}

The available metadata keys are:

  • age: in years (e.g. 18), or "unknown"
  • gender: "male", "female", or "unknown"
  • income: approximate number in US dollars (e.g. 65000).
  • zip: 5 digit US zip code, or "unknown"
  • marital: Marital status, options are: "single", "divorced", "engaged", "relationship", "swinger".
  • ethnicity: Options are: "hispanic", "africanamerican", "asian", "indian", "middleeastern", "nativeamerican", "pacificislander", "white", "other"
  • orientation: Sexual orientation, options are: "straight", "gay", "bisexual", "notsure", or "unknown".
  • children: Boolean ("true" or "false"), integer (e.g. 2), or "unknown".
  • politics: Political views or party affiliation, options are: "republican", "democrat", "conservative", "moderate", "liberal", "independent", "other", or "unknown".
  • education: Highest level of education, options are: "highschool", "incollege", "somecollege", "associate", "bachelors", "masters", "phd", "professional", or "unknown"
  • keywords: Any additional relevant description of the user or their preferences separated by commas. e.g. "soccer,scores,basketball".

Universal Applications

So that applications compatible with both the iPhone and iPad are able to receive detailed reporting, appropriate ad formats, and optimized targeting, you should create two separate applications under your mmDev account and note the different APIDs. You will be assigned an APID for iPhone and an APID for iPad. When developing a universal iOS application, your app should select the APID appropriate for the device being used. Below is a suggested implementation for universal apps:

#define MILLENNIAL_IPAD_APID @"<YOUR_IPAD_APID>"
#define MILLENNIAL_IPHONE_APID @"<YOUR_IPHONE_APID>"
#define MILLENNIAL_APID ((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) ? MILLENNIAL_IPAD_APID:MILLENNIAL_IPHONE_APID)

Known Issues

  • When running on iOS 3.x, tapping the status bar to scroll a UIScrollView to top may not work.

MMAdView API - SDK v4.5.3

Tasks

Initialization

+ adWithFrame:type:apid:delegate:loadAd:startTimer:

+ interstitialWithType:apid:delegate:loadAd:

Update location

+ updateLocation:

Getting a new ad

-refreshAd

Fetching and caching an ad for display later

-fetchAdToCache

-checkForCachedAd

-displayCachedAd

Properties

delegate

The delegate for the MMAdView

@property(nonatomic,assign) id<MMAdDelegate> delegate;

Discussion

You must set the delegate to nil before releasing the view. See MMAdDelegate for delegate methods.

Availability

v4.1.0 and later

refreshTimerEnabled

A boolean value to start or stop the MMAdView's internal refresh timer.

@property(nonatomic) BOOL refreshTimerEnabled;

Discussion

Set refreshTimerEnabled to NO to stop the internal refresh timer. Note that this will decrement the retain count of the view so make sure the view is properly retained. Set refreshTimerEnabled to YES to start the timer again. The default refresh duration is 60 seconds but you can set the duration by implementing the -adRefreshDuration delegate method.

Availability

v4.1.0 and later

Class Methods

adWithFrame:type:apid:delegate:loadAd:startTimer:

Initializes and returns an autoreleased MMAdView object based on the specified parameters

+ (MMAdView *) adWithFrame:(CGRect)aFrame 
                      type:(MMAdType) type 
                      apid: (NSString *) apid 
                  delegate: (id<MMAdDelegate>)aDelegate 
                    loadAd: (BOOL) loadAd 
                startTimer: (BOOL) startTimer

Parameters

aFrame: The frame rectangle for the view. The origin of the frame is relative to the superview in which you plan to add it. This method uses the frame rectangle to set the center and bounds properties accordingly.

type: The type of ad you want to create. See MMAdType for more information on the available types.

apid: A NSString with your Millennial Media Placement ID

aDelegate: The NSObject that implements the MMAdDelegate protocol. This is required or an exception will be raised.

loadAd: A boolean indicating if an ad should be loaded immediately upon initialization.

startTimer: A boolean indicating if the timer should be started. If NO, refreshTimerEnabled will also be set to NO.

Return Value

An autoreleased MMAdView object

Discussion

The MMAdView frame parameter is used when MMBannerAdTop or MMBannerAdBottom is passed in as type, otherwise the frame size is set to 300x250 when MMBannerAdRectangle, and CGRectZero when set to MMFullScreenAdLaunch or MMFullScreenAdTransition. When the type MMBannerAdBottom/MMBannerAdTop is passed, the frame size should be 320x53 but origin can be any point. When loadAd is set to NO, an ad must be requested by calling the refreshAd method.

When releasing an MMAdView object you must disable the refresh timer. ex:

adView.refreshTimerEnabled = NO;
[adView removeFromSuperview];

Availability

v4.1.0 and later

interstitialWithType:apid:delegate:loadAd:

Initializes and returns an autoreleased interstitial MMAdView object based on the specified parameters

+ (MMAdView *) interstitialWithType:(MMAdType) type apid: (NSString *) apid delegate: (id<MMAdDelegate>)aDelegate loadAd: (BOOL) loadAd

Parameters

type: The type of interstitial ad you want to create. If you don't pass an interstitial ad type, nil will be returned. See MMAdType for more information on the available types.

apid: A NSString with your Millennial Media Placement ID

aDelegate: The NSObject that implements the MMAdDelegate protocol. This is required or an exception will be raised.

loadAd: A boolean indicating if an ad should be loaded immediately upon initialization.

Return Value

An autoreleased MMAdView object or nil if a non interstitial type is passed.

Discussion

The MMAdView object will have a frame of CGRectZero and refreshTimerEnabled will be set to NO. You will have to manually show the ad by using - refreshAd.

When releasing an MMAdView object you must disable the refresh timer. ex:

adView.refreshTimerEnabled = NO;
[adView removeFromSuperview];

Availability

v4.1.0 and later

startSynchronousConversionTrackerWithGoalId:

Starts a synchronous connection to the Millennial Conversion tracker

+ (void) startSynchronousConversionTrackerWithGoalId: (NSString *) goalid

Parameters

goalid: The Millennial Media Goal Id for tracking conversions for your application.

Discussion

We recommend calling this method on a background thread to prevent blocking the main thread. If goalid is nil, an exception will be raised.

Availability

v4.1.0 and later

updateLocation:

Updates location for use in Millennial ad requests

+ (void) updateLocation: (CLLocation *) currentLocation;

Parameters

currentLocation: The CLLocation object either created or received via the CLLocationManager delegate methods

Discussion

Call this method when you receive a location update. If you turn location services off, call this function with a nil parameter. Location data becomes stale after 10 minutes and will no longer be passed with the ad request unless you update the location again.

Availability

v4.5.0 and later

version

Returns a NSString with the version of the running SDK

+ (NSString *) version

Return Value

Returns an NSString with the format MAJOR.MINOR.BUG. ex. 4.1.0

Availability

v3.0 and later

Instance Methods

refreshAd

Requests a new ad from Millennial and loads it

- (void) refreshAd

Discussion

The ad that is currently showing will be transitioned to the new ad received. If refreshTimerEnabled is true, the timer will be restarted with the duration specified in the adRefreshDuration. If adRefreshDuration isn't specified, the duration defaults to 60 seconds.

Availability

v4.1.0 and later

fetchAdToCache

Requests a new interstitial ad from Millennial and caches it for display later using the displayCachedAd method. At this time, the SDK does not support caching banner ads.

- (BOOL) fetchAdToCache

Discussion

If an ad has already been fetched for an Ad Type and APID combination, NO will be returned and the adRequestFailed: delegate will be called. If an ad is able to be requested, the adRequestIsCaching: delegate will be called in addittion to adRequestFailed: and YES will be returned.

Availability

v4.5.0 and later

checkForCachedAd

Checks to see if an interstitial ad has been fetched and is ready to be shown for a particular Ad Type and APID combination

- (BOOL) checkForCachedAd

Discussion

If an ad is available for display YES will be returned, otherwise NO.

Availability

v4.5.0 and later

displayCachedAd

If a fetched ad is available for a particular Ad Type and APID combination, the ad will be displayed.

- (BOOL) displayCachedAd

Discussion

If an ad is displayed YES will be returned, otherwise NO.

Availability

v4.5.0 and later

MMAdDelegate

adRefreshDuration

Sets the refresh duration of the internal MMAdView timer in seconds.

- (NSInteger) adRefreshDuration

Return Value

A NSInteger between 15 and 60.

Discussion

The MMAdView object has an internal timer that will automatically refresh the ad after the specified number of seconds. If refreshTimerEnabled is false, the return value is irrelevant.

Availability

v3.0 and later

requestData

Sets the data to be included with your ad requests.

- (NSDictionary *) requestData

Return Value

Return a NSDictionary with key values pairs corresponding to the data you wish to pass.

Discussion

Use this method to pass additional parameters with your ad requests including location data and market data.

Allowed Values

age, zip, income, kw

gender: male, female, unknown

marital: single, married, divorced, relationship, engaged

ethnicity: hispanic, africanamerican, asian, indian, middleeastern, nativeamerican, pacificislander, white, other

orientation: straight, bisexual, notsure, gay

Availability

v3.0 and later

accelerometerEnabled

Allows the internal usage of the UIAccelerometer

- (BOOL) accelerometerEnabled

Return Value

Return NO if you are using the accelerometer in your application. Default value is YES.

Discussion

MMAdView uses the built-in accelerometer to add interactivity to certain ads. It is recommended that you don't implement this delegate method unless your application uses the accelerometer for its own purposes.

Availability

v3.0 and later

adRequestSucceeded:

Called after an ad request has succeeded

- (void) adRequestSucceeded:(MMAdView *) adView

Parameters

adView: The MMAdView object whose ad request succeeded

Discussion

This method is called once after an ad request has succeeded

Availability

v3.0 and later

adRequestFailed:

Called an ad request has failed

- (void) adRequestFailed:(MMAdView *) adView

Parameters

adView: The MMAdView object whose ad request failed

Discussion This method will be called when the SDK is unable to get an ad or an empty response is returned.

Availability

v3.0 and later

adRequestIsCaching:

Called a response requiring caching is received and the creative has not been cached

- (void) adRequestIsCaching:(MMAdView *) adView

Parameters

adView: The MMAdView object that is caching

Discussion

This method is used to notify when an ad is being cached by using the fetchAdToCache method.

Availability

v4.2 and later

adRequestFinishedCaching:successful:

A caching creative has finished, either successfully or not.

- (void)adRequestFinishedCaching:(MMAdView *) adView successful: (BOOL) didSucceed;

Parameters

adView: The MMAdView object that was caching

successful: A boolean indicated if caching was successful or not.

Discussion

This method is used to notify when an ad is finished caching or has failed to cache.

Availability

v4.5 and later

adDidRefresh:

Called when the ad is being requested

- (void) adDidRefresh:(MMAdView *) adView

Parameters

adView: The MMAdView object that will refresh

Availability

v3.0 and later

adWasTapped:

Called after a banner ad has been tapped on and before an overlay will appear.

- (void) adWasTapped:(MMAdView *) adView

Parameters

adView: The MMAdView object that was tapped

Availability

v3.0 and later

applicationWillTerminateFromAd:

Called when launching an external application

- (void) applicationWillTerminateFromAd;

Discussion

This method will be called when the application will exit to go to another application such as the App Store, iTunes, or Safari.

Availability

v3.0 and later

adModalWillAppear:

Called when a modal view will become visible

- (void) adModalWillAppear;

Discussion

This method will be called to notify you that a modal view will appear. The modal will generally take up the entire screen.

Availability

v3.0 and later

adModalDidAppear:

Called when a modal view did become visible

- (void) adModalDidAppear;

Discussion

This method will be called to notify you that a modal view did appear. The modal will generally take up the entire screen.

Availability

v3.0 and later

adModalWasDismissed:

Called when a modal view was removed

- (void) adModalWasDismissed;

Discussion

This method will be called to notify you that a modal was dismissed and removed from the screen.

Availability

v3.0 and later

MMAdType

MMBannerAdTop

Discussion

Use this type if you want to show a banner ad at the top your app's view. This ad type will not change your frame origin or size so you would set a frame with the correct origin and a size of 320x53.

Availability

v3.0 and later

MMBannerAdBottom

Discussion

Use this type if you want to show a banner ad at the bottom your app's view. This ad type will not change your frame origin or size so you would set a frame with the correct origin and a size of 320x53.

Availability

v3.0 and later

MMBannerAdRectangle

Discussion

Use this type if you want to show a rectangle ad in your iPad app's view. This ad type will not change your frame origin but will set the size to 300x250.

Availability

v3.0 and later

MMFullScreenAdLaunch

Discussion

Use this type if you want to show an interstitial (fullscreen) ad when your app launches. The frame will automatically be set to CGSizeZero.

Availability

v3.0 and later

MMFullScreenAdTransition

Discussion

Use this type if you want to show an interstitial (fullscreen) ad. The frame will automatically be set to CGSizeZero.

Availability

v3.0 and later

Frequently Asked Questions

How do I get started with putting Millennial Media ads inside my app?

Signup for a publisher account on the Developer page. From the mmDev portal you will be given an id number called an APID and can download the iOS advertising SDK.

What is an APID?

An APID is a placement id number, given to you by Millennial Media. This unique identifier that tells us which application is calling for ads. Implementing the APID is required and helps us keep track of your revenue and advertising statistics that you can view in the mmDev portal.

Where can I get an APID?

Visit out Developer page and create an account. After providing some details, your APID will appear on your "Manage Applications" page.

What versions of iOS are supported?

The Millennial Media SDK supports applications running iOS 3.2+.

Why is my MMAdView not showing any ads?

It does take some time to activate an APID in our system. If you are getting no ads, then wait 1-2 hours to make sure our system correctly identifies your new placement. If the problem persists, you can contact us here for more help.

What will an ad click do?

A click creates a web overlay, opens the iTunes Store, opens a new browser, opens the Phone application, plays a video, or other action. You can see examples of our creatives on our developer page.

What is the latest version of the SDK?

The latest version is Version 4.5.3 (released 11/28/2011).

Where can I download the SDK?

Go to the Developer page and create an account. After you login, select "iOS" from the drop-down menu under "SDK Downloads".

What is Conversion Tracking and how do I get a Goal ID?

Conversion tracking allows publishers that promote their apps through Millennial Media's network to identify app downloads. You can get a goal ID and learn more by contacting us at http://developer.millennialmedia.com/contact.php.

I still have questions. How can I get help?

Use the contact page through the developer site located at http://developer.millennialmedia.com/contact.php.

Licenses

SBJSON License

Copyright (C) 2009 Stig Brautaset. All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  • Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Millennial Media SDK License

PLEASE READ THIS CAREFULLY. IF YOU DO NOT AGREE THESE TERMS, YOU ARE NOT AUTHORIZED TO DOWNLOAD OR USE THIS SDK.

THIS MOBILE APPLICATION SDK LICENSE AGREEMENT (THIS "AGREEMENT") IS A LEGAL AGREEMENT BETWEEN MILLENIAL MEDIA, INC. (“MILLENIAL MEDIA” OR “WE”) AND YOU INDIVIDUALLY IF YOU ARE AGREEING TO IT IN YOUR PERSONAL CAPACITY, OR IF YOU ARE AUTHORIZED TO DOWNLOAD THE SDK ON BEHALF OF YOUR COMPANY OR ORGANIZATION, BETWEEN THE ENTITY FOR WHOSE BENEFIT YOU ACT ("YOU"). MILLENIAL MEDIA OWNS AND OPERATES THE SHARING PLATFORM.

BY DOWNLOADING, INSTALLING, ACTIVATING OR USING THE SDK, YOU ARE AGREEING TO BE BOUND BY THE TERMS OF THIS AGREEMENT. IF YOU HAVE ANY QUESTIONS OR CONCERNS ABOUT THE TERMS OF THIS AGREEMENT, PLEASE CONTACT US AT DEVELOPER@MILLENNIALMEDIA.COM.

This Agreement governs your access to, and use of, the object code version of our proprietary software and associated application programming interface for use with mobile applications, as well as any related materials, including installation tools, sample code, source code, software libraries and documentation and any error corrections, updates, or new releases that we elect, in our sole discretion, to make available to you (all such materials, collectively, the “SDK”).

  1. License. Subject to the terms and conditions of this Agreement, Millennial Media hereby grants you a non-exclusive, non-transferable, non-sublicenseable, royalty-free right and license to copy and use the SDK solely for the purpose of performance pursuant to your mobile advertising agreement with Millennial Media, in accordance with the documentation (the “Purpose”). You acknowledge and agree that you have no rights to any upgrades, modifications, enhancements or revisions that Millennial Media may make to the SDK. You agree that we have no obligation to provide any support or engineering assistance of any sort unless we otherwise agree in writing.
  2. Restrictions. You may not use the SDK to: (i) design or develop anything other than a mobile application consistent with the Purpose; (ii) make any more copies of the SDK than are reasonably necessary for your authorized use thereof; (iii) modify, create derivative works of, reverse engineer, reverse compile, or disassemble the SDK or any portion thereof; (iv) distribute, publish, sell, transfer, assign, lease, rent, lend, or sublicense either in whole or part the SDK to any third party except as may specifically be permitted in Section 3 herein; (v) redistribute any component of the SDK except as set forth in Section 3 herein, or (vi) remove or otherwise obfuscate any proprietary notices or labels from the SDK. You may not use the SDK except in accordance with applicable laws and regulations, nor may you export the SDK from and outside the United States of America except as permitted under the applicable laws and regulations of the United Sates of America. You may not use the SDK to defraud any third party or to distribute obscene or other unlawful materials or information.
  3. End Users. If any constituent file of the SDK is distributed with your application, then you will ensure that any end-user obtaining access to such software application will be subject to an end-user license agreement containing terms at least as protective of Millennial Media and the SDK as the terms set forth in this Agreement.
  4. Copyright Notice. You must include all copyright and other proprietary rights notices that accompany the SDK in any copies that you produce.
  5. Proprietary Rights. Subject always to our ownership of the SDK, you will be the sole and exclusive owner of any software application developed using the SDK, excluding the SDK and any portions thereof.
  6. Feedback. In the event that you provide us any ideas, thoughts, criticisms, suggested improvements or other feedback related to the Site or the Services, (collectively "Feedback"), you agree we may use the Feedback to modify our products and services and that you will not be due any compensation, including any royalty related to the product or service that incorporates your Feedback. You grant to us a worldwide, royalty-free, fully paid, perpetual, irrevocable license to use, reproduce, modify, translate, distribute, perform, display, import, sell, offer for sale, make, have made and otherwise exploit the Feedback in any form, media, or technology, whether now known or hereafter developed, and to allow others to do the same.
  7. General Rules of Conduct. You agree not to use the SDK in a manner that:
  8. Conducts or promotes any illegal activities;
  9. Uploads, distributes, posts, transmits or otherwise makes available, content or information that is unlawful, harmful, threatening, abusive, harassing, defamatory, vulgar, obscene, libelous, invasive of another's privacy, hateful, harmful to minors in any way, or racially, ethnically or otherwise objectionable;
  10. Uses the SDK in any manner which interferes with the performance or functionality of the APIs or the Millennial Media services;
  11. Loads or transmits any form of virus, worm, Trojan horse, or other malicious code;
  12. Promotes or advertises any item, good or service that (i) violates any applicable federal, state, or local law or regulation, or (ii) violates the terms of service of any website upon which the content is viewed;
  13. Uses the SDK to generate unsolicited email advertisements or spam; or
  14. Uses any automatic, electronic or manual process to access, search or harvest information from an individual.
  15. Ownership. You understand and acknowledge that the software, code, proprietary methods and systems that make up the SDK are: (i) copyrighted by us and/or our licensors under United States and international copyright laws; (ii) subject to other intellectual property and proprietary rights and laws; and (iii) owned by us or our licensors. You must abide by all copyright notices, information, or restrictions contained in or attached to the SDK. If you are a U.S. Government end user, any of the components that constitute the SDK and its related documentation is a "commercial item" as that term is defined at 48 C.F.R. 2.101, consisting of "commercial computer software" and "commercial computer software documentation" as such terms are used in 48 C.F.R. 12.212. Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4, all U.S. Government end users acquire the SDK and any documentation provided with the SDK with only those rights set forth in this Agreement.
  16. Confidential Information. You will safeguard, protect, respect, and maintain as confidential the SDK, the underlying computer code to which you may obtain or receive access, and the functional or technical design, logic, or other internal routines or workings of the SDK, which are considered confidential and proprietary to Millennial Media.
  17. Geographical Restrictions. We make no representation that all of the SDK is appropriate or available for use in locations outside the United States or all territories within the United States. If you choose to use the SDK, you do so on your own initiative and are responsible for compliance with local laws.
  18. Modification of the SDK. We reserve the right to modify or discontinue the SDK with or without notice to you. We will not be liable to you or any third party should we exercise our right to modify or discontinue the SDK. If you object to any such changes, your sole recourse will be to cease use of the SDK. YOU AGREE THAT WE WILL NOT BE LIABLE TO YOU OR ANY OTHER PARTY FOR ANY TERMINATION OF YOUR ACCESS TO THE SDK.
  19. Termination. You acknowledge and agree that we, at our sole discretion, may terminate your use of the SDK without prior notice for any reason at any time. You agree that we shall not be liable to You or any third party for termination of your access to the SDK. In the event of any termination, you will immediately cease use of the SDK.
  20. DISCLAIMERS. THE SDK AS WELL AS ALL SOFTWARE, MATERIALS, AND TECHNOLOGY USED TO PROVIDE ANY OF THE FOREGOING, ARE PROVIDED ON AN "AS IS" AND "AS AVAILABLE" BASIS WITHOUT ANY WARRANTY OF ANY KIND. TO THE MAXIMUM EXTENT PERMITTED BY LAW, MILLENIAL MEDIA, OUR OFFICERS, DIRECTORS, AGENTS, AND EMPLOYEES EXPRESSLY DISCLAIM ALL REPRESENTATIONS AND WARRANTIES, WHETHER EXPRESS OR IMPLIED, ORAL OR WRITTEN, INCLUDING ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, ACCURACY, TITLE, QUIET ENJOYMENT, UN-INTERRUPTION, AND/OR SYSTEM INTEGRATION. MILLENIAL MEDIA, OUR OFFICERS, DIRECTORS, AGENTS, AND EMPLOYEES MAKE NO WARRANTY ABOUT THE ACCURACY, RELIABILITY, COMPLETENESS, QUALITY, OR TIMELINESS OF THESDK, OR THAT PROBLEMS WITH THE FOREGOING WILL BE CORRECTED, OR THAT THESDK ARE FREE OF VIRUSES AND OTHER HARMFUL COMPONENTS, OR THAT THEY WILL BE UNINTERRUPTED OR ERROR FREE.
  21. LIMITATIONS OF LIABILITY AND CONTENT. YOU ACKNOWLEDGE AND AGREE THAT WE ARE ONLY WILLING TO PROVIDE ACCESS TO THE SDK IF YOU AGREE TO CERTAIN LIMITATIONS OF OUR LIABILITY TO YOU AND TO THIRD PARTIES. IN NO EVENT WILL MILLENNIAL MEDIA, ITS PARENT, AFFILIATES, OFFICERS, DIRECTORS, AGENTS OR EMPLOYEES BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY INDIRECT, INCIDENTAL, SPECIAL AND CONSEQUENTIAL DAMAGES OR LIKE DAMAGES, INCLUDING, LOST PROFITS, GOODWILL, LOST OPPORTUNITIES AND INTANGIBLE LOSSES, ARISING IN CONNECTION WITH THE SDK OR THESE TERMS, INCLUDING, FOR EXAMPLE AND CLARITY ONLY, DAMAGES RESULTING FROM LOST DATA, LOST EMPLOYMENT OPPORTUNITIES, OR BUSINESS INTERRUPTIONS, OR RESULTING FROM THE USE OR ACCESS TO, OR THE INABILITY TO USE OR TO USE THE SDK. THESE LIMITATIONS OF LIABILITY APPLY REGARDLESS OF THE NATURE OF ANY CLAIM, WHETHER BASED ON WARRANTY, CONTRACT, TORT, OR ANY OTHER LEGAL OR EQUITABLE THEORY, AND WHETHER OR NOT MILLENNIAL MEDIA IS ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  22. YOU AGREE THAT YOUR SOLE AND EXCLUSIVE REMEDY FOR ANY CLAIMS ARISING IN CONNECTION WITH ANY VIOLATION BY US OF THIS AGREEMENT IS TO DISCONTINUE USING THE SDK. IN THE EVENT THAT A COURT DETERMINES THAT THE PRECEDING SENTENCE IS UNENFORCEABLE, OUR AGGREGATE LIABILITY FOR ALL CLAIMS ARISING IN CONNECTION WITH ANY VIOLATION OF THESE TERMS WILL NOT EXCEED ONE HUNDRED DOLLARS (U.S. $100.00). Some jurisdictions do not allow the exclusion of certain warranties or the limitation or exclusion of liability for certain types of damages. Accordingly, some of the above limitations and disclaimers may not apply to you. To the extent that we may not, as a matter of applicable law, disclaim any warranty or limit our liabilities, the scope and duration of such warranty and the extent of our liability will be the minimum permitted under such applicable law.
  23. WITHOUT LIMITING THE FOREGOING, UNDER NO CIRCUMSTANCES WILL WE OR OUR LICENSORS BE HELD LIABLE FOR ANY DELAY OR FAILURE IN PERFORMANCE RESULTING DIRECTLY OR INDIRECTLY FROM ACTS OF NATURE, FORCES, OR CAUSES BEYOND OUR REASONABLE CONTROL, INCLUDING, WITHOUT LIMITATION, INTERNET FAILURES, COMPUTER EQUIPMENT FAILURES, TELECOMMUNICATION EQUIPMENT FAILURES, OTHER EQUIPMENT FAILURES, ELECTRICAL POWER FAILURES, STRIKES, LABOR DISPUTES, RIOTS, INSURRECTIONS, CIVIL DISTURBANCES, SHORTAGES OF LABOR OR MATERIALS, FIRES, FLOODS, STORMS, EXPLOSIONS, ACTS OF GOD, WAR, GOVERNMENTAL ACTIONS, ORDERS OF DOMESTIC OR FOREIGN COURTS OR TRIBUNALS, OR NON-PERFORMANCE OF THIRD PARTIES.
  24. Indemnification. You agree to indemnify, defend and hold harmless Millennial Media, our officers, directors, co-branders and other partners, employees, consultants and agents, from and against any and all third-party claims, liabilities, damages, losses, costs, expenses, fees (including reasonable attorneys' fees and court costs) that such parties may incur as a result of or arising from (i) any Content you submit, post or transmit through the SDK, (ii) your use of the SDK, (iii) your violation of this Agreement, (iv) your violation of any rights of any other person or entity, or (v) any viruses, trojan horses, worms, time bombs, cancelbots or other similar harmful or deleterious programming routines input by you into the SDK.
  25. Electronic Communications. For contractual purposes, you (i) consent to receive communications from us in an electronic form; and (ii) agree that all terms and conditions, agreements, notices, documents, disclosures, and other communications ("Communications") that we provide to you electronically satisfy any legal requirement that such Communications would satisfy if it were in a writing. Your consent to receive Communications and do business electronically, and our agreement to do so, applies to all of your interactions and transactions with us. The foregoing does not affect your non-waivable rights. You may withdraw your consent to receive Communications electronically by contacting us in the manner described below. If you withdraw your consent, from that time forward, you must stop using the SDK. The withdrawal of your consent will not affect the legal validity and enforceability of any obligations or any electronic Communications provided or business transacted between us prior to the time you withdraw your consent. Please keep us informed of any changes in your email or mailing address so that you continue to receive all Communications without interruption.
  26. General Terms. You are responsible for compliance with all applicable laws. This Agreement and the relationship between you and Millennial Media will be governed by the laws of the State of Maryland, without giving effect to any choice of laws principles that would require the application of the laws of a different country or state. Any legal action, suit or proceeding arising out of or relating to this Agreement, or your use of the SDK must be instituted exclusively in the federal or state courts located in Baltimore, Maryland and in no other jurisdiction. You further consent to exclusive personal jurisdiction and venue in, and agree to service of process issued or authorized by, any such court. This Agreement are personal to you, and you may not transfer, assign or delegate your right and/or duties under this Agreement to anyone else and any attempted assignment or delegation is void. You acknowledge that we have the right hereunder to seek an injunction, if necessary, to stop or prevent a breach of your obligations hereunder. The paragraph headings in this Agreement, shown in boldface type, are included only to help make this Agreement easier to read and have no binding effect. Any delay or failure by us to exercise or enforce any right or provision of this Agreement will not constitute a waiver of such right or provision. No waiver by us will have effect unless such waiver is set forth in writing, signed by us; nor will any such waiver of any breach or default constitute a waiver of any subsequent breach or default. This Agreement constitute the complete and exclusive agreement between you and us with respect to the subject matter hereof, and supersedes all prior oral or written understandings, communications or agreements. If for any reason a court of competent jurisdiction finds any provision of this Agreement, or portion thereof, to be unenforceable, that provision of this Agreement will be enforced to the maximum extent permissible so as to effect the intent of the parties, and the remainder of this Agreement will continue in full force and effect. YOU AND MILLENNIAL MEDIA AGREE THAT ANY CAUSE OF ACTION ARISING OUT OF OR RELATED TO THE SITE, SERVICES OR MILLENNIAL MEDIA PLATFORM MUST COMMENCE WITHIN ONE (1) YEAR AFTER THE CAUSE OF ACTION ACCRUES, OTHERWISE, SUCH CAUSE OF ACTION IS PERMANENTLY BARRED.
Personal tools
For Mobile Web Developers
Creative Services