Recently, we announced the availability of native ads for apps in DFP. Here, we’re going to introduce you to creating native creatives with the DFP API using the ads Java client library. A native creative consists of a set of assets (headline, image, etc.) which are sent to mobile apps for custom rendering in their own code (see our Android and iOS developer guides for details).
Native creatives are actually just another type of template-based creative. While the DFP UI abstracts this, in the API you create a native creative using a TemplateCreative with the system-defined native template ID. The creative template IDs available in your network can be retrieved by the getCreativeTemplatesByStatement method in the CreativeTemplateService. You can also view these IDs in the UI under Delivery > Creatives > Native ad formats (see the ID below each native ad format name in the table). The native app install template ID is 10004400.
TemplateCreative nativeAppInstallCreative = new TemplateCreative(); nativeAppInstallCreative.setCreativeTemplateId(10004400L);
Because native creatives do not have a predetermined size, you need to set a placeholder size of 1x1.
Size size = new Size(); size.setWidth(1); size.setHeight(1); size.setIsAspectRatio(false); nativeAppInstallCreative.setSize(size);
Finally, specify a name and destination URL; this example is for the Pie Noon app:
nativeAppInstallCreative.setName("Pie Noon native ad"); nativeAppInstallCreative.setDestinationUrl( "https://play.google.com/store/apps/details?id=com.google.fpl.pie_noon");
Settings specific to native creatives are set via template variables. An app install native creative requires the following unique template variable names to be set:
Note that creative template variables are case sensitive and those of type AssetCreativeTemplateVariableValue (“Image” and “Appicon”) must have a unique filename.
You can find the full Java example on how to create native creatives in our GitHub repository here. All of our other ads client libraries have similar examples.
As always, if you have any questions, feel free to drop us a line on the DFP API forums or the Ads Developer Google+ page.
- Vincent Tsao, DFP API Team
Fall 2015 AdWords API Workshop registration is now open. Access the registration forms on the workshop website at www.adwordsapiworkshops.com.
Once you choose a location we'll send you an email confirming your registration.
Workshops will be held on the following dates and locations:
These workshops are technical in nature and are ideal for API developers. We hope to see you at these events. Register today!
If you have any questions about the AdWords API Workshops, you can post them on our forum. Check out our Google+ page for AdWords API updates.
GmailForwards
GmailSaves
GmailSecondaryClicks
DURING
Date
Week
v201506
var report = AdWordsApp.report(query, { apiVersion: 'v201506'});
The AdWords API Workshops are back, and the registration form and agenda will be available on the website soon: www.adwordsapiworkshops.com. In the meantime, you may review the site Resources section for previous event presentations.
These workshops are a series of technical events, ideal for those who are working with the AdWords API.
Stay tuned and keep an eye on the website for more details on how to register.
--AdWords API Team
Today we’re expanding on our earlier blog post, Manual ad break playback in the IMA SDKs. One of the major benefits mentioned in that blog post is the ability to let your users skip ads they’ve already seen when they resume a video stream they previously suspended. We’re going to show you how to implement that functionality. For the purposes of this demo, we’ll be using the HTML5 SDK, but the principles outlined here can be used to achieve the same functionality in all four of our SDK flavors.
If you’d like to follow along with these samples, you’ll need to first:
The first step towards our ultimate goal is to save the current time of the video when the user leaves the page. For simplicity’s sake, we’re going to be using HTML5’s built-in localStorage object. We’re going to override window.onbeforeunload to grab the current time of the video element when the user leaves the page and save it in local storage.
window.onbeforeunload
function init() { videoContent = document.getElementById('contentElement'); playButton = document.getElementById('playButton'); playButton.addEventListener('click', requestAds); window.onbeforeunload = onUserExit;}function onUserExit() { if (videoContent) { localStorage.setItem('watched_time', videoContent.currentTime); }}
Now that we’re saving the user’s progress, we’ll want to restore the video to that point when the user returns to the page. We’re going to add some code to the init method to grab the stored current time (if it exists) and seek to that time when our video loads.
init
function init() { videoContent = document.getElementById('contentElement'); playButton = document.getElementById('playButton'); playButton.addEventListener('click', requestAds); window.onbeforeunload = onUserExit; watchedTime = localStorage.getItem('watched_time') || 0; videoContent.addEventListener('loadedmetadata', function() { videoContent.currentTime = watchedTime; });}
Now that we’re keeping track of the user’s progress and restoring that progress when the user returns, we can skip and ad breaks they watched in a previous visit. To do that, we’ll modify our adBreakReadyHandler to call adsManager.start() only when the loaded ad break is set to play after the user’s most recent saved progress. To ensure the video starts after the skipped ad breaks, we’ll also add a call to videoContent.play() when we decide to skip an ad break.
adBreakReadyHandler
adsManager.start()
videoContent.play()
function adBreakReadyHandler(event) { if (event.getAdData().adBreakTime >= watchedTime || event.getAdData().adBreakTime == -1) { // -1 ensures we play post-rolls adsManager.start(); } else { videoContent.play(); }}
That’s all there is to it! Try starting your video and watching the first mid-roll break. When you leave the page and come back, clicking the play button will result in the video playing from where you left off. The first ad break you’ll see is the second mid-roll break.
As always, if you have any questions feel free to contact us via the support forum.