Monthly Archives: June 2018

Improving discovery of quality apps and games on the Play Store

Posted by Paul Bankhead, Director, Product Management, Google Play

Every day, millions of people come to the Play Store to discover the best apps and games. As part of our continued effort to deliver great experiences to our users, we regularly update the Play Store to help people find and discover safe, high quality, and relevant apps and games.

Over the last year, we've been enhancing our search and discovery algorithms' consideration of app quality and user engagement. This means that apps and games that have high retention rates, low crash rates, low uninstalls, and many other factors, are recommended more often.

Recently, we increased the importance of engagement and app quality in our recommendation systems and users reacted favorably to the changes. With more high quality titles being surfaced in the Play Store's recommendations, people are playing the games they download more often.

We believe that providing great experiences for our users on Google Play will encourage a healthier, growing Android ecosystem. We encourage all developers to review some of the suggestions in this post and on developers.android.com for guidance and best practices.

Before fireworks, people hit the road and fly the skies

As World Cup fans stayed glued to the TV, people in the U.S. geared up for a holiday and commemorated the life of an icon in music. Here’s a look at a few of the trending searches this week, with data from the Google News Lab.

Get outta town

4th of July is coming up in the U.S., and people are skipping town. According to Google Flights data, several of the top trending destinations for 4th of July travel are outside the United States: Moscow, Russia; Ponta Delgada, Portugal; New Orleans, Louisiana; Cartagena, Colombia; and Lisbon, Portugal are at the top of the list. For people who are traveling by car instead of airplane, Google Maps data can tell you the best time to hit the road (and when the traffic will peak), according to your city.

A Justice retires

Upon Supreme Court Justice Anthony Kennedy’s surprise retirement announcement, people searched to find out why Justice Kennedy was retiring, as well as for his letter to the President sharing the news. The top related search however was for Brett Kavanaugh, a former clerk for Justice Kennedy, and rumored key contender to fill his role.

The Father of the King

Two days after the ninth anniversary of Michael Jackson’s passing, news of family patriarch Joe Jackson’s death inspired a wave of searches for a family that defined American music. Jackson, who initially served as manager of the Jackson 5, had never been more searched than the late King of Pop until this week. When people searched for Michael Jackson’s iconic music this week, the top three songs in the Search charts were “Billie Jean,” “Bad,” and—in number 1—“Thriller.”

The field narrows to 16

In World Cup news this week, Iceland’s fairytale run came to an end and Germany got the boot, causing people to search, “Will Joachim Löw resign?” In the U.S., however, the top search on Löw was inspired by that pesky umlaut: how do you pronounce his name? And bringing it Home(r) with the final query: the unearthing of a possibly prophetic “Simpsons” episode featuring Mexico vs. Portugal led people ask, “How do The Simpsons predict the future?”

Top of the muffin to you!

Searches for “muffin top” went up in Search this week, and not because people are working on their summer bods. McDonald’s announced that the muffin top will now be a part of their breakfast menu, and thought it came in behind “biscuit” and “burrito” in the list of top-searched  McDonald’s breakfast menu items, search interest “mcdonalds muffin top” heated up by 2,850 percent.


A toolkit to bring digital learning to afterschool programs

With support from Google, the National AfterSchool Association (NAA) recently released the Afterschool Tech Toolkit, designed to guide afterschool programs in effectively integrating technology into their programs. In this post, Gina Warner, president and CEO of NAA, shares more their process of engaging community experts to create this tool.

Hearing this, our team embarked on a journey, supported by a grant from Google, to better understand the barriers that afterschool practitioners face in providing digital opportunities.

We interviewed over 100 afterschool leaders, and heard that though they want to integrate technology into existing afterschool programs, lack of of Wi-Fi and devices prevents students from accessing technology and digital learning opportunities to complete assignments, thereby perpetuating the digital divide. Afterschool professionals think it’s important to help students produce technology—rather than just consuming it—but there’s a lack of resources and training to help encourage this innovative spirit in their educational environments.

With continuing support from Google, we built the Afterschool Tech Toolkit to help address these needs. The toolkit includes a series of modules to train school day and afterschool educators on how to implement digital learning and technology in afterschool programs.

