Console sviluppatore
Ti ringraziamo per la visita. Questa pagina è per il momento disponibile solo in inglese.
Amazon Developer Blogs

Amazon Developer Blogs

Showing posts tagged with API

June 17, 2014

Russell Beattie

The Cordova Push Notifications Plugin is a project that lets hybrid web app developers create apps that respond to custom push notifications from services such as the Apple Push Notification Service (APNS), Google Cloud Messaging (GCM) and most recently Amazon Device Messaging (ADM). This enables hybrid web apps to be notified when an online service has information for it - such as a personal message, sports score or appointment - even if the app is not currently running.

If you're unfamiliar with Amazon Device Messaging, it's a simple, efficient and free messaging service from Amazon that lets developers send push notifications from the cloud to Kindle Fire devices, helping app creators more deeply engage with their customers by keeping them up to date and involved.

You can find the plugin, and complete documentation on the Cordova PushPlugin Github repository, but here are the basics on getting started using the plugin for Amazon Fire OS.

Overview

Macintosh HD:Users:beattier:Desktop:cordova_adm:adm-cordova.png

Amazon Device Messaging works similarly to the other push notification services and has three main parts involved in the process:

  • Your server sends notifications (messages, updates, scores, etc.) to the ADM Servers to be routed to the client apps.
  • ADM Servers queue and route notifications to client apps.
  • Your  app receives the notification on a device.

The Cordova Push Notifications Plugin allows your hybrid web app to use JavaScript to register with the ADM Server and receive notification events when sent from your server.

Please note that ADM only works with Fire OS devices and the Cordova Amazon Fire OS platform target. For more information about setting up a Fire OS Cordova project, please see our earlier blog post,  Building Higher Performance Cordova-based Fire OS Apps By Implementing Amazon WebView Support.

ADM Credentials

In order for your server to send notifications to your app, both the server and app, need to be authenticated/registered with the ADM Server:

  1. Create a sample Cordova app for the Amazon Fire OS platform so you have the app name, package name and the debug build ready.
  2. Create a developer account on the Amazon Developer Portal if you don't already have one
  3. Fill out the New App Submission form and turn Device Messaging switch to ON.
  4. Create Security Profile to obtain ADM credentials for your app.
    Note: For development, you can use the MD5 signature of the debug apk created by Cordova build process found in <project_path>/platforms/amazon-fireos/ant-build.

You will need to make note of the OAuth Credentials (Client ID and Client Secret) to be used on your notifications server and the API Key to be used in your client app. These can be found on the Security Profile Management pages in the areas marked in green below:

Macintosh HD:Users:beattier:Desktop:cordova_adm:credentials.png

Below is a graphic which shows a general overview of the authentication process and how your client app and your server to authenticate and register with the ADM Server:

Macintosh HD:Users:beattier:Desktop:cordova_adm:authentication2.png

Install Push Notifications Plugin

Once you have created an initial Cordova app for the Amazon Fire OS platform, use the standard plugin command from your project directory to install the Push Notifications Plugin.

cordova plugin add https://github.com/phonegap-build/PushPlugin.git

This will download the plugin and install it in your app's project directory. There will be a new folder called <com.phonegap.plugins.PushPlugin> inside your project's plugin directory.  This folder contains: the source files for the plugin, an Example directory that has a sample web app you can use to receive ADM notifications on the client, and a Node.js script you can use to send notifications, simulating what a server would normally do.

Before you can start testing notifications, you will need to follow the steps below to download and install the ADM support libraries and add the proper credentials to your project.

Install Amazon Device Messaging Library

The push notifications plugin needs the support files found in the ADM API. Follow these steps to download the SDK and install the library files in your Cordova project:

  1. Download the Amazon Mobile App SDK and unzip.
  2. Create a folder called ext_libs in <project_path>/platforms/amazon-fireos folder.
  3. Copy amazon-device-messaging-x.x.x.jar into the <project_path>/platforms/amazon-fireos/ext_libs
  4. Create a new text file called ant.properties in the <project_path>/platforms/amazon-fireos folder, and add a java.compiler.classpath entry pointing at the ADM library. For example:
    java.compiler.classpath=./ext_libs/amazon-device-messaging-1.0.1.jar
    
  5. Create a new text file called api_key.txt in the <project_path>/platforms/amazon-fireos/assets folder, and copy the API Key you obtained in the Credentials section above. Note: Be careful not to add any extra spaces to the text file.

Create Sample App

Here's a basic web app that can be used to test receiving notifications on the client. Create new index.html and index.js files in your project's www directory and copy the markup/code below.

The index.html page is simply a container for the messages to be displayed on the device:

index.html:

<!DOCTYPE html>
<html>
<head>
	<title>ADM Test</title>
</head>
<body>
	<h1>ADM Test</h1>
	<pre id="container" style="word-wrap:break-word"></pre>
	<script src="cordova.js"></script>
	<script src="index.js"></script>
</body>
</html>

The index.js script uses the PushPlugin to display notifications received on the client.

index.js:

var container = document.getElementById("container");
var pushNotification;

document.addEventListener("deviceready", handleDeviceReady, true);

function handleDeviceReady(){

    pushNotification = window.plugins.pushNotification;
    pushNotification.register( handleSuccess, handleError, {"ecb":"handleNotification"});

}

