Announcing the Material Design Showcase and Awards

Posted by Rich Fulcher, Material Design Team

When we first announced material design in June 2014, we shared an aspirational highlights reel that demonstrated key material principles for motion, interaction, and visual design across a range of hypothetical apps. “Hypothetical” being the key word here—back then, material design was just an idea. Sure, designers and engineers at Google were already working hard on applying material to Google’s Android, iOS, and web apps, but the notion of a single design system that can work across platforms and brands was just an idea.

Fast-forward to today, and thousands of Android apps are adopting material design using the Android 5.0 SDK and AppCompat, while designers and developers begin to experiment with material design on iOS and the web as well. These apps are starting to realize that aspirational vision we set out with that sizzle reel.

Today, we’re celebrating the amazing design work from Google Play developers and announcing the Material Design Showcase and Material Design Awards.

With the Material Design Showcase, we’re highlighting 18 great material design apps through a collection on Google Play, just like with the Beautiful Design collection in years past.

Of those 18 apps, we’re recognizing 6 with a special award, which we handed out during Google I/O today and announced at the Material Now session hosted by Matias Duarte.

These 6 winners of our first ever Material Design Awards represent best-in-class applications of specific aspects of material design:

B&H Photo Video Audio Pro for Immersive Imagery

New York Times for Elegant Typography

Pocket for Adaptive Layouts

Pocket Casts for Seamless Browsing

Tumblr for Delightful Animation

Weather Timeline for Crafted Simplicity

So today, we have a new highlights reel, featuring these six wonderful and very real apps:


The individuals, teams, and companies behind these apps have made the promise of material design that much more of a reality.

What’s next

But remember, this is only the beginning. We’ll continue to recognize excellent material design in the future, evolving the awards as we evolve material design itself—together as a community.

If you’re a designer or developer just starting out with material design, make sure to check out these 18 apps in the Material Design Showcase. They’re a great source of inspiration, in addition to the awesome content on community sites like Dribbble. And if you’re wondering how to start implementing some of these ideas, get started today with the Creating Apps with Material Design training docs. When you publish your next great app with material design, be sure to let us know on Google+ and Twitter!

A Closer Look at Google Play services 7.5

Posted by Ian Lake, Developer Advocate

At Google I/O, we announced the rollout of Google Play services 7.5 that deliver new capabilities and optimizations to devices across the Android ecosystem. Google Play services ensures that you can build on the latest features from Google for your users, with the confidence that those services will work properly on Android 2.3 and higher devices.

You’ll find the addition of Smart Lock for Passwords, Instance ID, new APIs for Google Cloud Messaging and Google Cast, as well as access to the Google Maps API on Android Wear devices.

Smart Lock for Passwords

Typing in a password, particularly on a mobile device, is never a pleasant experience. In many cases, your users have already logged in on the web or another device – shouldn’t your login process know that? Smart Lock for Passwords builds on the Chrome Password Manager, adding a new CredentialsApi API and UI on Android to retrieve saved credentials as part of your login process and saving new credentials for later use on other Android devices and any Chrome browser. Both password-based and Identity Provider (IDP, like Google Sign-In) credentials are supported. Keep your users logged in as they move between and to new devices; don’t let them drop off, get frustrated, or end up with multiple accounts.

Learn more about Smart Lock for Passwords on the developer site.

Instance ID, Identity, and Authorization

Instance ID (IID) allows you to retrieve a unique identifier for every app instance, providing a mechanism to authenticate and authorize actions, even if your app does not have user registration and accounts. For example, this allows you to uniquely determine which app instance is sending a request from by including the Instance ID token. We’ve also made it easy to handle edge cases to ensure that you’ll have valid Instance ID tokens.

Google Cloud Messaging

Google Cloud Messaging (GCM) gives developers a battery efficient mechanism for sending information to your users as well as send upstream messages from a device to your server.

Google Cloud Messaging and InstanceID

Previously, GCM used a unique registration ID to refer to each device – while these IDs will continue to work, you can now utilize Instance ID tokens for GCM, gaining all of the advantages of InstanceID around handling error cases. Instance ID tokens are fully compatible with user notifications, allowing you to send notifications to all of a user’s devices.

Topic based subscriptions

You’ll also get another new feature for switching to InstanceID with GCM – topic based subscriptions! This makes it easy to publish a message to exactly the right audience and have GCM handle all the heavy lifting of sending to all subscribed instances. Your app can subscribe to multiple topics, allowing you to create any set of topics needed to best handle your app’s messaging needs.

Receiving messages with GCM

Of course, just subscribing to receive messages is only half the battle: receiving GCM messages can now be done using a GcmReceiver and a subclass of GcmListenerService. These two classes make it easy to help your app reliably process messages, even when the device is awakened from deep sleep.

GCM Network Manager

Applications often need to sync data with their servers when new information is available. In GCM we refer to this model as “send to sync”. We made this task much simpler with the introduction of the GCM Network Manager APIs, which handles many of the common implementation patterns such as waiting for network connectivity, device charging, network retries, and backoff. GcmNetworkManager will schedule your background tasks when it is most appropriate and it can batch multiple tasks together for efficiency and battery savings, even utilizing the JobScheduler APIs for best performance on Android 5.0+ devices. With support for both one-off tasks and periodic tasks, this API serves as a flexible framework for many different types of operations.

App Invites Beta

Now in beta, App Invites is new functionality for both Android and iOS that provides a standard UI for users to invite their contacts to install your app and optionally deep link specifically to selected content, using your users’ device and Google-wide contacts as a source to drive referrals to increase the reach of your app.

With the ability to send invites via SMS or email, this provides a great mechanism to organically grow your user base, give your users a consistent way to share your app with exactly who would like it, and track how effective your invites are.

With App Invites, our goal is to take the hard work out of building user referral and onboarding flows, so that you can focus on your core app experience. Learn more about App Invites on the developer site!

Google Cast

Google Cast is a technology that lets you easily cast content from your mobile device or laptop right to your TV or speakers. With the new ability to use remote display on any Android, iOS, or Chrome app, better media support, better game support, we hope your Google Cast experience is better than ever!

Remote Display API

We are making it easy for mobile developers to bring graphically intensive apps or games to Google Cast receivers with Google Cast Remote Display APIs for Android and iOS. The new Remote Display API allows you to build a tailored, integrated second screen experience, without requiring an identical mirroring of content between mobile devices and the Google Cast device.

Learn more about Remote Display on the Google Cast Developers Site!

Autoplay and Queuing APIs

Playing single media items on Chromecast has been something RemoteMediaPlayer (or CastCompanionLibrary’s VideoCastController) has been doing well for some time. With this release, RemoteMediaPlayer is gaining a full media queue and support for autoplay for a seamless media playback experience. This ensures that all connected devices can easily maintain a synchronized queue of upcoming media items, opening up new possibilities of creating collaborative Google Cast media experiences.

