Hey, everyone.
Welcome to this developer-focused video about getting your app ready for Google TV.
I’m Ian Clifton, and I work on the Developer Relations team at Google.
We’re going to talk through the differences between Android TV and Google TV experiences,
especially the integrations that can make your app stand out.
If you haven’t already watched the What’s New in Android TV and Google TV talk
with Shalini and Ben, be sure to check that out as well.
You've probably heard that Google TV
is the new, personalized, content-forward experience
for devices running Android TV OS.
But what does that mean?
It's easier to explain with a screenshot.
There’s a great balance between the beautiful visuals and content discovery,
and the content is also personalized for the logged-in user.
Users can still easily access their apps, but the content really shines.
So now we have this great user experience for, well, users,
but what does that mean for app developers?
Android TV OS is the operating system for both Android TV and Google TV devices.
So you can let out a sigh of relief
because the base app requirements are the same between both.
We’ll review those soon, but that means your existing apps
built for the Android TV OS will also work on Google TV devices.
Besides the obvious UI changes,
there is a much greater emphasis on quality and integrations.
Most of these integrations are similar to Android TV,
but we'll also talk through some of the differences.
The requirements for distributing your app on Google TV
are the same as Android TV.
And we have this documented extensively on our Developer site,
so I'll just briefly cover the most important parts.
Your Android Manifest needs to say that it uses the leanback feature,
which basically means it's compatible with TVs.
It also needs to explicitly say that touchscreen is not required.
Your Manifest needs to include an activity to handle the LEANBACK_LAUNCHER intent.
That’s the activity that will launch when the app is selected.
The activity or application tag also needs to reference a banner image
that includes the app name.
That's a piece a lot of developers miss. The app name needs to be in the banner.
It's not just an icon.
You should double-check any permissions that imply hardware requirements.
A common one that developers miss is the permission for Wi-Fi state,
which implies the device has Wi-Fi.
But some TV devices just have an ethernet connection.
You need to meet all the TV app quality requirements
listed on developer.android.com as well, which includes requirements
like handling landscape orientation, supporting D-pad navigation, etc.
Finally, you have to opt in to TV distribution in the Play Console.
That’s what tells our review team to verify your app meets all the TV requirements.
Once you have the basic requirements met, there are a lot of different integrations
that can provide much more engaging user experiences for your media app.
There are many integrations.
There is Google Cast with Cast Connect,
MediaSession, WatchNext, Media Actions Feed,
Google Account Linking, Entitlement Sync, Voice Casting,
Google Play Billing, Frictionless Subs, Home Screen Channels.
It's a lot of integrations.
You can read about all of these today in our Developer documentation.
But let's focus on a few of them.
Hopefully, you all know and love Google Cast.
If you’re not familiar with it, you can think of it
as a way of controlling media with one device and playing it on another.
The side that’s controlling it is called the sender,
and the side that’s playing it is called the receiver.
Every Android TV OS device, including Google TV devices,
can be used as a receiver.
Last summer, we also announced Cast Connect,
which allows your app running on a TV to act as a native receiver.
That means your APK can handle the session,
so you automatically get support for remotes,
and you can develop richer interactions.
In addition, we now have stream transfer to move playback from one device to another,
and stream expansion to allow playback on multiple devices.
Watch the What’s New in Android TV and Google TV talk
for more details on both of those features.
MediaSession is one of the most important integrations
for a media app to do whether it's on TV or mobile.
At a high level, you can think of MediaSession
as sitting between some sort of controls and your actual player.
Users control your media in all sorts of ways.
They have physical remotes, voice with Google Assistant,
controls on a Bluetooth headset,
the notifications section on mobile, and many other ways.
Users don’t pick up a remote and think,
“Ah, yes, this audio receiver remote is using IR to tell my receiver
to send an HDMI-CEC command to the Android TV device."
Users just care about the action like play or pause.
And the MediaSession allows your video player
to also just care about that action.
You don't have to do anything specific to handle commands coming from Bluetooth
versus commands that are coming through the Assistant.
You handle commands with simple callbacks like onPlay or onPause.
We have detailed developer documentation for MediaSession,
but I want to call out three pieces that developers commonly miss.
First, don't implement onKeyDown for controlling media playback.
Just handle playback through the MediaSession callbacks.
Second, you need to set your mediaSession as active
when it should receive media commands and inactive when it shouldn't.
Video apps should have a mediaSession marked as active
when the video is visible to the user,
which means video apps that don't support picture-in-picture
will set the mediaSession as inactive in the activity or fragment onStop method
and active in onStart.
Audio apps that support background playback should keep the mediaSession active
until audio focus is lost or playback is explicitly stopped.
Finally, you probably know about or even use ExoPlayer.
It's a great open-source media player for Android.
But a lot of developers don't know about MediaSessionConnector.
If you’re using ExoPlayer,
you can use the MediaSessionConnector to handle all MediaSession callbacks for you,
which makes the integration effort very small.
WatchNext is a great feature available on Android TV OS devices.
Sometimes people refer to this as Play Next or Continue Watching
based on the label showing up on the home screen.
But whatever you want to call it,
it's one of the best features for enabling re-engagement.
In recent research, we saw the WatchNext API could increase re-engagement
by upwards of 30% in certain cases.
WatchNext allows for user experiences such as if you watch half of a movie,
you can see that movie show up in this row,
and selecting it jumps straight into playback of that content exactly where you left off.
Similarly, if you finish an episode of a show the next episode is displayed
so you can get back to that content you’re enjoying.
We work with a lot of app developers
to improve their implementations of WatchNext.
Based on their feedback, we also updated the existing requirements
to be even more explicit about what content should show up and when.
For Google TV specifically,
we're focused heavily on the quality of integrations,
starting with movies and TV episodes.
That means on Google TV,
apps need to be certified as meeting all the requirements
before their content shows up in this row.
Please see our Developer documentation for more information about that process.
But I do want to call out that your app doesn’t need
to specifically check if it's running on Google TV.
It can post content to WatchNext.
That content simply doesn't show up on the home screen
unless your app has passed the quality requirements in our documentation.
The last feature we're going to dig into is home screen channels.
You may have noticed home screen channels weren’t on the earlier Google TV screenshot.
For Google TV, home screen channels are only shown in markets
where we don't have enough information about content
to power the full Google TV experience.
That means they're not going to show up in markets like the US.
Home screen channels are still shown on all Android TV devices
that aren’t running the Google TV experience.
This means home screen channels are still an important integration
for the Android TV experience and the Google TV experience worldwide.
We work with a lot of app developers to improve their apps for Google TV.
One of the things we learned from that effort was how helpful it would be
to have a reference app that demonstrates all of these integrations.
So, we built one.
We built a new, open-source TV reference app in Kotlin from the ground up,
demonstrating how to implement many of these integrations.
It supports playback with ExoPlayer, MediaSession integration, deep links,
home screen channels, WatchNext, Cast Connect, and a lot more.
Check out the new reference app at github.com/android/tv-samples.
That was a lot of info to cover very quickly.
But we're working extensively on documenting all of these updates.
We put together a specific page that highlights these integrations
and links out to much more detail, so that's a great starting point.
And, again, be sure to watch the What’s New in Android TV and Google TV talk.
It includes a lot of great info, including updates on the emulator,
Firebase Test Labs, and more.
Thanks for watching. We’re looking forward to seeing what you build for Google TV.