function handleNotification(e) {

    log("**** EVENT RECEIVED: " + e.event );

    if(e.event == "registered"){
        if(e.regid.length > 0){
            log("REGISTRATION ID:  <br>" + e.regid);
            log("<a href=\"mailto:?subject=ADM%20Registration%20ID&body=" + encodeURIComponent(e.regid) + "\">Email Registration ID</a>");
        }
    } else if(e.event == "message"){
        if ( e.foreground ) {
            log("FOREGROUND NOTIFICATION");
        } else {
            if ( e.coldstart )  {
                log("COLDSTART NOTIFICATION");
            } else {
                log("BACKGROUND NOTIFICATION");
            }
        }
        log("MESSAGE: " + e.payload.message );
        log("TIME: " + e.payload.timeStamp );
        log("URL: " + e.payload.url );
    } else if(e.event == "error"){
        log("ERROR: " + e.msg );
    }
}

function handleSuccess(result) {
    log("Plugin Success: " + result );
}

function handleError(error) {
    log("Plugin Error: " + error );
}

function log(msg){
    container.innerHTML += msg + "<br>";
    console.log(msg);
}

Notes about the JavaScript:

  • The handleDeviceReady method will use the pushNotification object to register the client with the ADM Server. This requires that the api_key.txt file contains the correct information.
  • The Registration ID that is returned to the client is used by your server to send notifications to the correct device/app combination. The ID is very long, so there's a link to email the ID to yourself to be used in testing.
  • The notification event has a flag to tell your app whether it was in the foreground, background or not started when the notification arrived.
  • The ADM notification event contains a payload object consisting of arbitrary fields populated by your server. In this example, the server will send a message, timestamp and URL, but each app can be different.
  • If there are errors with authentication or other issues such as connectivity problems, the app should log to the screen any error messages sent to your app.

Once you have your client app ready, use Cordova's command line to install the app on your test device (usually using the "cordova run" command). If you have set up everything correctly, the app will start, authenticate with the ADM Server and display the Registration ID unique to your device/app to be used by your notifications server.

Test ADM Notifications

Normally, you will have a dedicated server which sends app notifications via the ADM Server, using the Registration ID to uniquely identify each instance of your app running on a specific device. Your app will be responsible for getting the Registration ID from each registered device to your server.

For testing purposes, we are instead going to use the pushADM.js Node script found in the <project_path>/plugins/com.phonegap.plugins.PushPlugin/Example/server folder. This script acts in place of your server, authenticating with Amazon and then pushing notifications to the ADM Servers to be delivered to your app. (Node is a prerequisite for Cordova, so you should already have it installed on your system.)

Before we can use the script, we need to add in your OAuth Credentials and Registration ID. Here is a snippet from the top part of the test script that you will be editing:

pushADM.js:

// Client ID and Client Secret received from ADM portal
var CLIENT_ID = ""; 
var CLIENT_SECRET = "";

// Registration ID, received on device after it registers with ADM server
var REGISTRATION_IDS = [""];

// Message payload to be sent to client
var payload = {
        data: {
            message: "PushPlugin works!!",
            url: "http://www.amazon.com",
            timeStamp: new Date().toISOString()
        },
        consolidationKey: "my app",
        expiresAfter: 3600
};
...

Edit the pushADM.js script :

  1. Copy the OAuth credentials - Client ID and Client Secret - you obtained in the Credentials section above into the CLIENT_ID and CLIENT_SECRET variables.
  2. Copy one or more Registration IDs from a registered app into the REGISTRATION_IDS array. Note: You can fill this var with IDs from multiple devices for testing. Using the sample app above, you can email the Registration ID to yourself and then copy/paste it into the test script.
  3. Optionally edit the payload object with custom values to be sent to your app.

Run the pushADM.js script from a command line using Node:

node pushADM.js

The result on the command line should be a series of log messages which shows the script authenticating with the ADM Server and then sending a message. The app running on your Kindle Fire should then instantly show the message if it is in the foreground, or add a notification alert to the top bar if it is in the background or not running. You can run this script as many times as you need to test your app.

Here is what the of the sample web app above looks like after receiving a notification:

Macintosh HD:Users:beattier:Desktop:cordova_adm:Screenshot_2014-05-28-14-17-15.png

Summary

The steps above should give you a good start towards implementing ADM push notifications into your app. Once you have your app working, it will be very easy to customize the notification payload as you need to create compelling new apps and services for your customers.

If you have trouble, please make sure to check out the links below for information and support:

Good luck!

-Russ

 

 

June 13, 2014

Paul Cutsinger

Today our guest blogger is Asaf Barzilay, VP of products from Extreme Reality (www.xtr3d.com). They build the Extreme Motion SDK that enables developers to incorporate motion control into their apps. They’ve also released Pandamania, a dancing game that uses this technology. In this post, Asaf talks about the importance of sound, their experience integrating the Dolby Audio API into their platform, and how easy it was to port this experience to Kindle Fire tablets.

About Extreme Reality

Extreme Reality enables people to interact with computing devices through their body motion, without touch, using only a 2D camera. We are the only company to provide full-body, software-based, motion analysis and control for any computing device or operating system that supports a standard camera. The Extreme Motion SDK enables developers to create a wide range of experiences (applications, games, security solutions and more) that break the physical barriers of current hardware-based technologies.  Our technology works seamlessly with nearly all consumer electronics and on most operating systems: Windows, iOS and Android.

