Tag Archives: Developer

Introducing the new Google Analytics Partner Gallery

Google Analytics has a vibrant ecosystem of analytics practitioners, advocates, and developers that drive great conversations, learnings, and sharing among passionate users. A central part of this ecosystem is partners, which can help users quickly increase the business value of Google Analytics through implementation expertise, analysis, and integrations.

To make it easier to find services and apps that are important to your business, we’ve re-launched the App Gallery as the Partner Gallery, the new destination to find partners and review their offerings. It includes:

Certified Partners are vetted by Google and meet rigorous qualification standards. This includes agencies and consultancies who offer web analytics implementations, analysis services and website testing and optimization services.

Ready-to-use applications that extend Google Analytics in new and exciting ways. This includes solutions that help analysts, marketers, IT teams, and executives get the most out of Google Analytics and complement functionality.



The Partner Gallery includes new features and improvements:
  • 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.
Visit the Partner Gallery to browse partner services and apps. If you’re interested in the Google Analytics Certified Partner or Technology Partner programs, learn how to become a partner.

Pete Frisella, Developer Advocate, Google Analytics Developer Relations team

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.

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.

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.

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.

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.

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.

Update: Creating SNDS Campaigns in AdWords

This post will help you configure the attributes of your campaigns in the AdWords API and ensure they're ready for the Search Network with Display Select (SNDS) migration.

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.


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!

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)
Ad Opens Overlay
onAdOpened
adViewWillPresentScreen
Ad Overlay is Closed
onAdClosed
adViewWillDismissScreen
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)
Ad Launches External App
onAdOpened
onAdLeftApplication
adViewWillLeaveApplication
User relaunches App
onAdClosed
-----

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+.