Adding Ads to your games and apps a introduction from AdRotator
One of the most common questions I get is.. what is the best way to monetise my app?
Well as a quick indication the following Image is how I generally advise people how to approach monetisation on the Windows Phone and Windows 8 Platform
As the image above clearly indicates, one of the best ways of monetising your game or app is via Ads within your App or Game.
To help you get started on Ads within Apps I had a chat with AdRotator developer and Unity Author, Simon (Darkside) Jackson and asked him to share his view on the opportunity of Ads in Apps and Games using AdRotator
So what is AdRotator?
AdRotator is a premium advertising solution that is able to integrate with several Ad Providers for windows platforms, take the Ads for those providers and then rotate or flip through them in a controlled and configured way. It also provides a fall back capability where if any Ad Provider fails to deliver an ad, it will intelligently move on to the next, ensuring that the app or game is always displaying ads.
What really makes AdRotator stand out is that it’s configuration can also be hosted externally to the app on a website or hosting area so that it can be updated without rebuilding or redistributing your application, you can change the ad configuration to match the best paying advertisers at any time and all apps will then be updated to use the new configuration on next use. (A by-product of this, is that you can also use this facility to deliver messages / notices to your apps and keep users informed)
AdRotator primarily targets the major Windows platforms including Windows Phone (7 & 8) and Windows 8, however there are plans to incorporate web based solutions through WinJS and Mono support.
With the release of the V2 solution for AdRotator we have now achieved parity with the aging V1 solution. This also brings several key improvements over V1 including:
· Multiple Ad Unit support from the same Ad Supplier (previously you could only support a single AdUnit per provider)
[Ad Units are individual ad configurations for Ad Providers which usually target ages, cultures, market segments, etc. These need to be monitored as different Ad Units have different payouts]
· Reduced dependency on provider DLL’s (previously you had to have all Ad Providers controls in your solution, now you ned only those you use)
· Improvements in the Ad Selection logic and probability (now 20x more random J)
· Many internal improvements to improve performance and scalability
Additionally, if you want to see the roadmap or request future features, then check out the VoteIt page for AdRotator - http://www.voteit.com/v/HiHC8jq1MV8wxEW
Find the example app here
What Ad Providers does AdRotator support?
AdRotator has always supported a core set of Ad Providers but we are always willing to increase and add more providers with sufficient interest. We do our best to include as many as possible on all platforms (provided the Ad Providers support those platforms)
Currently, AdRotator supports the following AdProviders:
· Microsoft PubCenter
· Google AdMob (Windows Phone 8 only)
· MobFox (windows Phone 7 only)
· Inneractive (formally Nokia Ad-Exchange)
· House Ads
(Platform support is only limited by Ad Provider SDK’s and their supported platforms)
Have a provider you would like to see supported, then check the VoteIt page (http://www.voteit.com/v/HiHC8jq1MV8wxEW) and submit it as a suggestion.
Part of the power of AdRotator is the configuration file that controls its operation and what ads to display and when, this configuration gives you several levels of configuration:
· Target specific Ad Providers
· Target specific cultures / regions
· Define a probability or order that Ad Providers are displayed
· Deliver individual AdUnits or multiples per provider
· Host your own ads both online and offline
For example here’s a basic multi-cultural configuration file for AdRotator:
1: <?xml version="1.0" encoding="utf-8"?> 2: 3: <AdSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 4: 5: <CultureDescriptors CultureName="en-us"> 6: 7: <AdDuplex AppId="<ID>" Probability="10"/> 8: 9: <PubCenter AppId="<publisherID>" SecondaryId="<AdUnitID>" Probability="80"/> 10: 11: <Inmobi AppId="<ID>" Probability="10"/> 12: 13: </CultureDescriptors> 14: 15: <CultureDescriptors CultureName="fr-fr"> 16: 17: <AdDuplex AppId="<ID>" Probability="10"/> 18: 19: <PubCenter AppId="<publisherID>" SecondaryId="<AdUnitID>" Probability="30"/> 20: 21: <Inmobi AppId="<ID>" Probability="60"/> 22: 23: </CultureDescriptors> 24: 25: <CultureDescriptors CultureName=""> 26: 27: <AdDuplex AppId="<ID>" Probability="33"/> 28: 29: <PubCenter AppId="<publisherID>" SecondaryId="<AdUnitID>" Probability="33"/> 30: 31: <Inmobi AppId="<ID>" Probability="33"/> 32: 33: </CultureDescriptors> 34: 35: </AdSettings>
Breaking down this configuration we can see:
1: <AdDuplex AppId="<ID>" Probability="10"/>
Each provider has its own configuration block which you can have within a culture block as many times as you wish. In here you configure the ID’s required for that provider to deliver ads (most have only one ID, some have multiple, like PubCentre). You can also then set a probability that AdRotator will pick that provider to display its ads, the higher the probability, the more likely it will try and display an ad from that provider. (setting a probability of 0 or no probability means that ad won’t be displayed)
1: <CultureDescriptors CultureName="">
These blocks allow you to target several cultures / regions within a single configuration file. This uses the devices native culture to determine which configuration to use for that region.
AdProviders all have their own home regions (PubCentre - US, Smaato - central Europe) where they have a higher likelihood of delivering ads to your customers
[Note, AdProviders won’t deliver ads if they do not have any suitable ads for your demographic, region or culture. Ad delivery is never guaranteed]
By providing different sections you can selectively configure each provider differently, using either different priorities (probabilities) or even if you use that provider in that region. (Providers are optional, you don’t have to use all of your available providers for all cultures, only those that are likely to give you the most impressions and deliver the best pay-out rates
[Ad Providers pay different rates by market or type of Ad. Impressions are when an ad is delivered by the provider and displayed in your app, which gives a minimal pay-out. Clicks are also monitored by providers which offer higher pay-out rates for user clicks]
Additionally to specifying cultures, there is the default culture (as highlighted above) where no culture is provided. This is the fall back position if the region the users device is set to is not available in your configuration. However it is also just as valid to ship a configuration file with only the default culture. This simplifies your configuration but obviously won’t pay as well as customising it per culture.
Once you’ve configured your file you need to host it in your solution or make it available to AdRotator
Hosting configuration externally
One of the biggest features of AdRotator is that you can put your configuration file on an external site (even use the same config for all your apps) and AdRotator will attempt to load it on each launch. If for some reason it can’t it will used a cached version of your configuration until it can update it again.
[Even with hosted configuration, we also recommend deploying a default configuration file with your app, this ensures ads will start from day one even if it cannot contact your external web host for some reason]
Nothing special is required for the file hosting, so long as it is available from the internet and isn’t blocked by firewalls and such.
Several free solutions exist for hosting your file if you don’t have your own web server.
· Azure Websites (https://azure.microsoft.com/en-us/) – Azure offer 10 websites free under their basic free plan. Sign up, setup a basic page, upload your configuration file and you are good to go.
· AppHarbour (https://appharbor.com/) offer free hosting, it’s a bit more tricky to setup but you cannot argue with free.
Adding AdRotator to your solution
They have worked hard over the years to improve the installation of AdRotator and these day’s it’s easier than ever thanks to NuGet.
[If you are not aware of NuGet (where have you been?), then NuGet is a dependency manager able to install and manage external references and dll’s for your solution. It has a vast library of opensource libraries you can access, just check out http://NuGet.Org for more details. Also install the NuGet extension in to Visual Studio or MonoDevelop]
If you open your solution and then Right-Click on References in the Solution Explorer you should see the following dialog:
Clicking on the Manage NuGet Packages option will open the following NuGet package manager (I’ve highlighted some important bits):
Feel free to have a browse through the packages available if you wish. When you’re ready, enter AdRotator in to the search window in the top-right hand corner of the window, ensuring that Stable Only packages are selected in the drop down (NuGet also includes the ability to host dev / alpha / beta backages, to get in progress versions of dependencies). Once you search you should see AdRotator listed in the results. Looking on the right hand side you can see this is the Stable V2 release.
[AdRotator also uses some other dependencies from NuGet itself (Microsoft.bcl references which are portable extensions for .NET), when you see a license prompt appear, simply accept it to continue the installation. The Microsoft.BCL libs use a standard OpenSource license that is free to use.]
On clicking Install, NuGet will download the package and install it directly into your project, adding references and copying important files, including a sample “defaultAdSettings.xml” configuration file for you to modify or replace. Close the NuGet window and when you return to Visual Studio you will also see the implementation instructions for the AdRotator control, these instructions walk you through the rest of the journey to get up and running, here they are in short.
1. Open the XAML page you want to display ad’s on
2. Add the xmlns:adRotator="clr-namespace:AdRotator;assembly=AdRotator" XAML using/namespace reference to the top of the XAML page, in line with the other XAML using/namespace references (note there are different examples for Windows Phone and Windows 8 because the using/namespace references are subtly different
3. Add the following XAML code to the page where you want it displayed, which is an example implementation for the AdRotator control:
1: <adRotator:AdRotatorControl 2: x:Name="MyAdRotator" 3: AdHeight="90" 4: AdWidth="728" 5: LocalSettingsLocation="defaultAdSettings.xml" 6: RemoteSettingsLocation="http://<your site here>/defaultAdSettings.xml" 7: AutoStartAds="True" />
4. If you are hosting your configuration externally as well, replace the website reference in the RemoteSettingsLocation property, also you can rename your configuration file in your project if you wish, if you do so also update the LocalSettingsLocation property
[If you wish you can also add the AdRotator control through the designer, we support whichever way you want to do it]
5. Finally, return to the Solution Explorer and add references to all the AdProviders you wish to support. PubCenter is available direct from Visual Studio, AdDuplex and Inneractive are now available through NuGet. For other providers you’ll likely need to visit their websites and download their SDK’s
[If an Ad Provider does not exist or is not referenced in your solution, then AdRotator will handle it by ignoring that Ad Providers configuration. Can’t use it if it doesn’t exist!]
And you are done. Just run the project and provided the Ad Dll’s are in place and the configuration in your config XML is correct, you should start seeing Ads in your page.
Special considerations for Ad Providers who use WinRT components
Now life would be simple if all providers were just DLL’s like they used to be, however that is not the world of today, now we also have WinRT components.
Because we cannot use standard techniques to discover WinRT components (COM is alive and breathing) we need to do a bit extra for AdRotator to be able to use them, just one line mind.
At present two providers we support have upgraded to use WinRT components, these are:
· Microsoft PubCenter (well, that makes sense)
When you use these providers, we need to pass the references for these WinRT components to AdRotator on startup, to do this we simple add an extra line to the Code behind (the .cs files) for the Pages you implement Adrotator on which looks like this:
1: MyAdRotator.PlatformAdProviderComponents.Add(AdRotator.Model.AdType.PubCenter, typeof(Microsoft.Advertising.Mobile.UI.AdControl));
The readme that comes with AdRotator gives you all the details and code for each provider that does this.
[Just check the namespace for the AdControl itself as some providers use different namespaces for different platforms]
A lots of developers want AdRotator on multiple pages in their app or in several locations on a page. Now it’s fine to use several controls throughout your app but unless you are using different configurations then it is better to build a user control and then re-use that throughout your app. It is simply more efficient.
To set up AdRotator in a user control, simply:
1. Create a new User control in your project
2. Set it’s width and height to your desired ad placement size (this will largely depend on the size of ads you have configured with your Ad Provider)
3. Repeat the instructions above within the user control.
4. Save and close it.
5. Now just Add the user control to each page you wish to display ads on, e.g.
1: Using: xmlns:local="clr-namespace:PhoneApp3" 2: Control: <local:AdRotatorUserControl />
This way is more efficient and also means you only need to update the User Control if you wish to change any of the AdRotator properties.
Another very useful feature of AdRotator is that you can setup your very own Ads, in fact we’ve talked to some implementation that only do their own ads.
[In fact we know if at least one implementation where the developer uses AdRotator to sell ad space in their app, they just host the Ad remotely and rotate each ad in]
Implementing a House ad is very easy, in effect it is just another User control in your project.
1. Create your UserControl Ad
2. Note the full namespace identity of the user control (in the example app it is PhoneApp3.MyHouseAd.MyHouseAd1)
3. Add a DefaultHouseAd entry in to your configuration xml, for example:
1: <DefaultHouseAd SecondaryId="PhoneApp3.MyHouseAd.MyHouseAd1" Probability="90"/>
[The probability setting is completely optional, if you set a probability it will be included in the ad rotation, if you do not set a probability, then it will only be shown if no other ads could be fetched (fallback)]
If you wish to also then place the HouseAd online, they you just need to host it online and then add the Url to the AppID property for the DefaultHouseAd, for example:
1: <DefaultHouseAd AppId="http://adrotator.apphb.com/SampleRemoteHouseAd.xaml" SecondaryId=" PhoneApp3.MyHouseAd.MyHouseAd1"/>
For an example online House Ad, check the one we include with our example projects here: http://adrotator.apphb.com/SampleRemoteHouseAd.xaml
At the time this blog was posted, our Unity editor integration is currently broken, something changed in Unity of late and it no longer works. We are working on it with some help from our community and as soon as it’s working again we’ll update the main site.
That’s NOT to say you cannot use AdRotator in Unity projects, it just means you need to follow the instructions above for adding AdRotator in to the exported Windows Phone or Windows 8 project manually (if you count 5 mins as manual)
So AdRotator still works, it is just our editor integration and build process that isn’t working, meaning you cannot just configure it from Unity itself.
The AdRotator team are working hard to remedy this with the time we have, so keep checking.
This article has been a brief run through the setup of AdRotator. Ignoring the time it takes you to register on all the ad providers and work out the Ad configuration that works for you, you should be up and running in 5 mins.
There are more features currently in the framework and many more planned for the more advanced edge cases for Ad Configuration and rotation, so feel free to check out the voting page for what people are asking for.
If you have any suggestions / improvements or other AdProviders you want us to support, then please use the Voting page for AdRotator users here: http://www.voteit.com/v/HiHC8jq1MV8wxEW
If you have any issues or want to get in touch with the AdRotator team, then log an issue on the GitHub site and either we or one of our growing community will be there to help you: https://github.com/Adrotator/AdrotatorV2/issues
Finally, if you are so inclined and want to get involved with this amazing project, then put your hand up, race out and let the AdRotator team know. Simon and other are always willing to encourage developers to join in, fork our the repo and send/contribute some interesting code!
Find the example app here