Patented worldwide, Extreme Motion is already in use by game developers for various operating systems and devices, from AAA publishers to indie developers.

Kindle Fire: An Immersive Game Machine

Pandamania is a dance game based on Extreme Motion SDK, which is an image-processing engine that recognizes the player’s skeleton in real time, using the device's integrated camera. The player imitates the panda dance moves, and the more accurate the imitation, the more points earned. At first, Pandamania was intended to be a simple example app to showcase accuracy, durability and potential.

The first thing we noticed about this fun, fast paced dance game is that people instantly connected with the panda; they just loved the animation and effects. The music was appealing but not a major part of the game’s allure.

Prior to Kindle Fire, Pandamania had been ported on most operating systems, such as Windows, iOS and Android. Making the game available on Kindle Fire seemed like the obvious next step as Kindle Fire is one of the 3 leading devices in the tablet category worldwide.

The implementation was simple, since Kindle Fire is an Android based device. Within two days we arranged the overall look and resolution. Then, we looked for a tool that would create a unique advantage for the game on the Amazon Appstore. We discovered Dolby Audio API, a brilliant way to enhance the music aspect of the game.

Enhancing the Sound Factor

The Dolby Audio API for Android provided a significantly noticeable improvement to the background music and game sounds. As the player needs to stand ~6 feet away from the device for the camera to see his body, a good quality sound is a crucial element for a more immersive and fun experience.

We used Unity3d as the development platform for the game, as it is cross platform and easy to work with. Both APIs (Extreme Motion SDK and the Dolby Audio API) are easy to use plugins which do all the heavy-lifting behind the scenes and provide a simple external API for the game developer, allowing him to enable gesture-recognition, and different sound profile enhancements with just a few rows of code, and no need to write any native device code.

"The integration of Dolby Audio API with the Unity3d based game "Pandamania" was simple and intuitive. As this is a dancing game, the quality of the music and sounds was a very important.  By using the Dolby Audio API, the quality of the sound was considerably enhanced, leading to a far better gaming experience"
 - Assaf Lehr, Product Manager, Extreme Reality 

“Extreme Reality’s technology is an impressive offering, bringing full arcade gameplay to the Kindle Fire HD and HDX.  The impressive motion tracking capabilities of Pandamania convert the Kindle Fire HDX into an immersive game machine. By using the Dolby Audio API for Android to drive full, distinct sound to players 6 feet away, Pandamania allows users to concentrate on physical as well as the audio elements of the game.”
Andy Vaughan, Developer Relations Manager, Dolby

Try Extreme Reality and Dolby Audio in Your App

Thanks to Asaf and the team at Extreme Reality. They’re building some fun apps and a platform that enables some really engaging experiences.

Give it a try and see how you could enhance your apps. Let me know if you submit an app using Extreme Reality or Dolby Audio.

You can learn more about the technologies covered in this blog post in the following links:

- Paul

@PaulCutsinger

 

June 04, 2014

David Isbitski

Gordon Edwards, the creator behind the Scanner Radio app, started serving banner ads in 2010 and was working with several ad networks by 2013. The app provides live audio from over 3000 police, fire scanners, weather radios, as well as amateur radios. The app has over 800 reviews on the Amazon Appstore. Recently we had the privilege to sit down with Gordon to discuss how his app was performing and how he leveraged Amazon’s Mobile Ads API to generate revenue.

Figure 1- Banner Ad

$1.00 eCPM from Amazon Banner Ads

Generating revenue has always been a challenge for developers. With Gordon’s background in ads, integrating ads into his app seemed an obvious solution. But the primary reason why Gordon went with Amazon was that he thought the “quality of ads served would be better than those from other ad networks”.  In short time, Gordon saw an earnings lift of 39% and it only took him less than a day to integrate.

“I see very consistent and high eCPMs from Amazon, as well as very high quality ads” says Edwards. The eCPM from Amazon was consistently around $1.00 which meant he didn’t have to monitor the earnings closely. This allowed him to focus on developing the app and creating a better experience for his users. He was pleasantly surprised to see the strong eCPM continue in Q1 when earnings dipped on other ad networks. His users were also happy to see the high quality ads from Amazon in their favorite app.

43% Earnings Lift from Interstitial Ads

Something that Gordon was not familiar with however, was interstitial ads. Gordon mentions that “I've never displayed interstitial ads in his app until now, but decided to display them from Amazon since he knew the ad quality would be high”. Gordon created a new interstitial ad slot when Amazon reached out about testing the ad format.  Since then, his earnings increased another 43% from the additional ad slot. Gordon mentioned that he has since tried interstitial ads from other ad networks when Amazon ads were unavailable, but none provided the quality he was looking for. Now, he is working solely with Amazon.

      

Figure 2- Interstitial Ad

Try Amazon Ads!

Gordon encourages developers to try the Amazon Mobile Ads API. “Definitely try the Amazon Mobile Ad Network if you’re looking for a high paying and high quality ad solution.”

Click here to get started with the Amazon Mobile Ad Network.

*Performance may vary

 

May 28, 2014

David Isbitski

Steve Boymel from Farlex is the creator of the Dictionary app “Dictionary.” Based out of Pennsylvania, the app already has over 1,300 reviews on the Amazon Appstore. The app delivers a comprehensive dictionary that is available in over 14 different languages including English, Spanish, and French.