Game Manager APIs for Google Cast

Bringing your game to Google Cast can make for a great multiplayer experience, using a mobile device as a game controller and the TV to display the action. To make it easier to send messages and state changes to all connected clients and the cast receiver, Google Play services 7.5 introduces the GameManagerClient and the Game Manager APIs for Google Cast, available for Android, iOS, Chrome, and for receivers.

Android Wear

Watches are great devices for telling time. But what if in addition showing you when you are, watches could easily show you where you are? With the new release, you can now use the familiar Maps APIs on Android Wear devices:

This makes it possible to display fully interactive maps, as well as lite mode maps, directly on Android Wear devices. You’ll be able to scroll and zoom interactive maps, show the user’s current location, and more. Check out the full list of supported features in the developer documentation and check out all the details on the Geo Developers blog.

Google Fit

Google Fit is an open platform designed to make building fitness apps, whether that means retrieving sensor data like current location and speed, collecting and storing activity data, or automatically aggregating that data into a single view of the user’s fitness data.

You’ll now be able to use the RecordingApi for gathering estimated distance traveled and calories burned data, making it available to your app and other Google Fit enabled apps via the HistoryApi.

Being active can take many forms. While some activities are easily measured in terms of steps or distance, strength training is measured in terms of type, resistance and repetitions. This type of data can now be stored in Google Fit via new support for a large number of workout exercises, helping users build a complete view of their activity.

SDK is now available!

Google Play services 7.5 is now available: get started with updated SDK now!

To learn more about Google Play services and the APIs available to you through it, visit the Google APIs for Android site.

Empowering successful global businesses on Google Play

Posted by Ellie Powers, Product Manager, Google Play

With more than 50 billion app installs over the past year from users across 190 countries, Google Play continues to see incredible growth thanks to developers like you creating amazing experiences. Play is now reaching more than one billion users every month.

In February, we announced that we had paid out more than $7 billion to developers in the prior year alone. This week at Google I/O, we’re introducing new and powerful tools to help you further grow your business, improve decision making based on smarter insights, and better engage your user base with more relevant content.

Acquire users from the Developer Console

Once you’ve built a great app, the next important step is to proactively find ways to promote it and grow a loyal user base. App install ads are one powerful way to do that. In the coming months, you’ll be able to quickly and easily set up ad campaigns right from within the Google Play Developer Console for the first time.

All you need to do is set a total budget and the cost you’re willing to pay per user and we’ll scale your app promotion across our networks, including Google Search, AdMob, YouTube and the search ads we’re piloting on Google Play. With this new feature, you will will be able to better find the customers that are most likely to install your app.

Actionable insights with the Acquisition and Conversion Funnel

Whether you pay to acquire users or not, you want to know where they’re coming from. Through the Developer Console, you will soon be able to get a snapshot of how many users visit your Store listing, install your app, and make purchases. You’ll see where your most valuable users come from — across organic and paid traffic — and better understand where to focus your efforts.

Optimize your Play store listing with experiments

Your Play Store listing is extremely important, as it’s often the first touch point users have with your app. Starting today, we’re making it easier to optimize this page with support for A/B tests. You can run experiments with different versions of text and graphics to see which are most effective in converting visits into installs on Google Play. In our pilot program, we were thrilled to see that some developers like Kongregate achieved double-digit improvements in their install rates so far.

Test your app automatically on real devices with Cloud Test Lab

With the large variety of Android form factors in the market, testing your app on real devices is a critical step to ensuring a positive user experience on any device. However, you may not have access to every device that your users do. So we’re integrating the newly announced Cloud Test Lab into the Developer Console, which will allow you to automatically test your apps on hundreds of popular physical Android devices for free. We’re going to be rolling out this pilot program gradually, so we’ll welcome your feedback on it.

For each APK you upload to an alpha or beta channel, Google Play will execute fully automated testing of your app against physical devices matching your app targeting criteria and output a report with a detailed analysis of issues, including screenshots and logs. Google Cloud Test Lab will roll out to all developers later this year; you can sign-up to become a tester in the Developer Console now.

Build a data-driven games business with Player Analytics

Google Play Games has activated more than 180M new users in the past six months and continues to be the fastest growing mobile gaming platform in history.

Over the coming months, we’re adding new reports, player segments, game metrics, and event types to Player Analytics to help you manage your games business. We’re also bringing enhancements to our live operations tools that will enable dynamic content updates that make games feel more alive and engaging, gameplay to respond to changing player needs, and more fun, personalized user experiences. As the bar for success in mobile gaming continues to rise, we’re continuing to evolve our tools to help you meet the soaring expectations of players.

Find great apps – developer pages and search results

There are several ways in which we are improving the discoverability of great apps and games on Google Play to help drive more engagement. Starting today, you can create a unique homepage on Google Play to promote your entire app catalog. With your own developer page, you are able to upload graphics, explain what your company is all about and pick a special app to feature. This gives you a single destination to promote all of your apps on Google Play.

We are also helping guide users with broad interests (e.g. “shopping”) in a new search results experience.

The focus is on organizing results in an intuitive way that allows users to narrow their intent — such as grouping shopping apps into coupons apps and fashion apps. By doing so, users will be able to better see the range of apps that satisfy their needs, while also increasing the chances of discovering new and innovative apps that you’re building.

Family-friendly content in Google Play

Starting today, we’re making it easier to find family-friendly content on Google Play through new discovery features. On the Apps & Games and Movies & TV homepages, users can now hit the “Family” star to see a curated set of options for specific age groups. In Play Books, tap the “Children’s Books” star. These pages let you browse by age ranges to find content that’s the best fit for the family. If you’ve already opted-in your apps to the Designed for Families program and they’ve met the requirements, they’ll be included in the new family section so that parents can find suitable, trusted, high-quality apps and games more easily. Find out more about opting-in to the Designed for Families program.

Join us at Google I/O 2015

To learn more, tune-in live to “Developers connecting the world through Google Play” at 1pm PT / 4pm ET / 9pm GMT on May 29 on google.com/io.

If you’re at I/O 2015, come along to our breakout sessions where we’ll be talking about and demo’ing these new features. Find our sessions in the I/O 2015 schedule.

Check out developer.android.com/distribute over the coming weeks and months as we add I/O videos and more details about these and other new features.

New media partnerships and ad solutions for mobile app promotion