In addition to resources and training modules, the toolkit highlights examples of afterschool programs that are already using technology in innovative and engaging ways—and that can serve as models for programs starting to integrate technology and digital learning. For example, the Educational Video Center in New York City teaches students industry standard digital media skills to develop interactive websites about a social issue of relevance to them. The afterschool program at Crocker Elementary School, in Fitchburg, MA, integrates coding, robotics, digital photography, LEGO WeDo, and other technology and digital learning opportunities into their existing program options.

AfterschoolPrograms.jpg

These LA's BEST elementary students are tinkering with code to get their robot to successfully complete its mission.

Since summer is a great time to think about how to integrate technology into afterschool programs, we’re also hosting a series of webinars to train afterschool leaders on the toolkit. As on-the-ground practitioners test and use the toolkit, we will be eagerly gathering their feedback on additional resources and supports necessary to serve students throughout the country.

We look forward to supporting programs to enable staff and students alike to become active and responsible digital citizens, critical consumers and innovative makers themselves.

A New Universal Music Player

Posted by Nicole Borrelli, Android Developer, Programs Engineer


Screenshot of UAMP v2's UI showing a pair of albums

The Universal Android Music Player (or "UAMP") is a favorite on GitHub for music app developers with over 9,500 stars and 3,000 forks. Since UAMP was first released, Android development has changed significantly. ExoPlayer has improved, Architecture Components were introduced, and Kotlin became a first-class language for Android developers.

We decided that the best way to integrate the modern features for our beloved music app would be to re-write UAMP.

UAMP v2 was built from the ground up in Kotlin. The UI is built around ViewModels and LiveData. Playback, and particularly integration with MediaSessionCompat, was vastly simplified by utilizing the MediaSession extension of ExoPlayer.

We also added a bunch of new songs by The Kyoto Connection and Kai Engel.

There are some features from UAMP v1 that haven't been integrated into the new code yet. The missing features include Android TV with the Leanback library and remote playback via Google Cast. Even though these features aren't yet included in v2, we wanted to show you the new updates as soon as possible. The old code will continue to be available in the v1 branch on GitHub, so please take a look there to see how to use those features in a music app.

We would love your feedback on which features to add next. We are considering offline playback, improving the integration with Android Auto, and using the upcoming Navigation components of Jetpack for the UI. We'll be creating GitHub issues for features and improvements to help you let us know what is most important to you. Go vote on these features to let us know where we should focus our efforts.

We'd also like to invite you to open pull requests for bug fixes and features that are missing. See the contributions process for more information.

Grab the code from GitHub!

GoogleServe, a chance for Googlers around the world to give back

A few months after I first started working at Google, a colleague asked me to organize a volunteer effort at a school in East Palo Alto. That was my first introduction to GoogleServe, our annual month-long volunteer program, which offers many different ways to give back. My colleagues and I have sorted food at a local homeless shelter, helped NGOs improve their outreach using Google for Nonprofits tech solutions, and helped set up the San Francisco AIDS Foundation’s LifeCycle race. In my seven years at Google, I never missed a GoogleServe—I even attended a gardening project at Full Circle Farms two weeks after giving birth to my son Jack. I didn’t do much gardening, but was glad to be there alongside my teammates.

Now, the journey has come full circle. I work with Google.org as its Global Project Manager for GoogleServe and in this role, I have a bird’s eye view of all the amazing ways my colleagues are having an impact. GoogleServe was created 11 years ago, and this June, over 25,000 Googlers from more than 40 countries participated with more than 900 nonprofits.  

GoogleServe is my favorite time to be a Googler, and I’m excited to share a few examples of the magic that has taken place over the past month.

For more GoogleServe pictures from around the world, check out GoogleServe on Twitter

New GitHub repo: Using Firebase to add cloud-based features to games built on Unity



A while back, a group of us Google Cloud Platform Developer Programs Engineers teamed up with gaming fans in Firebase Engineering to work on an interesting project. We all love games, gamers, and game developers, and we wanted to support those developers with solutions that accomplish common tasks so they can focus more on what they do best: making great games.

The result was Firebase Unity Solutions. It’s an open-source github repository with sample projects and scripts. These projects utilize Firebase tools and services to help you add cloud-based features to your games being built on Unity.

Each feature will include all the required scripts, a demo scene, any custom editors to help you better understand and use the provided assets, and a tutorial to use as a step-by-step guide for incorporating the feature into your game.