Testing Mobile Ads on Amazon Appstore

One of Steve’s challenges after creating the app “Dictionary”, was to generate revenue. “After looking at the existing landscape, I felt that Amazon had a great offering,” says Steve, which is why he decided to test the Amazon Mobile Ads API in his Amazon Appstore app. This was Steve’s first time integrating the Mobile Ads API into any of his apps, but he had confidence that the Amazon Mobile Ad Network would monetize well. In the first few weeks Steve saw a $0.70 eCPM, which was much higher than he expected.

Figure 1Example of Ads

Success Brings Expansion into Google Play

With the success that the Amazon Mobile Ads API brought to Steve’s app in the Amazon Appstore, he decided to bring it to Google Play as well since he satisfied the Amazon Appstore distribution requirement.

Integrating the Amazon Mobile Ads API into his Google Play apps was easy. He has one code base for all Android apps so it was just a matter of re-packaging his Google Play binary.  

Steve says “the time was well spent since his earnings from his Google Play apps are just as strong as his Amazon Appstore apps.” After a few optimizations, his eCPM increased to $1.20 for his Google Play apps and $1.75 from Amazon Appstore apps.

$1.36 eCPM for UK Banner Ads

When we called Steve with an opportunity to monetize his UK traffic as a beta tester, Steve jumped at the opportunity. After all, he was not serving any ads to his UK users so any earning would be incremental. All he had to do was swap out his Amazon Mobile Ads API jar file.  So how did the banner ads perform?

“Amazon always exceeds my expectation. $1.36 eCPM for UK banner ads is unheard of!”* Steve Boymel

Click here to get started.

*Performance may vary

May 27, 2014

Chengluo

Ad revenue is all about a balance between generating the most impressions and earning the highest eCPM. The more impressions you’re able to generate at a higher eCPM, the better your return on your investment.

Recently, we announced support for full screen interstitial ads on the Amazon Mobile Ads Network for both Kindle Fire devices and other Android devices. Developers are integrating interstitial ads because they generate more revenue than other ad types according to the report from AppFlood. According to a recent interview with the creator of Scanner Radio, he increased his ad revenue by 43%, just by adding Amazon interstitial ads to his app (your results may vary). In terms of getting higher eCPM, we also heard developers telling us they get high eCPM when they put Amazon Mobile Ads at the first slot for their ad requests.

“With Amazon Mobile Ads in the first slot, our eCPM went up 216%!” - Jason Stock, CEO Firecracker Software

Amazon interstitial ads give you not only the opportunities to increase your ad revenue, but also help you to optimize the user experience with well designed high quality ads that work well within your application experience.

In this blog, we’ll show you how to add interstitial ads into your own apps and games with a few simple steps.

Setting up your environment

If you’ve already used the Amazon Mobile Ads API in your apps before, you can skip this step and jump right into the Implementing interstitial ads step.

To start with, download the Amazon Mobile Ads API from here, and import the amazon-ads-5.3.22.jar file from [Your Download folder]/Apps-SDK/Android/Ads/lib into your project. 

If you are using the Eclipse IDE, you can add the jar file by selecting the Build Path dialog from the project properties, and select the Add External JARs from the Libraries tab.

If you are using the Android Studio, you just need to copy the jar file into your project library folder, e.g. SampleProject/libs/. After you copied the jar file, from the Android Studio, right click the jar file, and select Add as library from the menu. For the Android Studio, you will need to update the Gradle script to include the jar in your build as well. To do that, add following line to the dependences section in your build.gradle file.

compile files('libs/amazon-ads-5.3.22.jar')

Now that you have the necessary jar file for your project, you’ll need to add the AdActivity and give certain permissions in your manifest file to use the Amazon Mobile Ads API. For more details, you can refer to the Quick Start Guide for help.

Implementing interstitial ads

The first thing you’ll need to do is to obtain an Application Key. This allows Amazon to track your impressions and clicks and associate them with your developer account so that you can review your ads’ performance from the reporting tool.  If you do not already have an Application Key for this app, you must obtain one by visiting https://developer.amazon.com/ads and following the steps in the Getting Started section. Once this is done, you can use the following code to register your Application Key:

        try {

            AdRegistration.setAppKey(APP_KEY); //replace with your own key

        } catch (final IllegalArgumentException e) {

            Log.e(LOG_TAG, "IllegalArgumentException thrown: " + e.toString());

            return;
        }

Next you need to think about when would be the best time to display your interstitial ads. Many apps show interstitial ads when a user quits the game or when the user is between levels in a game. Apps can also display interstitial ads when the game is paused. In this example, we are using two buttons to indicate when to load a new ad, and when the ad is ready to show.   

public class LoadNextLevel extends Activity {

    private static final String APP_KEY = "sample-app-key"; // Sample Application Key. Replace this value with your Application Key.

    private InterstitialAd interstitialAd;

    private Button loadButton;

    private Button showButton;

    @Override

    public void onCreate(final Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_load_next_level);


        try {

            AdRegistration.setAppKey(APP_KEY); //replace with your own key

        } catch (final IllegalArgumentException e) {

            Log.e(LOG_TAG, "IllegalArgumentException thrown: " + e.toString());

            return;

        }

   AdRegistration.enableTesting(true);

        this.interstitialAd = new InterstitialAd(this);

        this.interstitialAd.setListener(new SampleAdListener());

}