As complexity increases in the app ecosystem, successful developers are looking for new ways to measure, manage, and optimize across multiple ad networks and operating systems.  This morning, at our annual I/O conference, we announced via Livestream a new set of media partnerships and ads offerings designed to meet the unique needs of mobile app marketers.  
Transparent, open and reliable measurement solutions
For app developers looking to drive installs and engagement, it’s critical to understand the effectiveness of various media partners and placements. That’s why we have been investing in solutions to help developers apply consistent measures across a fragmented ecosystem of ad networks, and understand the quality of users that each delivers.  
Google Analytics for Apps provides an industry-leading solution for in-app analytics that is increasingly benefiting advertisers as they seek more transparency into ad effectiveness across networks.  You can already use Google Analytics to track the performance of your mobile app install campaigns and understand the lifetime value of your users on both Android and iOS. As of today, we’ve built partnerships with 20+ ad networks including InMobi and Millennial Media since launching iOS conversion tracking late last year. Data integration with these partners provides a comprehensive view of app value across networks based on the metrics developers care about (i.e., LTV and retention), helping you make better decisions on where to spend your advertising dollars. In the next few months, you’ll be able to “postback” your conversions to referring networks in order to optimize your traffic — all made possible with a single SDK. 
And it’s not just about our measurement solutions.  We recognize that developers should have choices when it comes to attribution vendors, and are committed to open solutions for the industry.  That’s why we also announced the ability to integrate app install and event data from key third party measurement partners into AdWords. Working with third parties, including Adjust, Appsflyer, Apsalar, Kochava, and Tune, we are able to increase measurement accuracy between different trackers in AdWords, ensuring your data is accurate and  reliable.
By partnering with these leading ad platforms and tracking systems, we believe we can make the entire mobile apps ecosystem stronger and more connected — all with the goal of making developers more successful.
But we didn’t stop there. 
It’s easier than ever to promote your apps across Google 
For developers looking to promote their app, we offer a variety of placements across Google Search, the AdMob network, mobile sites, and YouTube.  And earlier this year, we announced Search Ads on Google Play. By showing ads alongside app search results, you can reach consumers right when they’re looking for a new app, at the moment they are ready to install
Click for full-sized image
Today we announced Universal App Campaigns, a new campaign type that allows advertisers to reach consumers across Google media more efficiently and effectively.  Universal App Campaigns offers a simple way to set up install ads for your Android apps in AdWords or directly from the Google Play Developer Console
Click for full-sized image
With a single campaign, you can scale your reach across Google Search, the AdMob network, mobile sites, YouTube and Google Play. Just provide us with a few inputs about your app what your ad creative will say, the audience you wish to reach, and how much you want to spend we’ll do the rest for you. Behind the scenes, our ad creation and bidding engines will help maximize performance for your campaigns so you can spend more time building and enhancing your apps.  Search Ads on Google Play and Universal App Campaigns will be rolled out to developers and advertisers in the coming months.
Complete solutions for your entire business
Today at I/O we also announced solutions to help you develop apps, engage users organically, and earn more money from your app.  Our innovations in analytics and ads are designed to complement these offerings, and allow you to grow your business with measurement solutions that are open and reliable, and promotion tools that make ad buying easier and more effective.  Thank you to all the developers out there who are building these experiences. We look forward to engaging with your apps and supporting your ongoing innovation by working closely with you and your partners in the ecosystem.

Posted by: Jonathan Alferness, Vice President, Product Management

Android M Developer Preview & Tools

By Jamal Eason, Product Manager, Android

Today at Google I/O, we announced a developer preview of the next version of Android, the M release. Last year’s developer preview was a first for Android and we received great feedback. We want to continue to give you developers early access to Android so you have time to get your apps ready for the next version of Android. This time with the M Developer Preview, we will provide a clear timeline for testing and feedback plus more updates to the preview build.

Visit the M Developer Preview for downloads and documentation

The Android M release: improving the fundamentals

For the M release, we focused on improving the core user experience of Android, from fixing thousands of bugs, to making some big changes to the fundamentals of the platform:

  • Permissions – We are giving users control of app permissions in the M release. Apps can trigger requests for permissions at runtime, in the right context, and users can choose whether to grant the permission. Making permission requests right when they’re needed means users can get up and running in your app faster. Also, users have easy access to manage all their app permissions in settings. On M, as a developer, you should design your app to prompt for permissions in context and account for permissions that don’t get granted. As more devices upgrade to M, app permission behavior will be a critical development flow to test.
  • Runtime App Permissions

  • App links – We are making it even easier to link between apps. Android has always allowed apps to register to natively handle URLs. Now you can add an autoVerify attribute to your app manifest so that users can be linked deep into your native app without any disambiguation prompt. App links, along with App Indexing for Google search, make it easier for users to discover and re-engage with your app.
  • Battery – We’re making Android devices smarter about managing power through a new feature called Doze. With M, Android uses significant motion detection to learn if a device has been left unattended for a while. In this state, Android will exponentially back off background activity, trading off a little bit of app freshness for longer battery life. Consider how this may affect your app; for instance, if you’re building a chat app, you may want to make use of high priority messages to wake your app when the device is dozing.

The Android M release: advancing assistance and payments

We are also delighted to announce a couple of big new features:

  • Now on tap – We are making it even easier for Android users to get assistance with Now on tap — whenever they need it, wherever they are on their device. For example, if your friend texts you about dinner at a new restaurant, without leaving the app, you can ask Google Now for help. Using just that context, Google can find menus, reviews, help you book a table, navigate there, and deep link you into relevant apps. As a developer, you can implement App Indexing for Google search to let users discover and re-engage with your app through Now on tap.
  • Now on tap

  • Android Pay & Fingerprint – We’ve built on our work with Near Field Communications (NFC) in Gingerbread and Host Card Emulation in Kitkat to develop Android Pay. Android Pay will enable Android users to simply and securely use their Android phone to pay in stores or in thousands of Android Pay partner apps. With M, native fingerprint support enhances Android Pay by allowing users to confirm a purchase with their fingerprint. Moreover, fingerprint on M can be used to unlock devices and make purchases on Google Play. With new APIs in M, it’s easy for you to add fingerprint authorization to your app and have it work consistently across a range of devices and sensors.

These are just a few highlights from the M Developer Preview that we announced today. The M preview will be available for download right after the keynote.

Android Developer Tools

