Important information for developers with Windows Phone apps in the Store

Update (April 29th, 2019): Looks like Microsoft has fixed the issue with http Store URLs, so it should be safe to use those once again. The “ms-windows-store” protocol workaround described below is still needed if you want to use protocol links.

Last week it has come to our attention that it wasn’t possible to open the Store application on Windows Phone 8.x by clicking on the “Get” button in the web version of the Microsoft Store. We reached out to Microsoft but are yet to hear anything actionable on the subject. This post will cover a workaround that developers may use to mitigate the issue.

Why is this important?

Some of you may wonder “why would anyone care about Windows Phone 8?” That’s a valid question, so here’s the answer:

Here at AdDuplex, we have served more than 11 million ad impressions to more than 3,000 Windows Phone apps on more than 400,000 WP8 devices just yesterday. And we are in only a small portion of available apps and games. While obviously, no one is building their future on Windows Phone in 2019, many developers rely on passive income still coming from their Windows Phone apps to fund their current and upcoming projects.

Plans and calculations have been made on the assumption that the Windows Phone 8.x store will function properly at least until July 1st, 2019.

What’s the issue, exactly?

Developer web sites, ad networks, news sites, blogs, social media posts, and other resources usually link to apps in the Microsoft Store with an official standard link that looks something like this:

https://www.microsoft.com/store/apps/9XXXXXXXXXXX

At the time of this writing, when you follow such a link on a Windows Phone 8.x device you get to the web version of the Microsoft Store where you see a button to get the app or game. When you click it you are not taken to the phone’s Store app like it was before, and therefore can’t download the application.

To be clear, those super-enthusiastic users who really want it, can still launch the store app manually and search for the game in question and download it from there, but it’s obvious that a lot of users won’t go through the motions or don’t even know that this is what they should do in the situation.

The fix

We don’t know when (or whether) Microsoft will fix the web store to work on WP8 as expected. Obviously, Windows Phone is not a priority for the company. In the meantime, we need to take matters into our own hands.

In addition to the HTTP store URL, App identity page in the Partner Center (Your app -> App management -> App identity) contains a Store protocol link which is a scheme that should open the Store app right away. And it does on Windows 10.

app-identity

Unfortunately and bizarrely, at the time of this writing, these links open Xbox Music (!) app on Windows Phone 8.1 (contradicting both common sense and documentation).

The real fix… or rather a workaround

This is where we got stuck for a couple of days while we assumed that everything is totally broken and only Microsoft can help us. Fortunately, we have a great geek friend, Microsoft MVP and overall awesome person Rafael Rivera (check out his great EarTrumpet volume control app in the Store (duh!)).

Rafael suggested we try several old-school/undocumented protocol options and, to our delight, two of them worked. Namely:

ms-windows-store:navigate?appid=00000000-0000-0000-0000-000000000000

and

zune:navigate?appid=00000000-0000-0000-0000-000000000000

Yes – Zune!

Note: both worked for us every time (both on Windows Phone and Windows 10) but one of our clients reported that the “ms-windows-store” one didn’t work for him while “zune” worked. It’s unclear how thorough his testing was but just to be on the safer side we went with implementing the “zune” version.

You may be wondering where to get the GUID version of your app’s ID? In current Partner Center it’s not presented anywhere on the App identity page. However, you can most likely get it in your .appxmanifest file in your solution or WNS/MPNS (push notification) page under the same App management section in the Partner Center:

appid-guid

What should I do?

We have implemented this workaround for all Windows Phone apps/ads served on AdDuplex, so if this is your only exposure to Store links, then you don’t have to do anything.

However, if you have a website for your app or other places under your control where store links are used, we encourage you to implement the above Store protocol workaround for all your links.

In our testing the “zune:” protocol link worked everywhere, but if you want to be on a slightly safer side and don’t mind some extra work you may differentiate links for Windows Phone 8.x versions of your app (use “zune:navigate”) and Windows 10 version (use the regular http link).

Additionally, please let your fellow developers know about this so they can maximize the returns of the final months of the Windows Phone 8.x lifecycle.