You noticed we set an ad listener for the interstitialAd instance called SampleAdListener. This is the listener class you have to create to get notified when an interstitial ad loaded, failed to load or was dismissed.

Here is the code to implement the SampleAdListener class:

class SampleAdListener extends DefaultAdListener

    {

        /**

         * This event is called once an ad loads successfully.

         */

        @Override

        public void onAdLoaded(final Ad ad, final AdProperties adProperties) {

            Log.i(LOG_TAG, adProperties.getAdType().toString() + " ad loaded successfully.");


            // Once an interstitial ad has been loaded, it can then be shown.

            LoadNextLevel.this.showButton.setEnabled(true);

        }

        /**

         * This event is called if an ad fails to load.

         */

        @Override

        public void onAdFailedToLoad(final Ad view, final AdError error) {

            Log.w(LOG_TAG, "Ad failed to load. Code: " + error.getCode() + ", Message: " + error.getMessage());


            // A new load action may be attempted once the previous one has returned a failure callback.

            LoadNextLevel.this.loadButton.setEnabled(true);

        }

        /**

         * This event is called when an interstitial ad has been dismissed by the user.

         */

        @Override

        public void onAdDismissed(final Ad ad) {

            Log.i(LOG_TAG, "Ad has been dismissed by the user.");



            // Once the shown ad is dismissed, its lifecycle is complete and a new ad can be loaded.

            LoadNextLevel.this.loadButton.setEnabled(true);

        }

    }

Our SampleAdListener class extends the DefaultAdListener interface, which is the listener also used by banner ads. It’s recommended to extend the DefaultAdListener instead of implementing AdListener to safeguard against having to update your code if any additional APIs are added to AdListener in the future.

We override three callbacks from the DefaultAdListener interface: onAdLoaded(), onAdFailedToLoad() and onAdDismissed(). Let’s look at each of the callbacks in more detail.  

 onAdLoaded() is immediately called each time an ad is successfully loaded. But you don’t have to display the ad right after it’s loaded. You can choose to display the ad in a transition point as we mentioned above. In our example, we enable the “Show Ad” button to indicate the ad is ready to show. In your games or apps, you can also use a flag (e.g. set isAdReadyToShow = true) to indicate the ad is ready to show. When you want to show the interstitial ad, you can check the flag to tell whether the ad is ready. Loading the ad ahead of time and then waiting to show it until arriving at the app’s transition point, will result in the best customer experience because the ad will appear on the screen much faster.

onAdFailedToLoad() is called whenever the retrieval of an ad fails. From this callback, you can tell why your ad failed to load. An ad can fail to load for many reasons. We categorize them into two groups: transient and non-transient errors.  A transient error could be, for example, caused by a poor network connection or an ad server internal error.  If transient errors occur, you can retry the loadAd() call when the network becomes available or after a thirty-second timeout. A non-transient error could be, for example, that there is something wrong with your ad request. It’s recommended to investigate non-transient errors before you retry the loadAd() call.  In our sample, we enable the “Load Ad” button when the ad fails to load, so that you can reload a new ad. Similar logic you could try in your app is to set the flag (e.g. set isAdReadyToShow = false) to false to indicate the ad is not ready to display, and retry the loadAd()call at the next transition point.

onAdDismissed() is called when customers click the close button of the interstitial ad. It’s important to remember only one interstitial ad can be shown at a time. The previous ad has to be dismissed before a new ad can be shown. In our example, you re-enable the “Load Ad” button after the ad is dismissed in order to load a new ad.

Testing your ads

Testing your interstitial ads is simple. You enable the testing mode by calling the following line of code in your app:

AdRegistration.enableTesting(true);

During your integration, the server will block your ad requests if you forget to flag requests as tests. You will get error messages, such as NO_FILL or INTERNAL_ERROR from the server. But be sure to set it back to

AdRegistration.enableTesting(false)

before you publish your app in the store.

After updating your code to render ads, you will see the nicely designed full screen interstitial ads shown as the examples below:

    

To learn more about the Amazon Mobile Ads API, visit here. Some resources to check out are:

@chengluo

 

May 21, 2014

Mike Hines

In the realm of classic puzzle games for mobile apps, Bitmango is no newcomer to this genre. The South Korean company launched in 2011 and has a focus on casual mobile games that challenge the way people think. Games such as Draw Line Classic and Draw Line Bridge, (downloadable here) are available on the Amazon Appstore.

We recently chatted with Yewoon Seo who is the publishing team lead for Bitmango. Yewoon took us in depth on how Bitmango is performing on the Amazon Appstore, the team’s experience on getting their app onto the platform, and some things that surprised their team about our services.

 

“The decision to get our app onto Amazon was obvious”- Yewoon Seo

Expanding and reaching more customers has always been one of Bitmango’s priorities, which is why Bitmango decided to look into the Amazon Appstore. “I noticed that the Amazon Appstore platform was similar to Android so I immediately knew there was a huge potential here,” says Yewoon. The team initially built their apps on Google Play, so the team worked on moving their apps over onto Amazon Appstore. So how hard was it to transition their game over? The team was pretty surprised at the little amount of work needed to complete the task.

“There’s not much effort at all to port our app from Google Play to the Amazon Appstore. It took us approximately one to two hours per app, by just tweaking the API. For our app the certification process was only a day, which was something we have never seen before in any other store. ”- Yewoon Seo