In addition to the developer preview, we are launching new tools to help you in the development of your Android App:

  • Android Studio v1.3 Preview – To help take advantage of the M Developer Preview features, we are releasing a new version of Android Studio. Most notable is a much requested feature from our Android NDK & game developers: code editing and debugging for C/C++ code. Based on JetBrains Clion platform, the Android Studio NDK plugin provides features such as refactoring and code completion for C/C++ code alongside your Java code. Java and C/C++ code support is integrated into one development experience free of charge for Android app developers. Update to Android Studio v1.3 via the Canary channel and let us know what you think.
  • Android Studio 1.3 with Android NDK Support

  • Android Design Support Library – Making Material design apps gets even easier with the new Android Design support library. We have packaged a set a key design components (e.g floating action button, snackbar, navigation view, motion enabled Toolbars) that are backward compatible to API 7 and can be added to your app to create a modern, great looking Android app without building everything from scratch.
  • Google Play Services – Today we also are releasing v7.5 of Google Play services which includes new features ranging from Smart Lock for Passwords, new APIs for Google Cloud Messaging and Google Cast, to Google Maps API on Android Wear devices.

Get Started

The M Developer Preview includes an updated SDK with tools, system images for testing on the official Android emulator, and system images for testing on Nexus 5, Nexus 6, Nexus 9, and Nexus Player devices. We are excited to expand the program and give you more time to ensure your apps support M when it launches this fall. Based on your feedback, we plan to update the M Developer preview system images often during the developer preview program. The sooner we hear from you, the more feedback we can integrate, so let us know!

To get started with the M Developer Preview and prepare your apps for the full release, just follow these steps:

  1. Update to Android Studio v1.3+ Preview
  2. Visit the M Developer Preview site for downloads and documentation.
  3. Explore the new APIs & App Permissions changes
  4. Explore the Android Design Support Library & Google Play Services APIs
  5. Get the emulator system images through the SDK Manager or download the Nexus device system images.
  6. Test your app with your supported Nexus device or emulator
  7. Give us feedback

Game Performance: Geometry Instancing

Posted by Shanee Nishry, Games Developer Advocate

Imagine a beautiful virtual forest with countless trees, plants and vegetation, or a stadium with countless people in the crowd cheering. If you are heroic you might like the idea of an epic battle between armies.

Rendering a lot of meshes is desired to create a beautiful scene like a forest, a cheering crowd or an army, but doing so is quite costly and reduces the frame rate. Fortunately this is possible using a simple technique called Geometry Instancing.

Geometry instancing can be used in 2D games for rendering a large number of sprites, or in 3D for things like particles, characters and environment.

The NDK code sample More Teapots demoing the content of this article can be found with the ndk inside the samples folder and in the git repository.

Support and Extensions

Geometry instancing is available from OpenGL ES 3.0 and to OpenGL 2.0 devices which support the GL_NV_draw_instanced or GL_EXT_draw_instanced extensions. More information on how to using the extensions is shown in the More Teapots demo.

Overview

Submitting draw calls causes OpenGL to queue commands to be sent to the GPU, this has an expensive overhead which may affect performance. This overhead grows when changing states such as alpha blending function, active shader, textures and buffers.

Geometry Instancing is a technique that combines multiple draws of the same mesh into a single draw call, resulting in reduced overhead and potentially increased performance. This works even when different transformations are required.

The algorithm

To explain how Geometry Instancing works let’s quickly overview traditional drawing.

Traditional Drawing

To a draw a mesh you’d usually prepare a vertex buffer and an index buffer, bind your shader and buffers, set your uniforms such as a World View Projection matrix and make a draw call.

To draw multiple instances using the same mesh you set new uniform values for the transformations and other data and call draw again. This is repeated for every instance.

Drawing with Geometry Instancing

Geometry Instancing reduces CPU overhead by reducing the sequence described above into a single buffer and draw call.

It works by using an additional buffer which contains custom per-instance data needed by your shader, such as transformations, color, light data.

The first change to your workflow is to create the additional buffer on initialization stage.

To put it into code let’s define an example per-instance data that includes a world view projection matrix and a color:

C++

struct PerInstanceData
{
 Mat4x4 WorldViewProj;
 Vector4 Color;
};

You also need to the structure to your shader. The easiest way is by creating a Uniform Block with an array:

GLSL

#define MAX_INSTANCES 512

layout(std140) uniform PerInstanceData {
    struct
    {
        mat4      uMVP;
        vec4      uColor;
    } Data[ MAX_INSTANCES ];
};

Note that uniform blocks have limited sizes. You can find the maximum number of bytes you can use by querying for GL_MAX_UNIFORM_BLOCK_SIZE using glGetIntegerv.

Example:

GLint max_block_size = 0;
glGetIntegerv( GL_MAX_UNIFORM_BLOCK_SIZE, &max_block_size );

Bind the uniform block on the CPU in your program’s initialization stage:

C++

#define MAX_INSTANCES 512
#define BINDING_POINT 1
GLuint shaderProgram; // Compiled shader program

// Bind Uniform Block
GLuint blockIndex = glGetUniformBlockIndex( shaderProgram, "PerInstanceData" );
glUniformBlockBinding( shaderProgram, blockIndex, BINDING_POINT );

And create a corresponding uniform buffer object:

C++

// Create Instance Buffer
GLuint instanceBuffer;

glGenBuffers( 1, &instanceBuffer );
glBindBuffer( GL_UNIFORM_BUFFER, instanceBuffer );
glBindBufferBase( GL_UNIFORM_BUFFER, BINDING_POINT, instanceBuffer );

// Initialize buffer size
glBufferData( GL_UNIFORM_BUFFER, MAX_INSTANCES * sizeof( PerInstanceData ), NULL, GL_DYNAMIC_DRAW );

The next step is to update the instance data every frame to reflect changes to the visible objects you are going to draw. Once you have your new instance buffer you can draw everything with a single call to glDrawElementsInstanced.

You update the instance buffer using glMapBufferRange. This function locks the buffer and retrieves a pointer to the byte data allowing you to copy your per-instance data. Unlock your buffer using glUnmapBuffer when you are done.

Here is a simple example for updating the instance data:

const int NUM_SCENE_OBJECTS = …; // number of objects visible in your scene which share the same mesh

// Bind the buffer
glBindBuffer( GL_UNIFORM_BUFFER, instanceBuffer );

// Retrieve pointer to map the data
PerInstanceData* pBuffer = (PerInstanceData*) glMapBufferRange( GL_UNIFORM_BUFFER, 0,
                NUM_SCENE_OBJECTS * sizeof( PerInstanceData ),
                GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_RANGE_BIT );

// Iterate the scene objects
for ( int i = 0; i < NUM_SCENE_OBJECTS; ++i )
{
    pBuffer[ i ].WorldViewProj = ... // Copy World View Projection matrix
    pBuffer[ i ].Color = …               // Copy color
}

glUnmapBuffer( GL_UNIFORM_BUFFER ); // Unmap the buffer

And finally you can draw everything with a single call to glDrawElementsInstanced or glDrawArraysInstanced (depending if you are using an index buffer):

