Appstore Blogs

Appstore Blogs

Want the latest?

appstore topics

Recent Posts

Archive

Showing posts by Chengluo

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 13, 2014

Chengluo

Last year, we launched Amazon Coins in the US, UK, and Germany. As of today, Amazon Coins are available to even more customers in Europe as we are expanding the program to France, Spain, and Italy. We’re giving millions of Euros (100 Coins = €1)  worth of coins to customers in France, Italy, and Spain, so this is a great time to submit new apps to the Amazon Appstore and ensure your existing apps are available for distribution in these countries.

Amazon Coins allows Amazon customers to buy and enjoy Android apps and in-app items at a discount, with savings of up to 10%. As a developer, you are paid whether your apps or in-app items have been purchased with Amazon Coins or another payment method, and you’ll continue to get your full 70% revenue share. Since the launch of Amazon Coins in the US, UK, and Germany, customers have already purchased hundreds of millions of Amazon Coins and are actively using them on Android phones and tablets, including Kindle Fire devices, representing real dollars to developers.

500 Coins for Amazon Appstore Customers

Kindle Fire owners will receive 500 free Coins automatically in their accounts and, for a limited time, users of the Amazon Appstore on Android phones and tablets will receive 500 Coins once they’ve updated the client and downloaded an app. During the promotion, you’ll have additional opportunities to boost your sales while customers enjoy buying apps with their free Coins. We ran a similar promotion after we launched Coins in the US, UK, and Germany, and developers gave us positive feedback about the monetization they achieved in conjunction with the promotion. Here’s what a few of them had to say:

“Sales went up 10-fold (1000%) for about a week during the Amazon Coins promotion and 500% afterwards.” –Barnstorm Games

“We saw a significant increase in revenue after the Amazon Coins announcement. Revenue from Amazon Coins during the launch week was higher than previous week’s revenue. What was also interesting is that our cash receipts also saw a lift from Coins.” — Halfbrick Studios Pty Ltd

 “Our SMS texting and calling app revenues grew more than 300% on Kindle Fire the day after Amazon Coins went live, with a staggering 78% coming from Coins. We’re convinced that this virtual currency makes sense for developers no matter what category their app is in; it certainly does for us.” — textPlus, Inc.

We continue to receive positive feedback from developers about the monetization they see on Amazon and their ability to connect with new customers via Amazon Appstore. Learn what developers like Pixowl, TuneIn, and Toca Boca have to say in our latest developer blog.

No API Integration Necessary

To benefit from Amazon Coins, you do not need to integrate an API. If your apps are already available on the Amazon Appstore and available for distribution to customers in France, Italy, and Spain, you’re already set. If you have new apps and games that are still in development, then you’ll want to submit them soon to take advantage of this promotion. If you have a new Android app, we’ve found that 75% of Android apps we’ve tested just work on Amazon Appstore, with no coding changes required. Test your APK in less than 10 minutes with our drag-and-drop testing tool. It’s also a good idea to ensure your apps are available in France, Italy, and Spain, which you can check from your account on the developer portal.

March 05, 2014

Chengluo

Reaching More Customers and Making More Money Per User

In a previous case study, you heard about the tactics that Big Blue Bubble uses to monetize their free to play (F2P) games. In this study, we’d like to share how June Software increased their app exposure by going from an iOS-only producer to an iOS and Android platform producer, and how their presence in the Amazon Appstore has racked up higher Average Revenue per User (ARPU) than any other app store.

June Software is a small San Francisco based software company founded in 2008. They build casual, arcade games and e-learning games for children. Initially June Software only built games for iOS where they have titles such as Math vs. Zombies and Guess the Movie, which is ranked #3 worldwide and is #1 in Australia.

June + Unity + Amazon Appstore = Less Friction, More Revenue

To grow their customer base, June Software decided to address the Android marketplace. June chose to port their iOS games to Android using Unity. Unity allows them to build their app once and deploy it to multiple app stores, including the Amazon Appstore.

When we asked about their experience on Amazon apps store, June Software Director Products Saurabh Jain said:  “On Amazon, we have seen 2x times the ARPU [we see] from Google Play, and 1.2x [more than] than Apple AppStore. The overall downloads aren’t there yet, but the revenue makes it a very good market for us.”

 

Increasing Time in Games Increases Potential Income

One effective strategy that Saurabh implemented is that they have integrated Amazon IAP and GameCircle features in their games, which increased potential revenue and player engagement. GameCircle includes features such as leaderboards and achievements that keep players engaged and can increase user session time and session frequency, giving uses more opportunities to make IAP purchases. And it works on Android and iOS. This is exactly what June Software needs for their games available for both platforms.

What can you do?

  • To learn more about using Amazon GameCircle in your Unity apps, read this blog post and refer to this documentation.
  • To learn more about using Amazon In-App Purchasing in your Unity apps, read this documentation. To see how Mad Menace Games used the Amazon IAP Plug-In for Unity, read this post.
  • For additional information on Amazon Unity Plug-ins, read this

 

 

Want the latest?

appstore topics

Recent Posts

Archive