The team has already received tens of thousands of downloads, which has given them the kind of expansion they were looking for.

ARPU that was worth the investment

“Results were great,” according to Yewoon. Their main app “Draw the Line: Classic” has performed really well in the Amazon Appstore in the US in terms of average revenue per user (ARPU).

But their app success didn’t stop there. When “Draw the Line: Classic” was compared to other app stores in terms of all the countries where the game was available, the app consistently outperformed others in terms of average revenue per user.

“Since the platforms between Google and Amazon are so similar there was not much effort needed to move our app over,” says Yewoon. In terms of effort needed to achieve these results, the team was very satisfied with the results.

From customer centric to developer centric

“The amount of detailed feedback that the Amazon reviewers provided during the submission process was a huge surprise to us and something we’ve never seen before. These are things that really saved us time and something we really appreciated,” says Yewoon.  Yewoon mentions that they appreciated that the Amazon team provides help for their developers in a variety of ways to answers their questions. “Sites such as the Amazon Apps and Services Developer Portal  really helped us when we needed help on specific topics or issues,” says Yewoon. The Amazon Apps and Services Blog is always updated with the latest announcements, updates, and also provides detailed tutorials.

“We’re so impressed with the service that moving forward we plan on integrating additional APIs from the Amazon Mobile App SDK over to our existing apps. We’re thinking of integrating Amazon Mobile Ads API and Amazon GameCircle API with WhisperSync for Games, for a better in game experience.” – Yewoon Seo

Learn more about the tools used by Bitmango

 

May 07, 2014

David Isbitski

The Amazon Mobile Ads API now offers more ways to help you monetize your mobile apps and games. Starting today, we will display ads to customers in the United Kingdom, and in the coming months, we will add support for Germany. On top of that, we are launching full screen interstitial ads across the Mobile Ad Network.

Enabling Europe Ad Support in Your Apps

Our expansion into Europe gives developers the opportunity to earn more money from advertising spending in Europe’s top two advertising market segments. The strong eCPM and high quality ads from Amazon will carry over to all supported market segements.

"Amazon always exceeds my expectations. $1.36 eCPM for UK banner ads is unheard of!”* – Steve Boymel, Farlex

To display ads on your app in Europe, here is what to do:

  • If your app is new to the Amazon Mobile Ad Network, simply integrate the latest version of the Amazon Mobile Ads API  included in the Amazon Mobile App SDK to get started.
  • If you have already integrated an older version of the Amazon Mobile Ads API (version 5.1.153 or older), just recompile the latest version of the Amazon Mobile Ads API.
  • If you have already integrated a newer version of the Amazon Mobile Ads API (version 5.1.236 or later), just send ad requests to Amazon and start earning!

Announcing Interstitial Ad Format Support for All Supported Market Segments

Interstitial ads use the entire screen to fully engage users. Industry-wide, interstitial ads generate greater revenue than traditional banner ads.

   

Figure 1- The same Amazon Interstitial Ad in Portrait on Phone and Landscape on a Tablet

We use responsive design when showing interstitial ads to ensure your user experience is not affected. Ads will automatically adjust to the screen size of the device on which your customers are running your app.

We know that every millisecond counts when it comes to the responsiveness of your apps. We preload interstitial ads to minimize the impact on app latency. As the developer, you decide when you want the ad to display (for example, once your user has reached a new level of your game).

“We decided to add interstitial ads from Amazon since the banner ads were outperforming other ad networks. The quality of Amazon’s interstitial ads has exceeded our expectations and our earnings increased 43%!”* - Gordon Edwards

Interstitial ads can be integrated in as little as an hour and offer revenue tracking through the same Amazon developer portal as banner ads. As with banner ads, you can distribute an app that incorporates the Amazon Mobile Ads API through other Android stores as long you distribute it through Amazon.

Integrating Interstitial Ads in Your Apps

To display interstitial ads on your app, integrate the latest version of the Amazon Mobile Ads API. To display ads in Europe, you may not need to do any additional work.  Interstitial ads will then automatically be loaded when the app is first run. You should display them at a transition point in your app (for example, game level transition). The user will always have the option to close the ad.

Let’s take a look at an interstitial ad using the sample app from the unzipped Amazon Mobile Ad API folder located in /Android/Ads/samples/InterstitialAdSample. Running the sample app for the first time you will see a button to show an ad and another button to load a new ad.

Figure 2- Interstitial ad sample app from Amazon Mobile App SDK

Clicking on the Load Ad button will preload a new interstitial ad to cache and then when you click on the Show Ad button it will be displayed.

Figure 3- A high quality Interstitial ad running on a Kindle Fire HDX 7" in landscape mode

Users have the option to close the ad by tapping on the X in the top right. Users can get more information by tapping on the “See more” button. If users tap for more information they will see a new browser window open with the url provided by the ad.

Notice that the ad automatically resizes and fits to the portrait sized screen if you rotate the device.

Figure 4- A high quality Interstitial ad running on a Kindle Fire HDX 7" in portrait mode

Just as you would do for banner ads, you use the Amazon Mobile Ads API to set up interstitial ads. You will need to first register for a free Amazon developer account. Once you do, you will receive an app id that you can use to begin coding. During this time you should set up a tax identity inside the developer console. This way you can continue to code and test your app while the verification process is happening. Once inside your Android development environment, you will need to reference the Amazon Mobile Ads jar file from the SDK and update permissions in your Android app manifest. For a full walkthrough of this process check out the Amazon Mobile Ads API quickstart guide here.