glDrawElementsInstanced( GL_TRIANGLES, NUM_INDICES, GL_UNSIGNED_SHORT, 0,
                NUM_SCENE_OBJECTS );

You are almost done! There is just one more step to do. In your shader you need to make use of the new uniform buffer object for your transformations and colors. In your shader main program:

void main()
{
    …
    gl_Position = PerInstanceData.Data[ gl_InstanceID ].uMVP * inPosition;
    outColor = PerInstanceData.Data[ gl_InstanceID ].uColor;
}

You might have noticed the use gl_InstanceID. This is a predefined OpenGL vertex shader variable that tells your program which instance it is currently drawing. Using this variable your shader can properly iterate the instance data and match the correct transformation and color for every vertex.

That’s it! You are now ready to use Geometry Instancing. If you are drawing the same mesh multiple times in a frame make sure to implement Geometry Instancing in your pipeline! This can greatly reduce overhead and improve performance.

Dogs, Nazis, and Horses

Dogs, Nazis, and Horses

I gave a talk about animals.

View

Always-on and Wi-Fi with the latest Android Wear update

Posted by Wayne Piekarski, Developer Advocate

A new update to Android Wear is rolling out with lots of new features like always-on apps, Wi-Fi connectivity, media browsing, emoji input, and more. Let’s discuss some of the great new capabilities that are available in this release.

Always-on apps

Above all, a watch should make it easy to tell the time. That’s why most Android Wear watches have always-on displays, so you can see the time without having to shake your wrist or lift your arm to wake up the display. In this release, we’re making it possible for apps to be always-on as well.

With always-on functionality, your app can display dynamic data on the device, even when the app is in ambient mode. This is useful if your app displays information that is continuously updated. For example, running apps like Endomondo, MapMyRun, and Runtastic use the always-on screen to let you keep track of how long and far you’ve been running. Zillow keeps you posted about the median price of homes nearby when you’re house-hunting.

Always-on functionality is also useful for apps that may not update data very frequently, but present information that’s useful for reference over a longer period of time. For example, Bring! lets you keep your shopping list right on your wrist, and Golfshot gives you accurate distances from tee to pin. If you’re at the airport and making your way to your gate, American Airlines, Delta, and KLM let you keep all of your flight info a glance away on your watch.

Note: the above apps will not display always-on functionality on your watch until you receive the update for the latest version of Android Wear.

Always-on functionality works similar to watch faces, in that the power usage of the display and processor is kept to a minimum by reducing the colors and refresh rate of the display. To implement an always-on Activity, you need to make a few small changes to your app’s AndroidManifest.xml, your app’s build.gradle, and the Activity to declare that it supports ambient mode. A code sample and documentation are available to show you how it works. Be sure to tune in to the livestream at Google I/O next week for Android Wear: Your app and the always-on screen.

Wi-Fi connectivity and cloud sync

Many existing Android Wear devices already contain hardware support for Wi-Fi, and this release enables software support for Wi-Fi. The saved Wi-Fi networks on your phone are copied to your watch during setup, and your watch automatically connects to those Wi-Fi networks when it loses Bluetooth connection to your phone. Your watch can then connect to your phone over the Internet, even if they’re not on the same Wi-Fi network.

You should continue to use the Data Layer API for all communications between the watch and phone. By using this standard API, your app will always work, no matter what kind of connectivity the user’s wearable supports. Cloud sync also introduces a new virtual node in the Data Layer called the cloud node, which may be returned in calls to getConnectedNodes(). Learn more in the Multi-wearable support section below.

Multi-wearable support

The release of Google Play services 7.3 now allows support for multiple wearable devices to be paired simultaneously to a single phone or tablet, so you can have a wearable for fitness, and another for dressing up. While DataItems will continue to work in the same way, since they are synchronized to all devices, working with the MessageApi is a little different. When you update your build.gradle to use version 7.3 or higher, getConnectedNodes() from the NodeApi will usually return multiple nodes. There is an extra virtual node added to represent the cloud node used to communicate over Wi-Fi, so all developers need to deal with this situation in their code.

To help simplify finding the right node among many devices, we have added a CapabilityApi, allowing your nodes to announce features they provide, for example downloading images or music. You can also now use the ChannelApi to open up a connection to a specific device to transfer large resources such as images or audio streams, without having to send them to all devices like you would when embedding assets into data items. We have updated our Android Wear samples and documentation to show the best practices in implementing this.

MediaBrowser support

The Android 5.0 release added the ability for apps to browse the media content of another app, via the android.media.browse API. With the latest Android Wear update, if your media playback app supports this API, then you will be able to browse to find the next song directly from your watch. This is the same browse capability used in Android Auto. You implement the API once, and it will work across a variety of platforms. To do so, you just need to allow Android Wear to browse your app in the onGetRoot() method validator. You can also add custom actions to the MediaSession that will appear as controls on the watch. We have a Universal Media Player sample that shows you how to implement this functionality.

Updates to existing devices

The latest version of Android Wear will roll out via an over-the-air (OTA) update to all Android Wear watches over the coming weeks. To take advantage of these new features, you will need to use targetSdkVersion 22 and add the necessary dependencies for always-on support. We have also expanded the collection of emulators available via the SDK Manager, to simulate the experience on all the currently available devices, resolutions, and shapes, including insets like the Moto 360.

In this update, we have also disabled support for apps that use the unofficial, activity-based approach for displaying watch faces, as announced in December. These watch faces will no longer work and should be updated to use the new watch face API.

Since the launch of Android Wear last summer, Android Wear has grown into a platform that gives users many possibilities to personalize their watches, with a variety of shapes and styles, a range of watch bands, and thousands of apps and watch faces. Features such as always-on apps and Wi-Fi allow developers even more flexibility to give users amazing experiences with Android Wear.

Android Developer Story: Wooga’s fast iterations on Android and Google Play

Posted by Leticia Lago, Google Play team

In order to make the best possible games, Wooga works on roughly 40 concepts and prototypes per year, out of which 10 go into production, around seven soft launch, and only two make it to global launch. It’s what they call “the hit filter.” For their latest title, Agent Alice, they follow up with new episodes every week to maintain player interest and engagement over time.

The ability to quickly iterate both live and under development games is therefore key to Wooga’s business model — Android and Google Play provide them the tools they need and mean that new features and updates are made on Android first, before they get to other platforms.

Find out more from Sebastian Kriese, Head of Partnerships, and Pal Tamas Feher, Head of Engineering, and learn how the iteration features of Android and Google Play have contributed to successes such as Diamond Dash, Jelly Splash, and Agent Alice.