And, please, let us know in the comments or at info@adduplex.com if you have any additional insights or feedback about this issue.

Introducing AdDuplex plugin for Unity

We’ve been supporting advertising in Unity games for years, but admittedly the integration process was not straightforward for non-Windows developers.  Having to edit XAML, code behind files and dealing with packages can become a burden for someone not familiar with Windows / Windows Phone native development.

To improve on that we’ve put together AdDuplex plugin for Unity games. It was designed to remove several steps in ad integration process and enable controlling everything from Unity editor. It offers a familiar approach to Unity developers – creating a banner is no different to creating any other object in the game, and manipulating its behavior is done through Inspector window and C# scripting.

AdDuplex plugin for Unity includes the following:

  • Support for AdDuplex banner and interstitial ads
  • Compatibility with WP8.1 XAML and Windows 10 builds
  • Logic that automatically defaults people to optimal ad experience
  • Sample project demonstrating integration

Getting started is very simple:

  1. Create your app and a banner or an interstitial ad unit in the AdDuplex client area .
  2. Download AdDuplex for Unity package and import it into your Unity project.
  3. In Unity create AdDuplexManagement object via GameObject -> Advertising -> AdDuplex.
  4. Fill in AdDuplexManagement inspector properties. Use ad unit credentials your created in Step 1.
  5. To show an interstitial ad fill in Interstitial ad AdUnitId in the AdDuplexManager game object and Call AdDuplexInterstitialAds.ShowInterstitialAd();
  6. Build the game while targeting Windows Store along with Universal 10 or Phone 8.1 SDK.

 

That’s it! If you have any questions, please email us at support@adduplex.com or just drop a comment below.

Introducing localized ads

localized adsLocalizing ads to user’s language increases CTR by about 20%. That’s what we have discovered by doing experiments in several markets. So, we decided to implement support for localized versions of ads for apps you cross-promote with AdDuplex

How do I start?

When you go into the details page for your app on AdDuplex you will see a new Globe button above the ad copy for each ad unit.

image

imageClick on that Globe and you will see a list of localized ads that you have already created and a button to add a new one. To edit an existing localization click on the language in the list. Click on “Add” to add a new localization.

Select a language from the list. You can also select a variation from a second dropdown (like Brazilian or Portuguese version of Portuguese). Then just create or upload an ad to be shown to users from this locale.

image

And click Save.

Let us know how this affects your click rates and downloads!

Converting all AdDuplex ad campaigns to bidding system

image[3] (1)Back in June, 2015 we have introduced our new bidding based campaigns that enable you to specify how much you are willing to spend to get your ads in front of a user with particular characteristics and, in most cases, save a great amount of your budget. Yet, we left it for you to decide whether to switch to this new system manually or wait until the end of the year.

So, important information for those who still have leftover funds in their “classic” AdDuplex account. As it was planned before, all these accounts will be automatically converted to bidding on the 1st of January, 2016. After that your fixed-impression running campaigns will be stopped, outstanding fees for them calculated and deducted from your balance. Bids for your campaigns will be preset to the same CPM value you have with the fixed model. Then we will convert your remaining balance and reactivate your campaigns the next day (UTC time).

We encourage you not to wait for the deadline and switch on your own before that. If you do so you will get a 20% bonus.

In case you’ve missed our earlier entry, more information about AdDuplex bidding sub-system can be found here.

Let’s work more effectively!

Ad resizing in new Windows 10 SDK Release

We’ve just released an important update to our Windows 10 SDK (version 10.0.1.1). Among other minor fixes and improvements It includes one important bug fix and one important new feature. Let’s cover the bug fix first.

Incorrect default ad size

Unfortunately some basic math error has slipped through unnoticed in earlier versions of the Windows 10 SDK and ads defaulted to the 320×50 effective pixel size, which is slightly incorrect aspect ration compared to the actual size of the images you upload (768×128). Sorry about that! We have now fixed the control to default to the correct size of 300×50.

Having said that, we made sure that we don’t break anything for those who had 320×50 hardcoded. In this scenario you will see some letterboxing around the ad, but the aspect ratio of the banners will be correct 6:1.

image

Resizable ads