You get the same customization capabilities for interstitial ads as you do for banner ads. This includes setting target values when you are requesting an ad for age, gender, relocation or minimum CPM floor price. For a full list of targeting options check out the developer portal here.

Once you have completed these steps you can start to request ads. Your app will retrieve and display an interstitial ad using an instance of InterstitialAd. To load an ad, call the InterstitialAd.loadAd method, which uses an asynchronous task to request an ad from the Amazon Mobile Ad Network. It is important to note that only one ad can be loaded by a given InterstitialAd object at a given time, and only one interstitial ad can be displayed in your app at a given time.

InterstitialAd.loadAd will return false if a request for a new ad is ignored because of another pending ad request. To check if there is an ad loading, you can call the method InterstitialAd.isLoading. To check if there is an ad showing, you can call the method InterstitialAd.isShowing.

Below is an example of a simplified InterstitialAd.loadAd call placed in the onCreate function of an Activity that loads the next level in a game. The interstitial ad is displayed as soon as it is ready, and the next level is started after the user has dismissed the ad.

Conclusion

The Amazon Mobile Ad Network now offers more ways to help you monetize your mobile apps and games. Interstitial ads provide advertisers with a unique opportunity to engage with your audience in a meaningful way, leading to superior monetization. Adding support for interstitial ads in your apps is simple, and most developers are able to integrate them within an hour. Similarly, showing ads to EU users will allow you to earn more money from your apps with minimal work. Apps using earlier versions of the API need only recompile with the new Amazon Mobile Ads API jar file in their app to see EU ads: no coding changes are required. Apps using later versions of the API require no changes at all.

To learn more about the Amazon Mobile Ads API, check out our developer portal here as well as our blog with tips on ad mediation and tracking ad events inside your apps.

-Dave (@TheDaveDev)

*Your results may vary

 

April 24, 2014

David Isbitski

Launched in 2010, Soundtracker by South Ventures USA, is described as an app that allows music to connect people by making it easy to discover and play music in real time with friends and anyone nearby. With Soundtracker you can create stations, chat with other users, listen and comment on their latest stations amongst other features. Available on the Amazon Appstore here as well as other platforms, Soundtracker has over 4 million downloads and 1 million active users worldwide across all platforms.

I had the chance to sit down with Daniele Calabrese, CEO and founder, to discuss their experience bringing Soundtracker into the Amazon Appstore and how they’ve managed to leverage different Amazon Mobile Apps APIs to their advantage.

Increasing Opportunity with Limited Work

Even though the app itself is available on various platforms, the reason why Daniele decided to bring the app to Amazon Appstore was simple. The “opportunity with Kindle was too good to pass on since we would be able to create an app for two platforms at once.” Daniele says that early on the team realized that the Android SDK was compatible with Kindle Fire, so they decided to build the apps in tandem. The team found out quickly that “the process in getting Soundtracker into the Amazon Appstore was very easy and the results from it has definitely paid off.”

“Monetization in the Amazon Appstore jumped 100% using Amazon’s In-App Purchasing API and Mobile Ads API in the first month since implementation” – Daniele Calabrese

 

Figure 1- Kindle Fire UI

Leveraging Amazon Mobile Apps SDK to Improve Engagement

Besides using Amazon’s In-App Purchasing and Mobile Ads API, Soundtracker also uses Amazon’s Maps API and Device Messaging API as well. For Soundtracker “being able to monetize and engage your users are the most important factor in choosing a platform” says Daniele. The team credits these specific API’s as “the reason why we were able to be so successful in the Amazon Appstore.” By integrating certain APIs you can also qualify for different programs. Daniele says the team is “excited to be admitted into the Appstore Developer Select program,” which provides the team with 500k mobile ad impressions, Amazon Coins rewards to customers, and more.

Figure 2- Nearby feature and push notification

Since Soundtracker detects where other users are, relative to their current location, notifying other users who are nearby is crucial for engagement. The team decided to use Amazon Device Messaging API and Amazon Maps API to help solve this issue. The device messaging and maps APIs allow users to really engage by integrating interactive maps directly into your app, as well as sending out push notifications from the cloud to the user. When your app relies heavily on social interaction, such as Soundtracker’s feature of commenting or discovering other users’ playlist selections, getting a user’s attention is one of the most important factors. By using these APIs, the team was able to see a consistent lift in engagement.                

“Engagement in the Amazon Appstore increased by 400% in the last 6 months. Number of sessions, length of sessions, and number of tracks streamed per user increased on a weekly basis.”- Daniele Calabrese

So how long did it take for the team to integrate all these APIs? Daniele says “the process for development and testing altogether took only a week and the process was very straight forward”.

Expanding into the Living Room with Amazon Fire TV

According to Daniele, “since performance has been successful with their current app on Kindle Fire” the team plans to expand even more into the Amazon ecosystem. The next step for the team is “integrating with Amazon’s music offering and getting their app on Amazon Fire TV.” Since the team has already qualified for Appstore Developer Select, the team can now qualify for the Appstore Developer Select Amazon Fire TV benefits as well by optimizing for the Amazon Fire TV. This includes enhanced on-device merchandising and a 500k Amazon Coins offer per qualifying app.

