Releasing a game for Amazon FireTV

MrStahlfelge (Benjamin Schulte)
8 min readMay 10, 2018

--

The first article in this mini-series was a general introduction about what is needed to do to get libGDX games working on Android-powered TV devices. Now we take a closer look on releasing a game for FireTV, Amazon’s version of Android for its own TV boxes and sticks.

Although code samples here are for libGDX, this article will also contain information for all developers wanting to release their games for FireTV devices.

Why should you release for FireTV?

As written in the first article, FireTVs are wide-spread devices. A FireTV stick can be bought for under 40$ (or 35€), on sale even cheaper. FireTV users are thankful for good games coming with TV remote input, and because there is not as much competition going on, your visibility as an indie is much better than on other stores.

Perhaps you heard that releasing on Amazon App Store is a waste of time. I can confirm that. It indeed is — if you do not release for FireTV. But if you do so, depending on your game there’s a good chance to get more downloads than on Google Play. Take a look at my game’s download chart on Amazon. I am sure you will immediately know when the release for FireTV was:

Download report.

But do not forget the one existing drawback on FireTV: AdMob is blocked on Amazon devices, and Amazon Ads are not delivering ads to FireTVs. If you plan to monetize, you will have to rely on IAPs.

What is needed for releasing for FireTV?

You know from my first article that you have to adjust your game to work in landscape mode and without touch input. If you’ve done so, you are basically done. Go on, relase. Good luck.

Hey, you are still reading here? Ok. Then you get my advice: Before releasing, play your game on the real thing. Get a FireTV stick (you know, it is cheap) and check. Controlling your game with a TV remote is not the same than with a keyboard or with touch, and you will likely notice some quirks you want to fix before releasing.

So how do I test my app on the FireTV?

That’s more easy than you probably think. Enable USB debugging mode in the settings and you can connect wirelessly via ADB with adb connect <ip-address>. When done so, the FireTV shows up in Android Studio’s AVD manager and you can debug your application, view logcat output and take screenshots like you can with directly connected devices.

When testing, you will discover that even calling other applications with URLs works well on FireTV. If no app is found that can handle the URL, a message is shown for the user to use another device to watch the URL’s content.

libGDX’ Gdx.input.getTextInput() method is also working well.

Using FireTV remote’s additional buttons

Most likely, while testing you realize that the d-pad input is not satisfying and you also want to use the other buttons. The big advantage of releasing for FireTV is that you know for sure what physical buttons are available on the remote control:

FireTV Remote Control

Besides D-Pad, Center and Back button, you can additionaly use Play, Fast Forward, Rewind and Menu buttons for your game. And that makes perfect sense. For example, on my platformer you can jump with FF and fire with Menu conviniently.

But: Don’t use the keys within your core project’s input listeners. Don’t write code like this:

@Override
public boolean keyDown(int keycode) {
switch (keycode) {
case Input.Keys.SPACE:
case Input.Keys.MEDIA_FAST_FORWARD:
jumpPressed();
break;
return true;
}

That code will work well when you test. But after you’ve submitted your game for release, you will get a polite message telling you that your submission was declined:

Your app has failed a test case.

Bug Description: App makes use of the Media Buttons but fails to prevent other applications in the background from using them as well, resulting in conflicting inputs

And they are correct with that. Although you return true in your input listener to indicate that you handled the event, libGDX’ Android backend does not return this to Android’s event handler. You have to add a special key listener in your AndroidLauncher class to get this working.

public class AndroidLauncher extends AndroidApplication {

@Override
protected void onCreate(Bundle savedInstanceState) {
// Game init
//...
initialize(game, config);
input.addKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == Input.Keys.MEDIA_FAST_FORWARD) {
input.onKey(v, Input.Keys.SPACE, event);
return true;
}
return false;
}
});
}
}

This listener maps the FF button to the normal Space keyboard key. No change in your core project files is needed.

Check if the game runs on FireTV

Sometimes you need to know if your game runs on a FireTV device, for example to let the player know what buttons to press. That can be done by checking Android’s Build.MODEL constant. If it starts with “AFT”, you are on a FireTV. Don’t forget that there’s an easier way to check if you are running on any TV device.

Player gets a special hint when the game runs on FireTV devices

Amazon Developer Console

When you’ve done with all your coding, it is time to release your game. Register an Amazon Developer Account (it’s free) and enter the Developer Console.

I will not cover the whole releasing process on Amazon here, but only the FireTV-related specifics.

You can immediately release the game for the so-called Live app testing, a closed beta. You need to know the Amazon account names of your testers, they will get an activation link and can install the game on their devices.

Skip that. I am serious, it’s not working reliably. Some testers won’t get their invitation mail, some testers get the message, but the game is never installed on their device and some testers even get old, replaced versions installed… So, if you want some friends to test your game, send them your APK file directly and explain how to install it via ADB.

It is very important that you fill your description in the correct masks and use good store image assets. And that’s not easy, because there is no explanation what asset is used on the App Store on the real device. I made some screenshots for you to to compare the Developer Console with the App Store on a FireTV. (Screenshots were made on a German FireTV, but the interesting contents are in English.)

This is the App store category overview.

App store category overview

Users will not see your game’s name before selecting its app icon, so it is important that your app icon is perfect. If they select the icon, the background is changing to your background image and users can read your short description.

If a users hits the center button, the App detail page opens with your short description and background image.

App detail page

Note that the long description is not shown on a FireTV — it is only shown on Amazon’s web interface. That’s why I don’t use it. Here’s my Developer Console configuration for you to compare with the screenshots above.

Developer console description page
Developer console images page

I use Product feature bullets because they are shown on Fire tablets, but not on FireTV.

If you cannot add FireTV image assets, you first need to upload the APK file on the “Binary Files” page and add the six existing FireTV devices to “supported devices”:

Release process

Perhaps you noticed above that I wrote you may get a test report after submitting your game, saying that your submission was declined. When releasing for FireTV, real persons will test your game. According to my game analytics reports, they are testing it around half an hour and are really playing it. I saw levels got cleared by them. The entire process takes about two days, so don’t waste their time and your time with half-baked builds. Do only release if you are sure the game works as intended and every button is reachable with button control.

My experiences with the Amazon testers are good. You get in contact with real humans which sometimes made mistakes, but they really read your messages. One time an older build was tested by them and they reported a bug I knew for sure was fixed before. Another time, it happened that my app was flagged to be only useable with a Game controller. In both cases, opening a support case and telling them to check again solved the problems.

To avoid such problems, I recommend you to leave some testing instructions for the reviewers. You can do so on Developer Console’s “Binary file’s” page. I always state at least the following: “App works with FireTV Remote Control, on touch devices and with game controllers.”

After releasing

After the release, check AFTVnews weekly new apps section and make sure they don’t miss your game. If they like your game and mention it in the posting’s teaser, some thousand downloads are safe. If you are active on Reddit, don’t miss to post on r/firetv — the sub appreciates every developer aiming for their platform.

Conclusion

I hope you find the information in this article valuable. If you do so, please clap — thank you! If you missed some information or have something to add, don’t hesitate and comment.

In the next and last article, I will write about the release process for Google’s Android TV.

--

--