While many of you enjoyed ads being quite small, some reported that this small size looks out of place in their designs on the desktop when the app window is relatively large. So, on a more positive note, we’ve added support for resizing of the ad control, as long as the correct aspect ratio of 6:1 is upheld and the size is at least 300×50 pixels. Like in an example you see below.

resizing-640

You can implement this type of resizing using adaptive triggers or other technique. The sample above sets the ad size to 480×80 and then flips the size to 300×50 when window gets narrow with code like this:


<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="VisualStateGroup">
<VisualState x:Name="VisualStateNarrow">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="{StaticResource NarrowMinWidth}" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="AdDuplexControl.Width" Value="300" />
<Setter Target="AdDuplexControl.Height" Value="50" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="VisualStateNormal">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="{StaticResource NormalMinWidth}" />
</VisualState.StateTriggers>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>

As usual you can upgrade to the newest version from the Visual Studio gallery.

Introducing Support for Dev Center Campaign IDs

ABC blocks

With a release of the new unified Dev Center Microsoft has introduced a feature allowing you to track conversions from various marketing activities by simply adding a parameter to your Windows Store link. Read more about it on the Building Apps for Windows blog and in the documentation.

I’m happy to announce that we have added support for Campaign IDs (CID) to AdDuplex for both cross-promotion and commercial campaigns. We will support CID in both implicit and explicit forms for all Store links in the “new” Windows 10 format (those that look like https://www.microsoft.com/store/apps/yourproductid)

Automatic CIDs

If your app’s Store URL on AdDuplex is in this new format and doesn’t include CID parameter we will add one automatically. The format for automatic CIDs is as follows:

  • for cross-promotion – “adduplex-a-<adunitid>”
  • for commercial campaigns – “adduplex-c-<campaignid>”

What if I want to use my own Campaign IDs? Do you support that?

Absolutely! You can use whatever CID you like by simply changing your app’s Store URL to one that includes your own custom CID like this:

https://www.microsoft.com/store/apps/yourproductid?cid=yourcampaignid

But what if I have a Windows Phone or Windows 8.x app and use an older link format?

You can’t use CID parameters with “old” links. However you can use the new URL format even if your app is not specifically built for Windows 10. Those URLs will redirect to a correct Store based on the user’s OS version. To get a new URL go to your Dev Center Dashboard go into the details for your app, “App Management”, “App Identity” and find “URL for Windows 10” at the bottom of that page. Then just update your AdDuplex listing with that URL and you are set.

Where can I see conversion reports?

You should be able to see the conversion reports for your campaigns in the “Analytics” –> “Channels and conversions” section in the Dev Center.

We will integrate that data into AdDuplex reports in the future. This will require an update to AdDuplex SDK.

Let us know how this works for you!

We would love to hear from you about our implementation of support for campaign ids and the results you see from the Dev Center reports. Please post your feedback in the comments bellow or share it privately at info@adduplex.com

Using AdDuplex ads with Microsoft’s Ad Mediation service

What is the ad mediation service?

Ad mediation is the managing of, and arbitration between, multiple ad providers to try and ensure that the ad that will earn the app publisher the most money is shown and potential ad space is not wasted.

The first solution to this problem came from the community in the form of AdRotator and it was initially very popular. Later, Microsoft released their own solution and it has now become much more common for people to use this due to its integration with the dev centre.

Many developers wish to monetize their apps with advertising and it’s common for them to use ads from multiple networks to achieve this. This is because some ad networks have more ad inventory in one territory than another or are able to offer a higher eCPM for the impressions.

Because of the way AdDuplex works, there will always be an ad that we can serve. This means that as long as there is a network connection we can display an ad. No other ad providers can make this claim and can deliver a typical fill rate of anywhere between 10 and 60 percent depending on varying factors including app, language and country.

This makes AdDuplex an excellent option when considering ad mediation.

One of the aims of ad mediation is to ensure that none of the available ad inventory goes to waste. Even if you’re not using AdDuplex as part of your user acquisition strategy it can be useful to ensure that you are not wasting your ad inventory. It’s better to show a cross promotion ad that may lead to you obtaining a new user than it is to let ad inventory go to waste. For this reason, we believe, you should always include AdDuplex as part of your ad mediation configuration.

How to set it up

Microsoft have some good general instructions on adding and using the ad mediation control but here are some specifics around the AdDuplex aspect.
Firstly there’s the things you’ll need to do to get set up:

Now for the configuration.

AdDuplex ads are configured in the same way as other ad providers. In Visual Studio, right click on the project References and select “Add Connected Service…”

If there are multiple services available to you, select Ad Mediator and press the Configure button to configure your mediation. Note that connected services available will depend on the version of Visual Studio you are using so you may see something slightly different to the screenshots here.

To tell the mediator that you wish to use AdDuplex, click on the “Select ad networks” option and check the appropriate box.

When you click the OK button the appropriate NuGet package will be downloaded and included in the project.

To configure the control/ads that will be displayed, highlight the AdDuplex entry and click the Configure link.

Here you should set the values you can copy from the client area website.

When you’re ready to submit your app to the store the submission process identifies that you are using ad mediation and provides a way to view and adjust the configuration.

When multiple networks are specified through Visual Studio the ads are displayed in a “round-robin” fashion. That is that the mediator will try and show an ad from one network, then an ad from the next, and so on. On the website you can tailor the configuration to be much more specific about the weight you give to each network.

In the above example the ad mediator is set to show AdDuplex ads 20% of the time but if we wanted to have AdDuplex ads only shown when paid ads aren’t available it should be set to backup.

Addressing some common Issues

Set the app key and ad unit id correctly

When settings the app key and ad unit id, make sure you set them the right way round. The app key is a GUID and is the longer of the two. The ad unit id is numeric.
In earlier versions of the ad mediation control it was only possible to set the “App Id” which was equivalent to the ad unit id. That confusion should now no longer be a problem as the ad mediation configuration allows setting both values.

Problems testing on the emulator

Some people have had issues getting ads to display when running in the emulator. There is nothing to stop ads displaying in the emulator or need for a special configuration to run in the emulator (like there is with Microsoft Advertising) however, we always recommend testing on an actual device.

Control size

You may experience problems with setting the ad height and width in a Windows 8/8.1 app and having it display correctly on devices with some resolutions. Just using ads with the default (auto) size and not setting the height and width of the control explicitly, should avoid this.

Setting the App Key and Ad Unit Id

It’s possible to set the values you need to use to configure your ad units on the dev centre website when submitting your app. We recommend not doing this and instead setting these values though Visual Studio (as above) to allow you to test that they’ve been set correctly.

After updating the NuGet package

When configuring the ad mediator settings the AdDuplex NuGet package will automatically be downloaded and included in the project. If an update to the AdDuplex NuGet package is later released we do all we can to make sure that it will still be compatible. If you manually update the NuGet package there’s a possibility of incompatibility between the AdDuplex library and the AdMediator library. If you get errors after updating one but not the other then we recommend reverting back to a last known good state or using the version of the AdDuplex control that is installed by ad mediator.

What about Windows 10?

The Ad Mediator service for Universal Windows Platform (UWP) apps currently only supports Microsoft Advertising as a provider.

We’re working with Microsoft to add the AdDuplex control as soon as possible but if you want to put the AdDuplex control in your UWP app now you can do this directly as we announced in July.

Introducing bidding sub-system

Woman hand showing an euro coinAdDuplex is all about helping indie developers promote their great apps and games for free. In order to be able to do that we are using part of that exchange inventory for paid campaigns and support the free service this way. This means that paid campaigns was always more of a support function of the main service and we tried to provide it in a minimum viable way that is of value to advertisers, but doesn’t distract us from the main focus – the cross promotion network.

Having said that, over the years we’ve introduced additional features (various targeting options) and statistics provided to advertisers. But the core principal was stuck in 2011 – campaigns were sold in preset fixed price packages. This meant that advertisers willing to spend more and get a bigger chunk of the traffic in popular demographics weren’t able to do so, and advertisers with focus on less lucrative areas were essentially overpaying for space that not many other advertisers wanted.

So the time has come to change that…

Bidding based campaigns on AdDuplex

From now on you will be able to specify how much you are willing to pay for a user with particular characteristics and we will take care that you pay up to that rate (usually less) for this campaign.

The system still works on the CPM basis (cost per thousand impressions) and you will be able to get campaigns running for as low as $0.10 CPM.

Setting up bidding campaigns

In order to enable that, we’ve introduced a new block called “Budget” at the bottom of each campaign’s details page.

image

As you can see the daily budget moved down there and a bid field was added alongside it. We also provide a bid suggestion based on your currently selected targeting. The suggestion algorithm is a little bit rudimentary at this point and will improve over time, but it should get you a quick way to determine what it would take to get a high probability of getting your ads displayed to your target audience.

Keep in mind that your bid is the maximum you are willing to pay. In reality we will charge only as much as needed to outbid your “competitors” for the same space. So, in reality you will most likely pay less than you bid.

Stats for bidding campaigns

To track your spending we’ve added a new chart to the budget stats to demonstrate your average bid for that day.

Here’s a screenshot from one of our real beta testers who had a campaign under both old (static) and new (bidding based) systems.

image

As you can see, after the switch he was able to utilize almost all of his allocated daily budget while paying 3-4x less for each impression.

What’s going to happen with my account?

Hopefully I’ve convinced you that this model is better for everyone, but you can’t see any of this when you visit our Client Area.

In case you never had any campaigns with AdDuplex you will be automatically converted to the new system and you can start taking advantage of the new system right away.

On the other hand, if you have some funds in your account we didn’t want to force you into the new world right away. If you prefer to continue doing things the “old way” you will be able to use up all of your current credits until the end of 2015. All accounts will be automatically converted on January 1st, 2016. Additionally you won’t be able to add extra funds to the non-bidding enabled account.

But to be honest we tried really hard to make converting a no-brainer for everyone. So I’m struggling to find a reasonable scenario when continuing with the old system would make more sense.

Additionally, to sweeten the deal for early adopters we will double (or even more) the credits in your account if you convert before July 7th, 2015. And, naturally, early adopters will have an opportunity to take advantage of lower CPMs due to lower competition in the early days and weeks of the rollout.

How do I start?

To convert your “old school” account to the bidding system go to:

Buy ads –> Billing –> Add credits

and you will be presented with the conversion page explaining the details of the process. The “meat” of that page explains what’s going to happen to funds in your account.

image

The logic is this – we take the “base CPM” for your account, which is the list price of impressions that you have in your account. This means that if you’ve purchased impressions with some sort of discount in the past, you will still get the funds converted as if you bought them at full price (effectively preserving your discount). Additionally we will apply an early adopter bonus if you don’t wait too long.

By the way, you can definitely visit that page even if you don’t plan to convert right away. Nothing will happen until you press the “Convert now” button.

After you click on the “Convert now” button, your currently running campaigns will be stopped, outstanding fees for them calculated and deducted from your balance. Bids for your campaigns will be preset to the “base CPM” value you can see above. (You will be able to adjust the bid for each campaign based on your preferences.) Then we will convert your remaining balance based on the rate above and reactivate your campaigns the next day (UTC time).

 

Start today and win!

As noted above, by switching early you will will get 2x more credits than those who wait, and you will compete for the same users with smaller number of other advertisers effectively guaranteeing a lower winning bid.

So what are you waiting for? Switch now!

Creating an image ad that meets the file size requirements

As a developer you may not have spent a lot of time thinking about the size (not the dimensions) of the images you use in your app. However, when it comes to sending images over a network the number of bytes that are transmitted affects the time it takes to transfer the data that makes up the image and the cost of sending that data over a network. For this reason we limit the size of images that can be used for ads. For banner ads the limit is 25KB and for interstitial ads the limit is 256KB.
partial screenshot of ad configuration screen that shows the file size limit
We get a number of questions about how to create images within these limits so I’m going to show you how. I’ll provided an example of creating a banner ad that fits within the size limit but the same principles apply to interstitial ads too.
Why is this an issue?
In an image that 768 pixels wide and 128 pixels tall that’s 98,304 pixels in total. If using a bitmap format, such as PNG, that requires a separate byte for the Red, Green and Blue value of each pixel we need 294,912 bytes. When including the additional required information and file headers we can end up with an image over 300KB in size. (It’d be even more if we needed to store alpha values too but fortunately image ads don’t need any transparency.)

To prove this point, here’s an image where every pixel is a different color. (If interested, it was created with this code.) The size of this PNG image is 302KB.
PNG image where every pixel has a different RGB value
Different image formats store the image information differently and can result in different file sizes. Here’s the same image saved as a JPEG.
JPEG image where every pixel has a different RGB value
This image is just 30.9KB (almost a tenth of the size). There is more that can be done to affect the size of an image though and that’s what I’ll demonstrate now.
Here’s a banner ad, for a fictitious game, that we’ll use for the demonstration.
Monkey in tree with app title text "Monkey puzzle"
As it stands the image is 231KB and so much larger than we can use.

Before we consider changing the format let’s look at what can be done to decrease the size of the PNG.

I’m going to do this with the excellent free tool Paint.NET. If you’re not familiar with this application it is free image and photo editing software for PCs that run Windows. You can download it from http://www.getpaint.net/

When we save a PNG file from Paint.NET there are some options available.
Paint.NET PNG save dialog with "Auto-detect" level selected for Bit depth
Here you can see the default settings that were used to create the original image above.
The fact that this dialog shows a preview of the image and the size of the file that will be produced is very useful.
As we change the Bit Depth you’ll notice the file size changes.
Paint.NET PNG save dialog with "32bit" level selected for Bit depth
Dropping to 32 bits increases the file’s size to 257.3KB.
Paint.NET PNG save dialog with "24bit" level selected for Bit depth
At a bit depth of 24 we see the file size of 231 KB and so can infer that this is the automatic value that was selected.
Paint.NET PNG save dialog with "8bit" level selected for Bit depth
At 8 bit we see the file size drop to 54.6KB but this is at the cost of image quality. You’ll notice that the blurred leaves around the text aren’t as smooth.
Paint.NET PNG save dialog with "8bit" level selected for Bit depth plus dithering and transparency set to zero
If we then take the settings to their absolute lowest and set the dithering and transparency threshold all the way down to zero the size of the file only gets down to 41.2KB and what were intended to be blurred leaves in the background no longer look like the original due to the inability to have the number of different colors in the file to create this effect.

As we can’t create a version of the desired image as a PNG that fits within the imposed size limit we need to consider other options.

Only JPEG and PNG files are supported for ads so that limit makes our decision of what other format to use easy for us.

If we weren’t limited in this way the selection of a format only becomes slightly more complicated. As a very simple way of determining which to use, PNGs are better for line based drawings and JPEGs are better when using photos or gradients. As you might expect a question on the differences between image formats has been asked on StackOverflow and there’s a very good summary of the differences in one of the answers.

As a JPEG of the highest quality, the file size is 90.1KB
Paint.NET JPEG save dialog with 100% quality level selected
Paint.NET provides a single setting when saving a JPEG file but it’s a very powerful setting. By adjusting the quality of the image that is output we can create a file that is usable within the imposed restriction.
In this case we need to lower the quality to just 74% to get what we need.
Paint.NET JPEG save dialog with 74% quality level selected
This image also preserves adequately smooth blurring of the leaf background which was the effect I was trying to achieve.
Paint.NET isn’t the only option for controlling the size of saved images. Gimp is another free to that also allows control over the output file. In fact it provides even more options than Paint.NET to control the output. The difference between the two applications is that Paint.NET shows the preview in the same window as the setting, while GIMP updates the image in the original window.
GIMP JPEG export dialog
Whichever program you use to create your banner and interstitial images there are two final tips I’d like to share.
  1. Make the image size as small as possible without impacting quality. This will allow the image/ad to load faster and therefore be potentially seen by more people.
  2. Test your image on an actual device to make sure it still looks as good on a small screen as it does on the monitor you upload it on.

I hope this helps you when preparing the images you use for your ads but if you still have any questions please get in touch via support.adduplex.com