You can find out more about building successful games businesses on Android and Google Play at Google I/O 2015: in person, on the live stream, or session recordings after the event. Check out the following:

  • Developers connecting the world through Google Play – Hear how the new mobile ecosystem including Google Play and Android are empowering developers to make good on the dream of connecting the world through technology to improve people’s lives. This session will be live streamed.
  • Growing games with Google — In addition to consoles, PC, and browser gaming, as well as phone and tablet games, there are emerging fields including virtual reality and mobile games in the living room. This talk covers how Google is helping developers across this broad range of platforms. This session will be live streamed.
  • What’s new in the Google Play Developer Console – Google Play’s new launches will help you acquire more users and improve the quality of your app. Hear an overview of the latest features and how you can start taking advantage of them in the Developer Console.
  • Smarter approaches to app testing — Hear about the new ways Google can help maximize the success of your next app launch with cheaper and easier testing strategies.

Marketo Scores 10X Higher Conversion Rate With Google Analytics


“Google Analytics has helped us increase the effectiveness of our AdWords remarketing campaigns by improving the targeting of our audiences and allowing us to present more relevant ads.” 
Mike Telem, VP of Product Marketing at Marketo 
Marketo, a leading marketing automation company, is a strategic partner for thousands of companies. To take their own marketing to the next level, Marketo needed an analytics platform that was flexible enough to combine external data with user site behavior. They wanted to seamlessly leverage that data to improve the relevance of their marketing.
Marketo used a two-step approach for their marketing: first they used Marketo’s Real-Time Personalization (RTP) product to identify characteristics—such as product interest and industry type—of Marketo’s website visitors. Then they passed this data to Google Analytics in the form of events. This allowed Marketo to see Google Analytics visitor demographics and behavior information next to Marketo’s RTP-identified characteristics for a more holistic picture of their user base in Google Analytics.
Using Google Analytics as the single source for customer data, Marketo segmented audiences in Analytics based on conversion stage or business vertical. With native integrations between Google Analytics and AdWords, Marketo was able to pass these specialized remarketing lists to AdWords and serve more personalized remarketing ads to its users in just a few, easy clicks.
These tailored ads had a huge impact and Marketo saw a jump in both engagement and conversions. Across the board, remarketing with Google Analytics drove a 10X higher conversion rate compared to traditional display marketing campaigns. Marketo also saw 200% more conversions in its B2C segment and an increase of 150% in conversions for its enterprise visitors.
To read the full case study, click here
Posted by: Kelley Sternhagen, Google Analytics Marketing 

Google Analytics Hackathon in London – Retrospective

On March 25th, the Google Analytics Premium team hosted the first Google Analytics Hackathon in London. 18 developers from several agencies worked on the Google offices for a full day session of ‘hacking’. They connected devices like motion sensors, cameras, Raspberry Pi mini computers and even helicopters to send data to Universal Analytics using the Measurement Protocol – using “simple” technology to simulate real world applications.
The goal of the event was to help agencies innovate and think out of the box about how to use the Google Analytics Measurement Protocol with to collect valuable data from other sources than just websites and apps. Each group received a hackathon kit’, consisting of Raspberry Pis, motion detectors, cameras, Google Glass, smart watches, barcode scanners, credit card readers, Smart Things home automation sets, beacons, some basic python scripts, documentation and one Android controlled helicopter.

The teams were free to build what they wanted and came up with great solutions. Here are the most innovative ideas:
  1. A helicopter enthusiast racetrack: Hobby pilots swipe their member cards to log to the system and fly a remote controlled helicopter along a racetrack – Google Analytics successfully measures lap times and stores them with the pilot customer ID.
  2. The burglar alarm: Detects a burglary using real time events in Google Analytics with a motion detector and a camera.
  3. Healthy cat: Decides how much you feed your cat at night based on how many times the cat entered and left the house as measured by Google Analytics.

Here are some of the feedback we received from developers.
“It was an inspirational session and we already started experimenting with measurement protocol more and come up with some innovative ideas tailored to our clients” – BadriNarayanan Srinivasan, iProspect UK
“Something to highlight about the event was the chance to work with new and interesting technologies (bar code and card scanners, Android watches, Google Glass) and to integrate these with Google Analytics. Learning about new applications to help integrate GA/the use of the Measurement Protocol with Android and iOS apps was also awesome” – Jeff Lukey, Periscopix
“The day was brilliant and organised very well. It was great to be given such a wide range of technologies to try and use” – David Nwosu, DBi

Supermetrics: Bringing more of your cost data into Google Analytics

The following is a guest post from Supermetrics, a Google Analytics Technology Partner.

Google Analytics has some great tools to help you keep track of how well your ad campaigns bring new users to your website, including Goals, Multi-Channel Funnels, and Enhanced Ecommerce. But acquisition or conversion data alone don’t give you the full picture of ad performance. To understand how well your campaigns are doing, you need to contextualize conversion rates with cost data. 
Set up automatic cost data uploads 
AdWords linking lets you see your AdWords data imported to your Google Analytics account, though getting data from other sources can take longer and be a more manual process. You can make the process easier and go faster with a tool like Supermetrics Uploader add-on
Built using the Google Analytics Data Import feature, Supermetrics Uploader lets you set up automatic daily uploads from your Facebook Ads and Bing Ads with just a few clicks. You can also use Supermetrics Uploader to to import historical advertising data going back several years, and use it to manually upload CSV formatted data from any source. If your ad destination URLs are tagged with utm parameters, the imported cost data will be mapped to Google Analytics session data, and you’ll immediately see your return on ad spend (ROAS) and revenue per click (RPC) metrics for each campaign.

Watch this one-minute video to get an overview of Supermetrics Uploader.

See all of your cost data in your reports
Supermetrics Uploader can help get you a clear picture of how all your campaign spend compares with the results without having to switch between different reporting systems.
Within twenty-four hours after scheduling your first upload with Supermetrics Uploader, your data will start appearing in your Google Analytics Cost Analysis report, and in any of your Custom Reports that include ad cost, impressions, or clicks. All of your imported data will also be available in any 3rd party tools that connect to the to Google Analytics Reporting API.
- The Google Analytics Developer Relations team

Exercise or Games? Why Not Both!

Posted by Alice Ching, Google Engineer

We are pleased to announce the release of Games in Motion, an open source game sample to demonstrate how developers can make fun games using Google Fit and Android Wear. Do you ever go on a jog and feel like there is a lack of incentive to help you run better? What if you were a secret agent and had to use your speed and your nifty gadget to complete missions?

With Games in Motion, you can enhance your exercise with missions and actions on your Android Wear device, while logging your jogs to the cloud.

