- A brand new look and layout.
- A combined view of both services and apps so you don’t need to visit multiple sites to find a solution.
- New search capabilities and category selection making it easier to filter and find what you’re looking for.
- Google Analytics Certified Partners are sorted based on your location to find partners that have an office near you.
- Media assets like screenshots / videos / case studies that highlight customer success stories and illustrate app features.
- Comments and ratings to review user experiences and provide feedback.
Tag Archives: Developer
New entity child limits in DFP
As part of our ongoing efforts to improve DFP's performance and stability, we will be introducing limits on select DFP items, beginning June 30, 2014. As an API user, here’s how this change will affect you.
If you create more children than the allowed maximum for an entity, or modify an existing entity so that its number of children exceeds those limits, the API will throw an EntityChildrenLimitReachedError. Refer to the error’s reason field for an explanation for each type of entity that exceeds a child limit. The best way to handle this situation is to catch ApiException errors in your code, check the error type, and perform whatever is appropriate for your application based on the reason.
For a more detailed example of best practices with ApiException
errors, please see this blog post on troubleshooting and error handling.
As always, if you have any suggestions or questions, feel free to drop us a line on our API forums or Ads Developer Google+ page.
Source: Google Ads Developer Blog
Filtering away archived line items in the DFP API
If you synchronize your line items regularly to a local database using the LineItem.getLineItemsByStatement method, you are hopefully already filtering by LineItem.lastModifiedDateTime and using our other best practices. We want to mention one other best practice that will help you synchronize your line items as quickly as possible.
Recently, DFP has begun to auto-archive old orders. This affects the lastModifiedDateTime
field of the line items in the orders. This means that you may suddenly get significantly more line items in one day’s synchronization than in the previous day’s depending on how many orders were auto-archived since your last synchronization. To prevent this, we recommend always filtering by isArchived. For example:
WHERE lastModifiedDateTime >= '2014-06-01T00:00:00' AND isArchived = false
As always, if you have any suggestions or questions, feel free to drop us a line on our API forums or Ads Developer Google+ page.
Source: Google Ads Developer Blog
Announcing the v201405 release of the DFP API
Today, we launch v201405 of the DFP API. This release brings better OAuth2 standards, consolidates line item goal information, and adds a lot more report fields. A detailed list of these features and what’s changed can be found on our release notes page.
OAuth2, line item goals, and reports
To align better with OAuth2 standards, starting in v201405 we have removed the OAuth2 SOAP object. This means that you can no longer pass OAuth2 authentication information through the SOAP header. Instead, you pass it in the HTTP header. All of our client libraries have already been updated to follow this process. If your integration is not using one of our client libraries, please be aware of this change when you upgrade to v201405.
We’ve heard your feedback that the line item goal fields such as unitsBought can be confusing. In this version, we have moved line item goal-related fields into their own object, called Goal. This makes it easier to understand and find line item goal information. For example, previously line item goal information would be set as follows (using the PHP client library):
$lineItem->unitsBought = 500000;
$lineItem->unitType = 'IMPRESSIONS';
Now this goal information is stored in its own object:
$goal = new Goal();
$goal->units = 500000;
$goal->unitType = 'IMPRESSIONS';
$lineItem->primaryGoal = $goal;
We’ve also heard your feedback regarding parity between the ReportService and the UI in terms of what dimensions, attributes, and columns are available when running a report. In v201405, we make available a whole slew of new report fields, including Gross Rating Points (GRP), business intelligence, shared selling, and SDK mediation dimensions and columns.
Increased quota for premium networks
Although not specific to v201405, the quota for premium networks has been raised. This means that if you want to limit your requests locally, we now recommend at most 8 requests per second for premium networks. For small business networks, we continue to recommend making at most 2 requests per second. As always, limiting your requests does not guarantee that all your requests will succeed, but will help mitigate quota errors. You should still be writing code to handle EXCEEDED_QUOTA errors. For more information about exception handling and recovery, please refer to this blog post.
Much deprecation, wow, so deprecated
We want to remind you that with each new version release, we’ll also be deprecating a number of older versions. Versions v201206 and earlier have now been turned off. All requests made against those versions will fail. Our next wave of versions to be turned off are v201302, v201211, and v201208. This will occur on August 1, 2014. For more information on this deprecation and what resources are available for migrating to the latest version, please see this blog post.
As always, if you have any suggestions or questions about the new version, feel free to drop us a line on our API forums or Ads Developer Google+ page.
Source: Google Ads Developer Blog
The new, improved Content API for Shopping
Since its launch in 2010, the Google Content API for Shopping has played a critical role in enabling merchants to manage product items, users, and subaccounts programmatically at scale. We’ve received a lot of feedback from you over the years, and today, we’re happy to announce a new version of this API.
The Content API version 2:
- introduces new core functionality, including item-level data quality information, simple inventory updates, and additional account management features
- is easier to use thanks to high quality client library support, improved tooling, reference documentation and integration with Google’s common API infrastructure
- has simplified request and response message formats, and now also supports JSON in addition to XML encoding
Version 2 of the API constitutes a big overhaul and we’re eager for you to try it! Version 1 of the API will continue to be available until the end of February 2015, but we recommend that you adopt the new version as early as possible to take advantage of its new and improved features.
New core functionality: Data quality, inventory and account management
In version 2 of the API, you can request full data quality reporting for the whole account as well as item-level information like disapprovals due to incorrect prices or unavailable landing pages.
The inventory service lets you update price and availability of any product without resubmitting other product details.
All existing account management features, such as linking AdWords accounts, adding authorized users, and updating settings are now available for all account types.
Client libraries, better tooling and more
If you don’t want to parse JSON or XML yourself, check out the client libraries for .NET, Dart, Go, Java, JavaScript, Objective-C, PHP, Python and Ruby. The libraries use OAuth 2.0 authorization and work with the Content API as well as many other Google APIs.
The standard Google API tools such as the API console support Content API version 2 out of the box. Additionally, in our API reference documentation, you can now scroll down to the bottom of any reference page to try the API. You can also visit the standalone API Explorer to browse a list of supported operations.
Simplified message formats
The new XML format is lighter than in version 1 of the API. JSON, which is both simpler to work with and uses fewer bytes to transfer the same data, is also supported in version 2.
Learn more
If you would like to learn more about the Content API version 2 you can check out the API documentation. We’ve also prepared a few code examples in PHP and Java if you would like to dive in straight away.
If you have any other questions or comments, please head over to our support forum.
Source: Google Ads Developer Blog
Updated DoubleClick Ad Exchange Buyer REST API examples to get you started
Whether you’re just starting out with the DoubleClick Ad Exchange Buyer REST API or are working with an unfamiliar client library, our examples will help you get started! Our examples are now on GitHub and have been expanded to cover the following languages:
Each of these include documentation to help you get started with the corresponding client library and demonstrate how you can use the Service Account authorization flow with the DoubleClick Ad Exchange Buyer REST API.
If you have any feedback or feature requests for these examples, we’d definitely be interested in hearing about it! Feel free to contact us via the forum or our Google+ page.
Source: Google Ads Developer Blog
Changes to the IMA SDK for iOS
The IMA SDK for iOS version beta7 will introduce some changes in the way you tell the SDK about your display area and companion slots, which lays the groundwork for more versatility in displaying ads. While these new, more versatile features aren’t quite ready yet, we recommend building with beta7 so you'll be prepared to take advantage of upcoming greater versatility and extending support to future iOS platforms.
Introducing the IMAAdDisplayContainer
In the beta6 version of the SDK, the IMAAdsManager contains an adView which you add to your UI to display ads (IMAAdsManager.adView). In the beta7 version of the SDK, you will provide the SDK with a UIView in which it will display ads when they are ready. This is done via the new IMAAdDisplayContainer. This new object will also contain information about your companion ad slots (but more on that later):
self.adDisplayContainer = [[IMAAdDisplayContainer alloc]
initWithAdContainer:self.videoView
companionSlots:nil];
In the example, we use the videoView as the UIView for the ad container. The SDK simply adds views to the provided UIView to display ads, so you won’t lose the required components for the content player already in the videoView. This IMAAdDisplayContainer will be passed to the IMAAdRequest, in place of the current companionSlots parameter:
IMAAdsRequest *request =
[[IMAAdsRequest alloc] initWithAdTagUrl:self.adTagUrlTextField.text
adDisplayContainer:self.adDisplayContainer
userContext:nil];
Changes to the IMACompanionAdSlot
In the beta6 version of the SDK, you provide the IMAAdsRequest with an NSArray of IMACompanionSlot objects, each of which is initialized with a width and height. When ads are loaded, you add these to your UI:
// Create your companion slots.
NSMutableDictionary *companions = [NSMutableDictionary dictionary];
companions[@"300x50"] =
[[IMACompanionAdSlot alloc] initWithWidth:300 height:50];
self.companionSlots = companions;
...
// Give the companion slots to the IMAAdsRequest.
IMAAdsRequest *request =
[[IMAAdsRequest alloc] initWithAdTagUrl:self.adTagUrlTextField.text
companionSlots:[self.companionSlots allValues]
userContext:nil];
...
// Once ads have been loaded, display the companion ads.
[self.smallCompanionSlot addSubview:
((IMACompanionAdSlot *)self.companionSlots[@"300x50"]).view];
In the beta7 version of the SDK, you will initialize the IMAAdDisplayContainer with an array of companion ad slots. You will then initialize the IMAAdsRequest with the IMAAdDisplayContainer. When ads are loaded, the SDK will fill in the companions for you: // Create your companion slots.
NSMutableDictionary *companions = [NSMutableDictionary dictionary];
companions[@"300x50"] =
[[IMACompanionAdSlot alloc] initWithView:self.smallCompanionSlot
width:300
height:50];
self.companionSlots = companions;
// Give the companion slots to the IMAAdDisplayContainer.
self.adDisplayContainer = [[IMAAdDisplayContainer alloc]
initWithAdContainer:self.videoView
companionSlots:[self.companionSlots allValues]];
// Request ads with the IMAAdDisplayContainer.
IMAAdsRequest *request =
[[IMAAdsRequest alloc] initWithAdTagUrl:self.adTagUrlTextField.text
adDisplayContainer:self.adDisplayContainer
userContext:nil];
These changes will allow for continued support of YouTube-hosted ads (including TrueView), as well as allow you to provide a custom player for ads further down the road, similar to the HTML5 custom playback option. A custom ad player is not intended to be used by everyone - in fact most of you will not need it - but it will offer support for some additional features in the future.
As always, if you have any questions feel free to contact us via the support forum.
Source: Google Ads Developer Blog
Update: Creating SNDS Campaigns in AdWords
In v201402, we introduced the
displaySelect
attribute to indicate the campaign state during the migration period. Consider displaySelect
as a transitional flag: it only has meaning when advertisingChannelType is set to SEARCH
and both search and content networks set to true in networkSettings. Elsewhere, it can be safely ignored.Starting September 16th 2014, we will begin automatically upgrading legacy Search & Display campaigns. Once the migration is complete, we will remove the
displaySelect
flag from the Campaign entity and service in a subsequent API release. Therefore, we recommend not setting any value for displaySelect
in your campaign creation code, so you don’t need to maintain it later. It is only useful for migrating Search & Display campaigns to SNDS.If you take a Search Only campaign that had
contentNetwork = false
in its networkSettings
, and set that to true
in v201402, thereby opting into the Display network, the API will also then set displaySelect
to true
, so that you don’t mistakenly create a legacy Search & Display campaign instead of an SNDS campaign.If you still have legacy Search & Display campaigns, we recommend you either split or migrate them before we automatically migrate them for you. There are multiple options for migrating, from switching over entirely to SNDS, to splitting your campaign into parts each targeting Display, Search, and/or SNDS separately.
We have taken these steps in order to reduce the number of changes required to your code. If you have any further questions about this, or any other, topic, please contact us on the forum or via our Google+ page.
Source: Google Ads Developer Blog
Legacy AdMob Sunset and Legacy SDK Deprecation Reminder
Summary: Legacy AdMob will sunset August 31st, 2014. The Google Play store will not accept apps using the legacy SDK after August 1st, 2014. Please update.
Greetings AdMob Developers!
We're pleased to announce we've completed the rollout of the new AdMob to over 200 countries. AdMob is now a complete platform for developers to monetize, promote and analyze their apps, with Google Analytics directly available in the AdMob interface. We hope you enjoy the new features it provides, including ad network optimization and simplified mediation. You can read more about the new features and changes in this help center doc.
Since the new AdMob is now available to everyone, we’re beginning our deprecation of the legacy AdMob, and will be sunsetting the old platform on August 31st, 2014. After August 31st:
- Ads will stop serving to legacy ad units
- Legacy house ad campaigns will stop serving
- The legacy AdMob UI will be inaccessible
Please upgrade to the new AdMob as soon as possible - and definitely before the end of August. If you encounter difficulties, please see the help docs and support forms in our Help Center.
We also want to remind you that after August 1st, 2014, the Google Play Store will no longer accept apps using the legacy AdMob SDK. If you're an Android publisher, you should migrate to Google Play Services as soon as possible. We have plenty of resources for you including our migration guide and intro video - and if you still need help, please ask your technical questions on our forum.
We hope that you're as excited about the evolution of AdMob as we are!
Source: Google Ads Developer Blog
Google Mobile Ads SDK – A Note on Ad Click Events
When you make an ad request using the Google Mobile Ads SDK, you’re probably setting an AdListener or GADBannerViewDelegate to listen for ad events. The click events for these listeners are slightly different on Android and iOS, so today we’ll take a deeper look at what events get invoked when an ad click:
- opens an overlay, for example an in-app browser
- launches an external application, for example an external browser or app store
Ad Opens an Overlay
Here are the ad events that get called when an ad opens an overlay:
Event | Android Callback(s) | iOS Callback(s) |
---|---|---|
adViewDidDismissScreen | ||
These events are pretty straightforward. When the ad overlay opens, you get a single callback. When the ad overlay closes, Android notifies you the moment the event happens, while iOS notifies you right before and after the event happens.
Ad Launches an External Application
When an ad launches an external application, the ad events are slightly different:
Event | Android Callback(s) | iOS Callback(s) |
---|---|---|
onAdLeftApplication | ||
Notice how on Android you still get the onAdOpened
and onAdClosed
events even if an ad leaves an application. But on iOS, the adViewWillPresentScreen
and adViewWillDismissScreen/adViewDidDismissScreen
events are only invoked when presenting and dismissing modal views.
So how do you know when the user returns to your iOS app? You can listen for the applicationWillEnterForeground delegate method that iOS provides.
Testing The Different Click Behaviors
Hopefully you’re already requesting test ads during application development. If you’re making test requests, you should already see these ads showing up in your development environment:


On iOS, you can use these ads to test both ad click behaviors. If you click the banner, the Google Mobile Ads SDK will launch an external web browser and call adViewWillLeaveApplication
. If you click the icon in the bottom-left corner of the ad, the SDK will launch an overlay and adViewWillPresentScreen
will get called.
Hopefully this clears up any confusion regarding any ad click events. If you have any additional questions, we’ll field them on our forum. You can also find us on Google+.