The only requirements are a Unity project with the .NET 2.0 API level enabled, and a project created with the Firebase Console.

Introducing Firebase Leaderboard


Our debut project is the Firebase_Leaderboard, a set of scripts that utilize Firebase Realtime Database to create and manage a cross-platform high score leaderboard. With the LeaderboardController MonoBehaviour, you can retrieve any number of unique users’ top scores from any time frame. Want the top 5 scores from the last 24 hours? Done. How about the top 100 from last week? You got it.

Once a connection to Firebase is established, scores are retrieved automatically, including any new scores that come in while the controller is enabled.

If any of those parameters are modified (the number of scores to retrieve, or the start or end date), the scores are automatically refreshed. The content is always up-to-date!

private void Start() {
    this.leaderboard = FindObjectOfType();
    leaderboard.FirebaseInitialized += OnInitialized;
    leaderboard.TopScoresUpdated += UpdateScoreDisplay;
    leaderboard.UserScoreUpdated += UpdateUserScoreDisplay;
    leaderboard.ScoreAdded += ScoreAdded;

    MessageText.text = "Connecting to Leaderboard...";
}
With the same component, you can add new scores for current users as well, meaning a single script handles both read and write operations on the top score data.

public void AddScore(string userId, int score) {
    leaderboard.AddScore(userId, score);
}
For step-by-step instructions on incorporating this cross-platform leaderboard into your Unity game using Firebase Realtime Database, follow the instructions here. Or check out the Demo Scene to see a version of the leaderboard in action!

We want to hear from you

We have ideas for what features to add to this repository moving forward, but we want to hear from you, too! What game feature would you love to see implemented in Unity using Firebase tools? What cloud-based functionality would you like to be able to drop directly into your game? And how can we improve the Leaderboard, or other solutions as they are added? You can comment below, create feature requests and file bugs on the github repo, or join the discussion in this Google Group.

Let’s make great games together!

Admin Insider: What’s new in Chrome Enterprise, Release 68

If you’ve deployed Chrome Browser or Chrome OS in your business, you probably know that we update the platform roughly every six weeks with new features. To help you understand what these new features and enhancements mean for enterprises, we’ll be publishing regular updates to coincide with the latest Chrome Enterprise beta releases.


To kick things off, here are just a few of the new features available in Chrome Enterprise 68.


Alert users when they visit unencrypted sites.


Security on the web is more important than ever, and we want to do our part to keep businesses and users protected. As we announced in February, Chrome Browser will start to alert users that HTTP sites are “not secure” beginning with Chrome 68. You’ll start to see these alerts in your browser this month, so you may want to consider giving your users a heads up. If you have internal or third-party apps that are still in the process of migrating to HTTPS, and you want to avoid displaying a warning to users, you can also choose to disable this notification on a per-domain basis.


Allow users to sign in through a PIN code anytime


For users who frequently need to log in and out of devices without an accessible keyboard—for example, a retail associate using a tablet—numeric passcodes can be a necessity. Although logging in through numeric PIN has been available on Chrome OS for some time, it was previously only allowable after the first sign-in. With Chrome 68, sign-in through a numeric PIN code is now available at any time. Note that we suggest that you require a minimum of six digits for PINs.


Enable automatic re-enrollment


If managing devices is one of your responsibilities, the occasional loss or theft of a device is inevitable. In the past, if a misplaced device was wiped remotely and then later recovered, a user would need to enter their credentials into that device for it to re-enroll into your domain.


With Chrome 68, managed Chrome OS devices will automatically re-enroll once they connect to a network, eliminating the need for users to enter their credentials to complete the re-enrollment step. This feature will be rolled out incrementally, and will become the default for new customers as well as existing customers who have not changed the default forced re-enrollment setting.


If you choose, you can still require users to enter their credentials to re-enroll recovered devices, and use enrollment permissions to prevent specific users from being able to re-enroll through that process. More information on wiping and enrolling devices can be found on our help center.


To stay in the know, bookmark and visit our Help Center, or sign up to receive new release details as they become available.

AdSense now understands Telugu

Today, we’re excited to announce the addition of Telugu, a language spoken by over 70 million in India and many other countries around the world, to the family of AdSense supported languages. With this launch, publishers can now monetize their Telugu content and advertisers can connect to a Telugu speaking audience with relevant ads.