“I would recommend Amazon Appstore to other developers. Getting our app on Kindle Fire was very easy and it gives developers a great opportunity to distribute and monetize their apps.” – Daniele Calabrese

 

March 03, 2014

Peter Heinrich

Amazon returns to GDC in 2014, offering technical and business-related sessions on building and monetizing apps, fast-track app publication into the Amazon Appstore, and partner showcases.

Learn about cross platform services: from AWS to Analytics

It’s no secret that the most profitable games are the ones that keep their players engaged—usually through a combination of great content and the best use of technology.  On Tuesday, March 18, Amazon is sponsoring a day of eight sessions at GDC, on topics like game architecture, design, technology, and monetization strategies.  You will gain insights whether building a backend, expanding to additional platforms, scaling to handle more players, or exploring new revenue streams. Anyone with an Expo pass can attend, so plan to join us today!

Amazon Appstore Blast: Get your app published in as fast as two hours

In addition, Android developers who have Expo passes will be able to submit an app to the Amazon Appstore for Android and have it reviewed for potential publication in as fast as two hours. Bring your APK file to the Amazon Appstore Blast, side load it for testing and submit the app for expedited publishing.  Amazon evangelists and testers will be on hand to help check compatibility and answer any questions. (Usually no changes are necessary—75% of apps we’ve tested just work.) Come to meeting room 2546 in the North Hall to publish your app and reach millions of new customers.

Hear from successful Amazon partners

Amazon partners will also be present at GDC to show off exciting new projects and advanced features related to Amazon devices and services. Dolby Laboratories will showcase the Dolby Audio API, which helps developers create truly immersive game experiences with enhanced Dolby sound.  Marmalade, the cross-platform SDK and game development ecosystem, will highlight their new platform support for Amazon GameCircle on booth 2510, which makes it fast and easy to incorporate Achievements, Leaderboards and Whispersync for Games into your Marmalade-based game.  In addition, Amazon staff will be on hand in the Marmalade booth to answer questions about Amazon’s developer services.  Amazon’s framework partner GameSalad will also be attending GDC.  Creator of a rapid development platform, GameSalad recently debuted drag-and-drop integration with Amazon GameCircle and our In-App Purchasing API.

Session schedule

10:00 - 10:30 am Introduction
10:30 - 11:30 am AWS Architecture
11:45 - 12:45 pm Game Analytics
12:45 - 1:45 pm Engaging Your Audience with Mobile Push Notifications (w/lunch)
1:45 - 2:30 pm Amazon AppStream - New Gaming Experiences Using the Clouds for Game Streaming
2:30 - 3:30 pm What's Working in In-App Monetization
3:30 - 4:30 pm A/B Testing with Air Patriots
4:45 - 5:45 Large Scale HTML5 Games on Desktop, Mobile & Tablets with KANO/APPS

Register now to attend the Amazon Developer Day at GDC 2014 and come meet the Amazon team.

 

February 28, 2014

David Isbitski

We just gave our case study page a quick update to make it easier for you to navigate and find the developer stories that you are looking for. Check out the case study page to see what other developers are building and learn what they are doing to engage their users, promote their apps, and successfully monetize them.

Take a look at some of the developer stories that we’ve recently featured:

Developers like Sean Sheedy and his two sons Tommy and Ian love to participate in MoDevEast competitions. In their latest competition the team created an app that would let you playback a track that somebody else recorded and while it plays back you can record your own track. Sean mentioned that “It was a no brainer to port this over to Kindle. It basically ran right away. We basically did no work.” Since Kindle is Android, it’s just like any other Android environment using Eclipse. “In development, it’s really cool that I can plug the Kindle in, and it’s just like any Android device. That is REALLY nice,” says Tommy. Read the full article.

https://m.media-amazon.com/images/G/01/DeveloperBlogs/AmazonDeveloperBlogs/legacy/mysingingmonster1._CB520510310_.png

When we spoke with Bryan Davis, the Director of Development of Big Blue Bubble, he shared some general strategy on how they generated 10%-15% better average revenue per user and 25%-30% better IAP revenue in the Amazon Appstore for My Singing Monsters. Davis tells us: “A very important aspect of monetization from free-to-play games is IAP (in-app purchasing). Our strategy is to go for volume, rather than chasing whales.” While average revenue per user (ARPU) is important, Bryan tells us that a high conversion rate is more important for Big Blue Bubble. Read the full article.

https://developer.amazon.com/public/binaries/content/gallery/drpandacropped2.jpg

Others like Tribeplay have been building apps since 2012 and created the series of games under the title Dr. Panda that first appeared on iOS and Android. According to the team, making their Android Apps available on the Amazon Appstore required little to no extra tweaking.” The team added thatone of the best things about the Amazon Appstore is that there wasn’t much work to get our apps on there. We already develop for Android, so getting our games on the Amazon Appstore was a real breeze.” The team ended up doubling their gross revenue in UK, Germany, France, Italy, and Spain. Read the full article.

We plan to make these case studies a regular series, so check back every month for a new case study post, and learn more about how the Amazon Appstore is benefitting developers. If you’re interested in checking out other developer stories, visit our case study page. If you have a specific experience with your apps and games in the Amazon Appstore or integrating the Amazon Mobile Developer SDK that you’d like to share with other developers we would love to hear about it. Just email us your story at mobile-app-marketing(at)amazon.com and you just might end up on our website.