Games in Motion is written in Java programming language using Android Studio. It demonstrates multiple Android technologies.

  • Android Wear bridges notifications from a phone or tablet to a paired Android Wear device. The notifications are stacked so we can show multiple stats at the same time.
  • Google Fit API collects and processes fitness data and sessions. This allows us to use the fitness data to show user progress. All exercise sessions done in Games in Motion will be recorded to Google Fit as well.
  • Google Play Games Services is used to create and unlock achievements.
  • Several different Android audio APIs are integrated.
  • JUnit tests are present for the data-driven parser, which demonstrates how unit testing can be done within Android Studio.
  • You can download the latest open source release from GitHub. We hope to inspire similar Android games, where multiple different form factors are combined for a fun experience.

    Android Developer Story: The Hunt — Increased engagement with material design and Google Play

    Posted by Laura Della Torre, Google Play team

    We’ve been in San Francisco talking with the team from The Hunt — a style and product sharing community. They’ve recently lifted the rate at which Android users start hunts to 20 percent after successfully implementing material design in the app, which is a 30 percent improvement over other platforms. As The Hunt’s Product Designer Jenny Davis puts it, “it felt like having a team of design experts on hand,” which lets them focus on what matters to the Android user.

    But as we find out, that’s not the whole story. Beta testing — managed from the Google Play Developer Console — also allowed them to iterate design and features daily. Based on feedback, they introduced the floating action button, which helped boost new hunts and helpful responses from the community. This speed and freedom is something the team thought possible only with their mobile website, until they started working with the Android tools.

    Watch the video to discover more about how design and rapid iteration has been key to building a strong community.

    Learn about using the tools that have helped improve user engagement for The Hunt:

    • Material design — learn more about material design and how it helps you create beautiful, engaging apps.
    • Beta testing — discover how to easily deliver test versions of your app to users for feedback before release.

    If my dogs were a pair of middle-aged men

    If my dogs were a pair of middle-aged men

    View

    Introducing Search Response and Airings Data in TV Attribution

    The following is a cross post from Adometry by Google, a Marketing Analytics and Attribution product

    Mass media drives people to interact with brands in compelling ways. When a TV or radio ad creates an I-want-to-know, I-want-to-go, or an I-want-to-buy moment in the mind of a consumer, many pursue it online. Immediately – and on whatever screen they have handy.

    Last year, we announced Adometry TV Attribution, which measures the digital impact of offline channels such as television and radio. Now, we’re moving TV Attribution forward by integrating Google Search query data and Rentrak airings data to help marketers better understand the important moments their broadcast investments create.
    New Search Behavior, New Search Analysis
    Broadcast media doesn’t just drive consumers directly to websites — it drives searches. Now, TV attribution lets you analyze minute-by-minute aggregated Google Search query data against spot-related keywords to detect and attribute search “micro-conversions” to specific TV airings. 
    With insights on the entire digital customer journey — including search behaviors — brands can better evaluate broadcast network and daypart, specific ad creative, and keyword performance. As a result, brands can:
    • Assess Immediate Influence: See which messages are sticking in the minds of consumers to both maximize TV interest and choose ideal keywords for SEO and paid search strategies.
    • Evaluate Awareness Goals: Optimize against a digital signal even when a site visit isn’t the primary goal, such as in brand awareness or sponsorship campaigns.
    • Analyze Competitive Category: Glean which generic keywords drive category interest for the industry — a type of insights not possible through site traffic analysis alone. 

    Rentrak Partnership Speeds TV Attribution Insights
    Knowing when your spots aired and collecting that data for timely TV attribution analysis can be a challenge. Marketers who buy broadcast media through agencies often don’t have direct access to this data. And once data is obtained — after coordinating with multiple agencies, partners, and TV measurement companies — the time lag makes for outdated analysis. 
    TV Attribution now solves these challenges a new partnership with Rentrak, the leading and trusted source for TV airings information. 
    What Rentrak Integration Delivers
    Integrating directly with Rentrak TV Essentials, TV Attribution now overcomes some of the biggest hurdles in TV measurement, with increases in: 
    • Actionability: TV Attribution can more quickly and easily obtain TV data for analysis without time-consuming coordination from you or your agencies.  
    • Accuracy: Rentrak provides a comprehensive data set with aggregated viewership information from more than 30 million televisions across the country, and from more than 230 networks.
    • Frequency: A direct relationship means more frequent reporting since there is no longer a manual find-and-transfer of data required from TV buying partners.
    “What makes this partnership so exciting is it removes the biggest barrier to truly measuring TV effectiveness, timely access to spot airings data including impressions,” said Tony Pecora, CMO for SelectQuote. “Rather than hunting and gathering data, we are now able to spend our time evaluating insights and optimizing our marketing investments across both TV and digital. As a CMO, this is a really big win for our business.”
    Want to Get Moving?

    The gap between offline and digital measurement continues to close. Learn more about how Adometry TV Attribution, now with Google Search query data and integrated Rentrak airings data, can help you gain more actionable cross-channel insights.

    Posted by Dave Barney, Product Manager

    Integrate Play data into your workflow with data exports

    Posted by Frederic Mayot, Google Play team

    The Google Play Developer Console makes a wealth of data available to you so you have the insight needed to successfully publish, grow, and monetize your apps and games. We appreciate that some developers want to access and analyze their data beyond the visualization offered today in the Developer Console, which is why we’ve made financial information, crash data, and user reviews available for export. We’re now also making all the statistics on your apps and games (installs, ratings, GCM usage, etc.) accessible via Google Cloud Storage.

    New Reports section in the Google Play Developer Console

    We’ve added a Reports tab to the Developer Console so that you can view and access all available data exports in one place.

    A reliable way to access Google Play data

    This is the easiest and most reliable way to download your Google Play Developer Console statistics. You can access all of your reports, including install statistics, reviews, crashes, and revenue.

    Programmatic access to Google Play data

    This new Google Cloud Storage access will open up a wealth of possibilities. For instance, you can now programmatically:

    • import install and revenue data into your in-house dashboard
    • run custom analysis
    • import crashes and ANRs into your bug tracker
    • import reviews into your CRM to monitor feedback and reply to your users

    Your data is available in a Google Cloud Storage bucket, which is most easily accessed using gsutil. To get started, follow these three simple steps to access your reports:

    1. Install the gsutil tool.
      • Authenticate to your account using your Google Play Developer Console credentials.
    2. Find your reporting bucket ID on the new Reports section.
      • Your bucket ID begins with: pubsite_prod_rev (example:pubsite_prod_rev_1234567890)
    3. Use the gsutil ls command to list directories/reports and gsutil cp to copy the reports. Your reports are organized in directories by package name, as well as year and month of their creation.

    Read more about exporting report data in the Google Play Developer Help Center.

    Note about data ownership on Google Play and Cloud Platform: Your Google Play developer account is gaining access to a dedicated, read-only Google Cloud Storage bucket owned by Google Play. If you’re a Google Cloud Storage customer, the rest of your data is unaffected and not connected to your Google Play developer account. Google Cloud Storage customers can find out more about their data storage on the terms of service page.

    There’s a lot to explore with Google Play services 7.3

    gps

    Posted by Ian Lake, Developer Advocate

    Today, we’re excited to give you new tools to build better apps with the rollout of Google Play services 7.3. With new Android Wear APIs, the addition of nutrition data to Google Fit, improvements to retrieving the user’s activity and location, and better support for optional APIs, there’s a lot to explore in this release.

    Android Wear

    Google Play services 7.3 extends the Android Wear network by enabling you to connect multiple Wear devices to a single mobile device.

    While the DataApi will automatically sync DataItems across all nodes in the Wear network, the directed nature of the MessageApi is faced with new challenges. What node do you send a message to when the NodeApi starts showing multiple nodes from getConnectedNodes()? This is exactly the use case for the new CapabilityApi, which allows different nodes to advertise that they provide a specific functionality (say, the phone node being able to download images from the internet). This allows you to replace a generic NodeListener with a more specific CapabilityListener, getting only connection results and a list of nodes that have the specific functionality you need. We’ve updated the Sending and Receiving Messages training to explore this new functionality.

    Another new addition for Android Wear is the ChannelApi, which provides a bidirectional data connection between two nodes. While assets are the best way to efficiently add binary data to the data layer for synchronization to all devices, this API focuses on sending larger binary data directly between specific nodes. This comes in two forms: sending full files via the sendFile() method (perfect for later offline access) or opening an OutputStream to stream real time binary data. We hope this offers a flexible, low level API to complement the DataApi and MessageApi.

    We’ve updated our samples with these changes in mind so go check them out here!

    Google Fit

    Google Fit makes building fitness apps easier with fitness specific APIs on retrieving sensor data like current location and speed, collecting and storing activity data in Google Fit’s open platform, and automatically aggregating that data into a single view of the user’s fitness data.

    To make it even easier to retrieve up-to-date information, Google Play Services 7.3 adds a new method to the HistoryApi: readDailyTotal(). This automatically aggregates data for a given DataType from midnight on the current day through now, giving you a single DataPoint. For TYPE_STEP_COUNT_DELTA, this method does not require any authentication, making it possible to retrieve the current number of steps for today from any application whether on mobile devices or on Android Wear – great for watch faces!

    Google Fit is also augmenting its existing data types with granular nutrition information, including protein, fat, cholesterol, and more. By leveraging these details about the user’s diet, developers can help users stay more informed about their health and fitness.

    Location

    LocationRequest is the heart of the FusedLocationProviderApi, encapsulating the type and frequency of location information you’d like to receive. An important, but small change to LocationRequest is the addition of a maximum wait time for location updates via setMaxWaitTime(). By using a value at least two times larger than the requested interval, the system can batch location updates together, reducing battery usage and, on some devices, actually improving location accuracy.

    For any ongoing location requests, it is important to know that you will continue to get good location data back. The SettingsApi is still incredibly useful for confirming that user settings are optimal before you put in a LocationRequest, however, it isn’t the best approach for continual monitoring. For that, you can use the new LocationCallback class in place of your existing LocationListener to receive LocationAvailability updates in addition to location updates, giving you a simple callback whenever settings might have changed which will affect the current set of LocationRequests. You can also use FusedLocationProviderApi’s getLocationAvailability() to retrieve the current state on demand.

    Connecting to Google Play services

    One of the biggest benefits of GoogleApiClient is that it provides a single connection state, whether you are connecting to a single API or multiple APIs. However, this made it hard to work with APIs that might not be available on all devices, such as the Wearable API. This release makes it much easier to work with APIs that may not always be available with the addition of an addApiIfAvailable() method ensuring that unavailable APIs do not hold up the connection process. The current state for each API can then be retrieved via getConnectionResult(), giving you a way to check at runtime whether an API is available and connected.

    While GoogleApiClient’s connection process already takes care of checking for Google Play services availability, if you are not using GoogleApiClient, you’ll find many of the static utility methods in GooglePlayServicesUtil such as isGooglePlayServicesAvailable() have now been moved to the singleton GoogleApiAvailability class. We hope the move away from static methods helps you when writing tests, ensuring your application can properly handle any error cases.

    SDK is now available!

    Google Play services 7.3 is now available: get started with updated SDK now!

    To learn more about Google Play services and the APIs available to you through it, visit the Google Play services section on the Android Developer site.

    Supercharge your Google Analytics with SkyGlue

    The following is a guest post from SkyGlue, a Google Analytics Technology Partner
    SkyGlue is a powerful add-on tool for Google Analytics that helps web analysts to get more out of Google Analytics. With SkyGlue, you can automate Event Tracking for your website, zoom in on visitor analytics, and export and integrate your Google Analytics data with your own database or CRM. 
    Automatic Event Tracking: Custom data collection without IT help
    Your website probably offers many ways for visitors to interact with your content, so you need to know what your visitors do on your site, and not just which pages they visit. Although you collect important data about interactions like clicks, downloads, and modal popups using Google Analytics Event Tracking, it requires a fair amount of additional setup. And if you don’t have the IT resources to set up Event Tracking, it means that you’re missing out on collecting this important data. 
    SkyGlue helps you gain independence from IT resources by automating Event Tracking with on-the-fly customization using SkyGlue web portal. By adding one line of JavaScript to your website, the SkyGlue app can track interactions with any HTML element on your website and then send this data to your Google Analytics account.  

    SkyGlue Event Tracking visual overlay

    Visitor analytics + Data export
    SkyGlue supports multiple approaches to visitor tracking and offers special reports that let you see the entire sequence of visits and interactions. Integrated fully with Google Analytics advanced segments, these reports let you zoom-in on selected groups of visitors, helping you understand your customers’ behavior, discover patterns, identify technical glitches, improve customer service, and find ways to increase conversion and retention rates. You can also use SkyGlue to export your Google Analytics data on a daily basis, and integrate it with your own CRM and other data sources.
    abc_appliances_updated.jpg

    SkyGlue Individual Visitor Report (not based on real data)

    SkyGlue puts some of Google Analytics most powerful features in the hands of every analyst. Use it to automate Event Tracking, get access to visitor analytics reports, and export and integrate Google Analytics data with other data sources. 
    SkyGlue is free to try and takes only a few minutes to set up – check it out and see customer reviews in the Google Analytics Partner Gallery
    For more information, visit the SkyGlue website and read real-world examples of how SkyGlue has already helped many business and organizations get more out of Google Analytics.  
    - The Google Analytics Developer Relations team

    Turbulence

    Turbulence

    View