To start monetizing your Telugu content website with Google AdSense:

Welcome to AdSense! Sign up now.

Source: Inside AdSense


AdSense now understands Telugu

Today, we’re excited to announce the addition of Telugu, a language spoken by over 70 million in India and many other countries around the world, to the family of AdSense supported languages. With this launch, publishers can now monetize their Telugu content and advertisers can connect to a Telugu speaking audience with relevant ads.

To start monetizing your Telugu content website with Google AdSense:

Check the AdSense program policies and make sure your website is compliant.
Sign up for an AdSense account.
Add the AdSense code to start displaying relevant ads to your users.

Welcome to AdSense! Sign up now.


Posted by:
The AdSense Internationalization Team

Source: Inside AdSense


Hangouts Chat alerts & notifications… with asynchronous messages

Posted by Wesley Chun (@wescpy), Developer Advocate, G Suite

While most chatbots respond to user requests in a synchronous way, there are scenarios when bots don't perform actions based on an explicit user request, such as for alerts or notifications. In today's DevByte video, I'm going to show you how to send messages asynchronously to rooms or direct messages (DMs) in Hangouts Chat, the team collaboration and communication tool in G Suite.

What comes to mind when you think of a bot in a chat room? Perhaps a user wants the last quarter's European sales numbers, or maybe, they want to look up local weather or the next movie showtime. Assuming there's a bot for whatever the request is, a user will either send a direct message (DM) to that bot or @mention the bot from within a chat room. The bot then fields the request (sent to it by the Hangouts Chat service), performs any necessary magic, and responds back to the user in that "space," the generic nomenclature for a room or DM.

Our previous DevByte video for the Hangouts Chat bot framework shows developers what bots and the framework are all about as well as how to build one of these types of bots, in both Python and JavaScript. However, recognize that these bots are responding synchronously to a user request. This doesn't suffice when users want to be notified when a long-running background job has completed, when a late bus or train will be arriving soon, or when one of their servers has just gone down. Recognize that such alerts can come from a bot but also perhaps a monitoring application. In the latest episode of the G Suite Dev Show, learn how to integrate this functionality in either type of application.

From the video, you can see that alerts and notifications are "out-of-band" messages, meaning they can come in at any time. The Hangouts Chat bot framework provides several ways to send asynchronous messages to a room or DM, generically referred to as a "space." The first is the HTTP-based REST API. The other way is using what are known as "incoming webhooks."

The REST API is used by bots to send messages into a space. Since a bot will never be a human user, a Google service account is required. Once you create a service account for your Hangouts Chat bot in the developers console, you can download its credentials needed to communicate with the API. Below is a short Python sample snippet that uses the API to send a message asynchronously to a space.

from apiclient import discovery
from httplib2 import Http
from oauth2client.service_account import ServiceAccountCredentials

SCOPES = 'https://www.googleapis.com/auth/chat.bot'
creds = ServiceAccountCredentials.from_json_keyfile_name(
'svc_acct.json', SCOPES)
CHAT = discovery.build('chat', 'v1', http=creds.authorize(Http()))

room = 'spaces/<ROOM-or-DM>'
message = {'text': 'Hello world!'}
CHAT.spaces().messages().create(parent=room, body=message).execute()

The alternative to using the API with services accounts is the concept of incoming webhooks. Webhooks are a quick and easy way to send messages into any room or DM without configuring a full bot, i.e., monitoring apps. Webhooks also allow you to integrate your custom workflows, such as when a new customer is added to the corporate CRM (customer relationship management system), as well as others mentioned above. Below is a Python snippet that uses an incoming webhook to communicate into a space asynchronously.

import requests
import json

URL = 'https://chat.googleapis.com/...&thread_key=T12345'
message = {'text': 'Hello world!'}
requests.post(URL, data = json.dumps(message))

Since incoming webhooks are merely endpoints you HTTP POST to, you can even use curl to send a message to a Hangouts Chat space from the command-line:

curl \
-X POST \
-H 'Content-Type: application/json' \
'https://chat.googleapis.com/...&thread_key=T12345' \
-d '{"text": "Hello!"}'

To get started, take a look at the Hangouts Chat developer documentation, especially the specific pages linked to above. We hope this video helps you take your bot development skills to the next level by showing you how to send messages to the Hangouts Chat service asynchronously.