Building a great app: Options for making money

canadian moneyIf you are building a great app, you may want to make money doing it. You have a couple of options, charge for the app, in app purchases, and ads.

This blog is part of a series, you can see the rest of the series here.

Less than 5% of app downloads are paid apps. But, that doesn’t mean you can’t make money in the store. There are generally 4 ways to make money with an app.

  • Charge for the app
  • Durable In App Purchases
  • Consumable In App Purchases
  • Ads

Let’s take a look at the support in Windows 8 store apps for each of these options

Charge for the app

All app stores give you the option of charging for an app. One of the things you should consider when you charge for an app, is having a free trial version. Most users prefer to try before they buy. When deciding to offer a trial, you should be aware of different trial versions you can offer.

  • Time limited Trial – give someone the full functionality of your app for a limited amount of time.
  • Feature limited Trial – give someone a hint of what your app can do without providing full functionality.
  • Ads in the free trial version, no ads in the paid version – display an ad control in the free version of the app, and do not display ads if the user has paid for the app.

Most of these options will require you to detect whether the user has the free or paid version of the app. You can determine this by using the LicenseInformation class. You can detect whether the user is using a trial version and you if they are using a time limited trial you can detect the expiration date for the trial.

 licenseInformation = CurrentApp.LicenseInformation;
 if (licenseInformation.IsActive)
         if (licenseInformation.IsTrial)
             // Show the features that are available during trial only.
 var longDateFormat = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("longdate");
            // Display the expiration date using the DateTimeFormatter. 
            // For example, longDateFormat.Format(licenseInformation.ExpirationDate)

            var daysRemaining = (licenseInformation.ExpirationDate - DateTime.Now).Days;

            // Let the user know the number of days remaining before the feature expires
             // Show the features that are available only with a full license.
         // A license is inactive only when there's an error.

You can find more information on Trial versions here including information on how to TEST your code to make sure it correctly detects trial and paid versions.

Durable In App Purchases

Durable in app purchases are purchases that a user makes once and are available from that point forward. For example purchasing extra levels for a game, or a theme pack.

Instead of charging a user to install your app, some apps will provide the app for free but will charge for features within the app. This is explained in detail here, but I’ll cover the key points.

For each feature that you want to make available through an in-app purchase, you have to create an in-app offer and add it to your app.

You identify each in-app offer in your app by an in-app offer token. This token is a string that you define and use in your app and in the Windows Store to identify a specific in-app offer. You have to give it a unique (to your app) so you can quickly identify the correct feature it represents in your code, for example “PongUltimateLevels” or “CanadianHockeyThemePack”.

You add all the in-app offers you want to offer your customers in the app, then you write code for each feature in a conditional block that tests to see if the customer has a license to use that feature. If you want to add new in-app offers later, you must update your code and submit a new version of your app to the Store.

 licenseInformation = CurrentApp.LicenseInformation;
 if (licenseInformation.ProductLicenses["CanadianHockeyThemePack"].IsActive) 
    // the customer can access this feature
    // the customer can't access this feature

Your app also needs to give the user a way to purchase the feature. This is done through the in-app purchase UI. Typically you will have some sort of code that when a user requests a particular action, will detect if they have purchased that feature, and if they haven’t will ask them if they want to buy it.

 function BuyFeature1() {
    if (!licenseInformation.ProductLicenses["featureName"].IsActive)
            // The customer doesn't own this feature, so 
            // show the purchase dialog.
            await CurrentProductSimulator.RequestProductPurchaseAsync("featureName", false);
            // the in-app purchase was successful
        catch (Exception)
            // The in-app purchase was not completed because 
            // an error occurred.
        // The customer already owns this feature.

Before you submit your app to the store, add each in-app offer to the Advanced features page in the Submit an app workflow. This is where you specify the in-app offer's token, price, and feature lifetime. Make sure that you configure it identically to the configuration you set in WindowsStoreProxy.xml when testing!

To test your in app purchases use the CurrentAppSimulator object instead of the CurrentApp object. This allows you to test your license logic using calls to the license server instead of the live server. To do this, you customize the file named “WindowsStoreProxy.xml” in <installation_folder>\Microsoft\Windows Store\ApiData. The Microsoft Visual Studio simulator creates this file when you run your app for the first time—or you can also load a custom one at runtime. For more info, read up on the CurrentAppSimulator docs.

Consumable in app purchases

Consumables are in app purchases that you make again and again such as money to play casino games, or food for characters in a game.

At the moment, consumable in app purchases are not supported. However, since durable purchases can be set to expire in a single day, many developers have created multiple durables, allowed them to be purchased in a day, kept a central record of their purchase somewhere, and let them expire so the user can purchase them again tomorrow. So, you cannot set consumables, but, you can set expiring durables and act like daily consumables. It’s not perfect, but it’s something.


By adding advertising to your application, you can have a free application and still generate revenue. You do need to think about the placement of your ads so that they are visible, but not disruptive for the user. Otherwise, they will not continue to use your app and you won’t see any revenue from the ads. You can also consider having ads in a free trial version of the application, and removing the ads in a paid version of the application.

Rather than spend time chasing down advertisers yourself, you can leverage Microsoft’s sales force and their existing relationships with advertisers by using Ads in Windows 8 Apps. I’ll try to summarize the key points for using Windows 8 Ads here:

If you want to add ads to your application do the following steps:

  1. Install the Advertising SDK (you can find great documentation on how to use the SDK here)
  2. Add a reference to the Advertising SDK to your project in Visual Studio
  3. Place the ad control in your application at the desired location (remember you want it visible, but not intrusive)
  4. Sign up for a pubCenter account, this is where you select the advertising categories that are most relevant to your users. You also get to select the ad sizes. You will be able to track the monetization of your ads. You can try ads in different locations in your app and follow the results or determine what time of day the ads perform best so you can fine tune your advertising strategy.

A few points you might find interesting about the Microsoft Advertising SDK and ads in Windows Store apps

  • 70% of the net advertising revenue from Microsoft Advertising SDK goes to the developers
  • There are a variety of ad sizes to choose from 250X125, 250X250, 300X250, 500X130, 292X60, 160X600, 728X90
  • Ads can be placed in Full view or even in snap view.
  • If you use the Microsoft advertising SDK you must rate your app at least 12+, you cannot rate an app with the advertising SDK 3+ or 7+
  • A user does not have to click on the ad for you to get paid, instead you get paid for every 1000 ad banners displayed.

Get Coding

Remember if you get your app published in Canada you could be eligible for immediate rewards through Developer Movement!