<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>kraig brockschmidt</title>
	<atom:link href="http://kraigbrockschmidt.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://kraigbrockschmidt.com/blog</link>
	<description>clarity › light › solutions</description>
	<lastBuildDate>Fri, 17 May 2013 18:00:32 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Thoughts on Monetization #5: Multiple Apps and Monetizing Web APIs</title>
		<link>http://kraigbrockschmidt.com/blog/?p=828</link>
		<comments>http://kraigbrockschmidt.com/blog/?p=828#comments</comments>
		<pubDate>Fri, 17 May 2013 18:00:32 +0000</pubDate>
		<dc:creator>kraigb</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[monetization]]></category>
		<category><![CDATA[Windows Store]]></category>

		<guid isPermaLink="false">http://kraigbrockschmidt.com/blog/?p=828</guid>
		<description><![CDATA[To complete this series from part 1, part 2, part 3, and part 4, the last topic is thinking about multiple apps together. In the Windows Store, apps must stand on their own (suites are not supported), and yet if you are selling more than one app it certainly helps create marketing relationships between them. [...]]]></description>
				<content:encoded><![CDATA[<p>
	To complete this series from <a href="http://kraigbrockschmidt.com/blog/?p=810">part 1</a>, <a href="http://kraigbrockschmidt.com/blog/?p=815">part 2</a>, <a href="http://kraigbrockschmidt.com/blog/?p=819">part 3</a>, and <a href="http://kraigbrockschmidt.com/blog/?p=823">part 4</a>, the last topic is thinking about multiple apps together. In the Windows Store, apps must stand on their own (suites are not supported), and yet if you are selling more than one app it certainly helps create marketing relationships between them. In other words, you can build upon the idea of lite and full apps, and think about how a diversity of apps and monetization models can help you build your overall business.
</p>
<p>
	For example, having some great free apps can help build a solid reputation for your business, thereby encouraging users to check out your other paid offerings. Because each app in the Store can include links to your website, each app is a doorway to the rest of your business as presented on the web. In this way, free apps can serve as giveaways (also known as loss leaders) that many businesses use to get customers in the door where they can then experience additional products.
</p>
<p>
	Although the Windows Store certification policy does not allow apps to be interdependent (that is, you cannot require the installation of a second app to install the first), you can make them <em>interoperate </em>such that having those apps installed together makes additional scenarios possible. One of the most effective ways of doing this is through the Share contract, where you can use custom formats to exchange richer information than the standard formats allow. Another powerful means is protocol activation, wherein you use a specific URI scheme like <em>bingmaps://&nbsp;</em>to allow one app to delegate specific tasks to another. This is limited to one-way communication, mind you, but can still be a powerful way to&nbsp;have those apps work together&nbsp;and light up&nbsp;more features.
</p>
<p>
	And you can certainly advertise these interop features on each app&#39;s description page in the Store. That is, while you can&#39;t <em>require </em>one app to be installed to use another, Store policy does not prohibit making mention of what&#39;s possible when you do. You can say, &quot;By also installing the companion SuperApp, these additional features become available:&#8230;.&quot;
</p>
<p>
	As a final note, I want to mention a growing opportunity that&#39;s really just in its early stages. Many apps have a backend service that provide much of their runtime data. If that data might be useful to other apps, consider making your web API available and monetizing access to it. This way you have another facet of your business to develop that is focused on developers as customers, rather than just end-users. And you can also use services like <a href="http://www.mashape.com">Mashape</a> and <a href="http://www.mashery.com">Mashery</a> to help you in the process.
</p>
<p>
	And with that, we conclude this series. I hope it&#39;s been helpful and inspiring, and I look forward to any comments you have on monetization strategies.</p>
]]></content:encoded>
			<wfw:commentRss>http://kraigbrockschmidt.com/blog/?feed=rss2&#038;p=828</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thoughts on Monetization #4: In-app purchases</title>
		<link>http://kraigbrockschmidt.com/blog/?p=823</link>
		<comments>http://kraigbrockschmidt.com/blog/?p=823#comments</comments>
		<pubDate>Thu, 16 May 2013 18:00:54 +0000</pubDate>
		<dc:creator>kraigb</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[monetization]]></category>
		<category><![CDATA[Windows Store]]></category>

		<guid isPermaLink="false">http://kraigbrockschmidt.com/blog/?p=823</guid>
		<description><![CDATA[Continuing from part 1, part 2, and part 3, let&#39;s now talk about using in-app purchases. The technical details and some useful design thoughts can be found on How to support in-app purchases on the Windows 8 developer center. What I want to add to that discussion are some observations from a few other apps. [...]]]></description>
				<content:encoded><![CDATA[<p>
	Continuing from <a href="http://kraigbrockschmidt.com/blog/?p=810">part 1</a>, <a href="http://kraigbrockschmidt.com/blog/?p=815">part 2</a>, and <a href="http://kraigbrockschmidt.com/blog/?p=819">part 3</a>, let&#39;s now talk about using in-app purchases. The technical details and some useful design thoughts can be found on <a href="How to support in-app purchases from your app ">How to support in-app purchases</a> on the Windows 8 developer center. What I want to add to that discussion are some observations from a few other apps.
</p>
<p>
	First, with the obvious case, you can use in-app purchases to turn certain features on. This includes turning off ads, meaning&nbsp;that you use an in-app purchase for this purpose rather than converting a trial to a paid app as in part 3. Here, you&#39;re thinking about how a user can convert money (their money) into added capabilities.
</p>
<p>
	Second is thinking about how to introduce another level between the purchases and capabilities. This is a strategy used in a number of games that have their own in-app &quot;currency&quot; (coins, points, etc.), with which you can buy extra capabilities. Often you can earn by playing the game for a long time, but if you&#39;re impatient you can convert real money into in-app currency and thus shortcut the process. In other words, you&#39;re letting the user choose between patience/perseverance and a little bit of their money.
</p>
<p>
	Two of the most popular games, both by HalfBrick Studios, are great examples in this regard: Fruit Ninja and Jetpack Joyride.
</p>
<p>
	Fruit Ninja offers the Dojo within the app where you can acquire different blades, backgrounds, and special (and temporary!) powers (like a bomb deflector). Some of these you can acquire by performing special feats within the game, like finishing with a specific number of points, slicing specific fruits in a certain sequence, and so forth. You can also acquire them buy exchaning &quot;starfruit points&quot; that are gradually earned by playing the game. But then you can also make an in-app purchase of extra starfruit points, allowing you to then purchase the add-ons with those points. So if you&#39;re not as patient as my six-year-old son has been to save up 9000 points for the King Dragon Blade, you can just spend a couple of dollars and get it right away.
</p>
<p>
	Jetpack Joyride does something similar. By playing the game and completing missions you earn coins with which you can buy all kinds of extra gadgets, powers, fun clothing, and so forth. Again, you can earn all the points you&#39;ll ever need just by playing the game. But you can also just flat-out purchase coins with real money. Because the Windows Store does not yet provide for in-app consumables (an in-app purchase you can buy multiple times), Jetpack Joyride offers a number of one-time purchase options: 20,000 coins for $1.49, 50,000 coins for $2.49, 100,000 coins for $3.49, 250,000 coins for $5.99, and 1,000,000 coins for $13.99 (which would allow you to buy everything). So again, if you&#39;re willing to spend, you don&#39;t have to be patient.
</p>
<p>
	Jetpack Joyride also offers a brilliant in-app purchase that I thought was well worth $1.49: the &quot;counterfeit machine&quot; which automatically doubles all the coins you earn when playing the game. This is totally worth it!
</p>
<p>
	So for in-app purchases, I strongly encourage you to look at what other apps are doing, especially the most popular ones, as they offer good insights into designing around this monetization approach.</p>
]]></content:encoded>
			<wfw:commentRss>http://kraigbrockschmidt.com/blog/?feed=rss2&#038;p=823</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Thoughts on Monetization #3: Using Ads</title>
		<link>http://kraigbrockschmidt.com/blog/?p=819</link>
		<comments>http://kraigbrockschmidt.com/blog/?p=819#comments</comments>
		<pubDate>Wed, 15 May 2013 18:00:19 +0000</pubDate>
		<dc:creator>kraigb</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[monetization]]></category>
		<category><![CDATA[Windows Store]]></category>

		<guid isPermaLink="false">http://kraigbrockschmidt.com/blog/?p=819</guid>
		<description><![CDATA[Continuing from part&#160;2 of this series, the next topic is about using ads for monetization. This is one of the most popular methods, especially with free apps, but you should also consider using them in trial versions of paid apps. As described in part 1, trials should frequently (but appropriately and respectfully) remind the user [...]]]></description>
				<content:encoded><![CDATA[<p>
	Continuing from <a href="Permalink: http://kraigbrockschmidt.com/blog/?p=815">part&nbsp;2 of this series</a>, the next topic is about using ads for monetization. This is one of the most popular methods, especially with free apps, but you should also consider using them in trial versions of paid apps. As described in <a href="Permalink: http://kraigbrockschmidt.com/blog/?p=810 ">part 1</a>, trials should frequently (but appropriately and respectfully) remind the user of the app&#39;s trials status and invite an upgrade. Ads really serve the same purpose when you have a paid app as well: just as you might feature-limit a trails, having ads in a trial is a feature that many users would like to remove! In other words, running the app ad-free is a &quot;feature&quot; that&#39;s enabled with purchase of the full app.
</p>
<p>
	But let&#39;s talk more of <em>designing </em>around ads. This is one place where I see many apps being somewhat lackadaisical.
</p>
<p>
	First, if your app is always going to be free, then the whole purpose of using ads is to not just display them, but to get uses to click on them which should increase your revenue. In this way they should be placed invitingly, but not obnoxiously. For this I think you can find quite a bit of guidance in researching best practices for ad placement on web sites, as those are essentially free apps themselves.
</p>
<p>
	Personally, I think the use of ads is most effective when you also have a path to a paid app, even if the paid app&#39;s only added feature is removal of the ads. This way you give the users a choice of dealing with the ads, or ponying up a little cash for the privilege of removing them.
</p>
<p>
	Here, then, is where you have many design approaches that could help increase your revenue (again, these are ideas and observations, not necessarily ones I&#39;ve personally tested):
</p>
<ul>
<li>
		With static placement (within the app&#39;s layout), ads&nbsp;needs to be visible, of course, and if you offer a means to get rid of them, you want to think about making the ads a <em>distraction </em>from the real content of the app. This encourages conversion.
	</li>
<li>
		As I suggested for trial reminders in <a href="http://kraigbrockschmidt.com/blog/?p=810 ">part 1</a>, use dynamic placement of ads to break up the flow of the app&#8211;to again be just annoying enough but not obnoxiously so, as an encouragement to get rid of those ads. This is what TV shows excel at doing: build up to a near-climax, but then break away so that your attention is transferred from the program to the ad. I&#39;ve seen this strategy often with web games where you&#39;re playing along and finish one level. You&#39;re looking forward to the next but then app tosses in an &quot;interstitial&quot; ad that makes you wait for 15-30 seconds for your next dose of the game. You can&#39;t make the user wait too long, of course, but a little wait makes them hungry and again more likely to upgrade.
	</li>
<li>
		An app can build some more intelligence around frequency of ad insertion within the flow too: an app can keep track of total elapsed usage time, such that at first the ads don&#39;t appear as often, but as the user gets more and more involved with the app, you can increase the frequency of disruption. A friend of mine wrote a game that just displayed ads statically, and I suggested that he insert an interstitial between every 4 -5games, which meant about every 5 minutes of play time. It would not be difficult to say that after 30-60 minutes of total usage time, the ads showed up once every three games. After another 30-60 minutes, every 2 games, and then after another 30 minute have an ad show up after every game.
	</li>
<li>
		And don&#39;t forget, when you show an ad, provide a link to your app&#39;s page in the Store with a reminder that you can get rid&nbsp;of ads with an upgrade!
	</li>
</ul>
<p>
	More thoughts? I&#39;d love to hear your comments!
</p>
<p>
	&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://kraigbrockschmidt.com/blog/?feed=rss2&#038;p=819</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Thoughts on Monetization #2: Trials vs. Demos/Lite Versions</title>
		<link>http://kraigbrockschmidt.com/blog/?p=815</link>
		<comments>http://kraigbrockschmidt.com/blog/?p=815#comments</comments>
		<pubDate>Tue, 14 May 2013 18:00:30 +0000</pubDate>
		<dc:creator>kraigb</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[monetization]]></category>
		<category><![CDATA[Windows Store]]></category>

		<guid isPermaLink="false">http://kraigbrockschmidt.com/blog/?p=815</guid>
		<description><![CDATA[Continuing from part 1 of this series, the next topic is using trials of a paid app vs. free demos of those apps. There are distinct differences between the two. A trial version of a paid app is either feature-limited or time-limited as noted in the previous post. What&#39;s distinctive here is that the trial [...]]]></description>
				<content:encoded><![CDATA[<p>
	Continuing from <a href="http://kraigbrockschmidt.com/blog/?p=810">part 1 of this series</a>, the next topic is using trials of a paid app vs. free demos of those apps. There are distinct differences between the two.
</p>
<p>
	A trial version of a paid app is either feature-limited or time-limited as noted in the previous post. What&#39;s distinctive here is that the trial gives the user the same experience as the full app, such that if they upgrade they can then continue on and deepen that experience.
</p>
<p>
	A free demo, on the other hand, is a standalone app, which would, of course, invite the user to visit the full app&#39;s page in the Store. It must be noted that such a free demo app must deliver good value to the user in and of itself&#8211;it can&#39;t just be an advertisement. This is why you see &quot;lite&quot; versions of apps, because &quot;lite&quot; makes it clear that you can do plenty with the app, just not everything.
</p>
<p>
	Lite/demo apps can typically be used for any length of time, but while being useful, think of them as a way to <em>showcase </em>features of the full app&#8211;like a teaser trailer&#8211;rather than providing a complete experience.
</p>
<p>
	Here&#39;s an example I gave in Chapter 17 of <a href="http://aka.ms/BrockschmidtBook">my book</a>: Let&rsquo;s say you have a game with five distinct &ldquo;worlds&rdquo; through which a player would normally progress in the app&#39;s full version [if you know the game Switchball, I wrote this example based on it]. A trial version would allow a player to start working through those worlds but would cease to operate completely after some short period of time, say 30 or 60 minutes. In that time, a player might not progress past the first few levels in the first world, so the experience of the overall game is incomplete. A free demo/lite version, on the other hand, could be played as much as one wished but would contain only one level from, say, three of the five worlds. This gives the user a broader taste of the app and, because it can be played many times, serves as a continual advertisement for the full experience without giving anything more away.
</p>
<p>
	When offering a lite/demo app, you can forego offering a trial of the paid version, or make the trial relatively short. In the end, you&#39;re always trying to use trials and demos to lead to purchase of the full app, so design a demo app with that in mind.
</p>
<p>
	Other ideas? Please add comments!</p>
]]></content:encoded>
			<wfw:commentRss>http://kraigbrockschmidt.com/blog/?feed=rss2&#038;p=815</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Thoughts on Monetization #1: Trials and Trial Conversions</title>
		<link>http://kraigbrockschmidt.com/blog/?p=810</link>
		<comments>http://kraigbrockschmidt.com/blog/?p=810#comments</comments>
		<pubDate>Mon, 13 May 2013 18:00:50 +0000</pubDate>
		<dc:creator>kraigb</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[monetization]]></category>
		<category><![CDATA[Windows Store]]></category>

		<guid isPermaLink="false">http://kraigbrockschmidt.com/blog/?p=810</guid>
		<description><![CDATA[Having played around with a number of apps now, I&#39;ve been surprised at how little thought is sometimes given to the monetization of an app in the Windows Store. My guess is that its because many developers focus so much on the implementation of the app&#39;s functionality that they don&#39;t necessarily leave time to think [...]]]></description>
				<content:encoded><![CDATA[<p>
	Having played around with a number of apps now, I&#39;ve been surprised at how little thought is sometimes given to the monetization of an app in the Windows Store. My guess is that its because many developers focus so much on the implementation of the app&#39;s functionality that they don&#39;t necessarily leave time to think through business-related aspects like monetization. I would also guess that many developers don&#39;t even feel qualified to think about such things, and thus punt on the question.
</p>
<p>
	With monetization, the Win8 Dev Center does have a topic entitled <a href="With monetization, the Win8 Dev Center does have a topic entitles Choosing your business model, but it really just mentions the different options and links off to &quot;how-to&quot; topics that explain">Choosing your business model</a>, that really lists the different options and links to some helpful details on them. What I want to do here in this next series of posts is add some thoughts to those pages. I&#39;m not claiming to be an expert on these matters by any means, but there are some observations that I think can be helpful in your app efforts, many of which, are really about speaking to&nbsp;a customer&#39;s emotional reality rather than their rational mind, as purchasing decisions in the one or&nbsp;ten&nbsp;dollar range (as with most apps) <em>is</em> an emotional matter. I think this is something that most product marketers will tell you time an again.
</p>
<p>
	Our first topic, then,&nbsp;is offering app trials and converting trials into full licenses.
</p>
<p>
	The Windows Store, as you may have already seen, allows you to offer a &quot;try-before-you-buy&quot; license for paid apps (see <a href="http://msdn.microsoft.com/en-us/library/windows/apps/hh694065.aspx">How to create a trial version of your app</a>). When you enable a trial (which can be time limited), the user will see a &quot;Try&quot; button alongside the &quot;Buy&quot; button on the app&#39;s page in the Store. Clearly, this gives potential customers a chance to really know what they&#39;re buying, and because the app knows it&#39;s running a trial license it can disable certain features and take opportunities to encourage the user to upgrade.
</p>
<p>
	What&#39;s surprised me about a number of paid apps is that (a) they don&#39;t offer a trial at all, and (b) those that do offer a trial don&#39;t take opportunities to remind me to convert to a full paid version.
</p>
<p>
	So here&#39;s my short list of good practices for paid apps&#8211;again, I won&#39;t call them &quot;best&quot; because I don&#39;t have experience in how well these work, but they seem like common sense to me:
</p>
<ul>
<li>
		If you set a price for your paid app, always always offer a trial. Otherwise you&#39;re asking users to buy the app either on reputation or your product page alone. Perhaps if the app is famous you can skip the trial, but until then, this feature is, in my mind, essential.
	</li>
<li>
		Trials can be time-limited or feature-limited or both. Spend some time thinking about what your free/trial experience should be like. You want to give the user enough to really experience the app, but only enough to be a real teaser for buying the full app. Think of this like the movies. A feature-limited trial is like a movie trailer: you get a good taste, but not the full experience. Hopefully the trailer makes you hungry for the real thing! A time-limited trial, on the other hand, is like a movie rental: you get to enjoy the full thing for a time, after which you need to make a decision to own to continue the experience.
	</li>
<li>
		Trials are different from demo apps&#8211;I&#39;ll talk about those in another post.
	</li>
<li>
		The Store tracks time-limited trials by date, but you can certainly implement a time-of-use limit in the app itself, like games that allow 60 minutes of play time or such. This can be an effective way to focus the user&#39;s attention on the need to decide whether to buy.
	</li>
<li>
		Trials should remind the user&#8211;often, but not obnoxiously so&#8211;that they are running a trial. Think through every opportunity to remind the user of the features they&#39;re missing, how much time they have left to enjoy the app, and the benefits of buying (&#39;ve been surprised how many trial apps never remind me at all!). Put yourself in the customer&#39;s place, of course, to you communicate to their needs and sensibilities and not yours as the developer.
	</li>
<li>
		With reminders, I think it&#39;s effective to use them to disrupt the flow of the app in key places (especially launching). You want the reminders to be just annoying enough that the user will want to get rid of them. In movie trailers, you build up energy but then leave the audience hanging, wanting to know the answer or the resolution. You can take the same approach here: let the user go through most of the experience of an app, but then break that flow near its climax with a little reminder. Again, play to the user&#39;s emotions, because app purchasing is generally an emotional decision.
	</li>
<li>
		If the user runs the app after it&#39;s expired, don&#39;t just say &quot;the app is expired&quot; but remind them what they&#39;re missing and remind them of any state or history they&#39;ve built up in the app. For example, a note-taking app can say &quot;You&#39;ve written down 150 notes and reminders&#8211;upgrade now to keep them&quot; or &quot;You&#39;re only 200 points away from &lt;some achievement&gt;. Upgrade now to earn your next award!&quot; In other words, remind the user of the key experiences or connections they might have had with the app (emotional) rather than the mere fact of an expired trial (rational).
	</li>
</ul>
<p>
	Do you have other ideas? Please share them in the comments!
</p>
<p>
	&nbsp;
</p>
<p>
	&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://kraigbrockschmidt.com/blog/?feed=rss2&#038;p=810</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Testing Tip #8: Double-check your graphics, tooltips, and other manifest information</title>
		<link>http://kraigbrockschmidt.com/blog/?p=803</link>
		<comments>http://kraigbrockschmidt.com/blog/?p=803#comments</comments>
		<pubDate>Fri, 10 May 2013 18:00:03 +0000</pubDate>
		<dc:creator>kraigb</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[app building]]></category>
		<category><![CDATA[certification]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[Windows Store]]></category>

		<guid isPermaLink="false">http://kraigbrockschmidt.com/blog/?p=803</guid>
		<description><![CDATA[Before submitting your app to the Store, take some time to review your app&#39;s manifest and the information and files it references. Mostly concentrate on the Application UI tab in Visual Studio&#39;s manifest editor. If you haven&#39;t noticed or installed recent Visual Studio updates, the VS team improved the editor by bringing all of the [...]]]></description>
				<content:encoded><![CDATA[<p>
	Before submitting your app to the Store, take some time to review your app&#39;s manifest and the information and files it references. Mostly concentrate on the Application UI tab in Visual Studio&#39;s manifest editor. If you haven&#39;t noticed or installed recent Visual Studio updates, the VS team improved the editor by bringing all of the app&#39;s UI elements into the Application UI tab. Earlier, bits of UI like the Store logo were on the Packaging tab, which made it easy to miss. Now it&#39;s all together, plus, it shows you every scaled version of every graphical asset (there&#39;s so much to scroll now you can&#39;t get it into one screen shot):
</p>
<p>
	<a href="http://kraigbrockschmidt.com/blog/wp-content/uploads/2013/04/manifesteditor1.png"><img alt="manifesteditor1" class="alignnone size-full wp-image-804" height="726" src="http://kraigbrockschmidt.com/blog/wp-content/uploads/2013/04/manifesteditor1.png" width="731" /></a> <a href="http://kraigbrockschmidt.com/blog/wp-content/uploads/2013/04/manifesteditor2.png"><img alt="manifesteditor2" class="alignnone size-full wp-image-805" height="754" src="http://kraigbrockschmidt.com/blog/wp-content/uploads/2013/04/manifesteditor2.png" width="737" /></a>
</p>
<p>
	Here&#39;s what to pay special attention to:
</p>
<ol>
<li>
		Make sure that all logos (logo, wide logo, small logo, and&nbsp;store logo) are all representative of your app. Avoid shipping an app with any of the default graphics from the VS templates. Note that the Store logo never shows up in the running app, so you won&#39;t notice it at runtime.
	</li>
<li>
		Double-check how you&#39;re using the Show Name option along with Short Name and/or Display Name. Go to the Start screen and switch your app tile between square and wide, and see if the tile appears like you want it to. In the graphics above, notice how the app&#39;s name is included on the tile images already, so having Show Name set to &quot;All logos&quot; will make the tile look silly (see below). So I&#39;d want to make sure I change that setting, in this case, to &quot;No logos.&quot; However, if my square tile, perhaps, did not have the app name in text, then I&#39;d want to set it to &quot;Standard logo only.&quot;<br />
		<a href="http://kraigbrockschmidt.com/blog/wp-content/uploads/2013/04/manifesteditor3.png"><img alt="manifesteditor3" class="alignnone size-full wp-image-806" height="118" src="http://kraigbrockschmidt.com/blog/wp-content/uploads/2013/04/manifesteditor3.png" width="247" /></a>
	</li>
<li>
		If you set Short Name, its text will be used on the tile instead of Display Name.
	</li>
<li>
		Be aware that if you&#39;re using live tiles, the XML update for a tile can specify whether the display/short name should be shown in the <em>branding </em>attribute. See my post on the Windows 8 Developer Blog, <a href="http://blogs.msdn.com/b/windowsappdev/archive/2013/02/21/alive-with-activity-part-1-working-with-tiles-badges-and-toasts.aspx">Alive with Activity Part 1</a>, for details.
	</li>
<li>
		If you don&#39;t have specific scaled assets, reevaluate your choices here. Remember that if you don&#39;t provide a specific version for each given pixel density, Windows will take one of the others and stretch or shrink it as needed, meaning that the app might not looks its best.
	</li>
<li>
		Examine the relationship between the small logo, your specified tile background color, and any live tile updates and toast notifications you might use. Live tiles and toasts can specify whether to show the small logo, and the tile background color is used in both instances. If you have a mismatch between the small logo edge colors and the background color, you&#39;ll see an obvious edge in tiles and toasts.
	</li>
</ol>
<p>
	&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://kraigbrockschmidt.com/blog/?feed=rss2&#038;p=803</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Is it possible to rate and review a side-loaded app?</title>
		<link>http://kraigbrockschmidt.com/blog/?p=800</link>
		<comments>http://kraigbrockschmidt.com/blog/?p=800#comments</comments>
		<pubDate>Thu, 09 May 2013 18:00:09 +0000</pubDate>
		<dc:creator>kraigb</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[app building]]></category>
		<category><![CDATA[Windows Store]]></category>

		<guid isPermaLink="false">http://kraigbrockschmidt.com/blog/?p=800</guid>
		<description><![CDATA[Side-loading apps, which bypasses the Windows Store, is typically used for enterprise apps as well as running private betas and handling other limited-distribution scenarios. In many cases, you probably do want to collect feedback from your users. However, side-loaded apps do not have the Rate and Review command in their settings panels as do those [...]]]></description>
				<content:encoded><![CDATA[<p>
	Side-loading apps, which bypasses the Windows Store, is typically used for enterprise apps as well as running private betas and handling other limited-distribution scenarios. In many cases, you probably do want to collect feedback from your users. However, side-loaded apps do not have the Rate and Review command in their settings panels as do those that are acquired from the Store (see <a href="http://msdn.microsoft.com/en-us/library/windows/apps/hh770544.aspx">Guidelines for app settings</a>). So the easy answer to the question in this post&#39;s title is no, at least not automatically through the Store mechanism.
</p>
<p>
	Is there&nbsp;a backdoor, perhaps? Nope. Side-loading means there isn&rsquo;t a record in the Store database for the app, so there&rsquo;s no app identity to which to attach ratings and reviews.
</p>
<p>
	That said, the goal of ratings and review for a side-loaded app is very different than for those in the Store. In the latter case, ratings and reviews are important for marketing and visibility of the app. For more limited distribution, that&#39;s not the case, and you&#39;re really looking primarily to collect actionable feedback.
</p>
<p>
	With that in mind, there are a few incremental approaches you can take depending on how much data you want. For starters, just a simple mailto: link in a settings command will make it easy to email feedback. This takes only a couple lines of code (see <a href="http://kraigbrockschmidt.com/blog/?p=539" itemprop="name" title="Mixing links and flyouts in Settings (WinJS)"><font color="#5a8914">Mixing links and flyouts in Settings (WinJS)</font></a> for some examples of links).
</p>
<p>
	With a little more work, you can set up a web page with a feedback form, show that in a settings flyout using an iframe or webview, and have that page email the results to you. Another incremental step would be to have the page save feedback in a simple database, so you could query it and save yourself the data-entry step from the email approach.
</p>
<p>
	In fact, for a beta app, having queryable data like this is much more useful than the data the Store could collect, which you can only browse on your product page anyway. A web form, as described above, could also gather more specific feedback that you wouldn&rsquo;t get through a simple Review text field.
</p>
<p>
	With all this in mind, putting in the extra work to collect feedback is well worth it!</p>
]]></content:encoded>
			<wfw:commentRss>http://kraigbrockschmidt.com/blog/?feed=rss2&#038;p=800</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Store Certification Tip #11: Honoring all input modalities</title>
		<link>http://kraigbrockschmidt.com/blog/?p=796</link>
		<comments>http://kraigbrockschmidt.com/blog/?p=796#comments</comments>
		<pubDate>Wed, 08 May 2013 18:00:18 +0000</pubDate>
		<dc:creator>kraigb</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[accessibility]]></category>
		<category><![CDATA[app building]]></category>
		<category><![CDATA[certification]]></category>

		<guid isPermaLink="false">http://kraigbrockschmidt.com/blog/?p=796</guid>
		<description><![CDATA[For this post, let&#39;s focus on section 3.5 of the requirements: 3.5 Your app must fully support touch input, and fully support keyboard and mouse input Your app must provide visual feedback when users touch interactive elements. Your app must not use an interaction gesture in a way that is different from how Windows uses [...]]]></description>
				<content:encoded><![CDATA[<p>
	For this post, let&#39;s focus on section 3.5 of the <a href="http://msdn.microsoft.com/en-us/library/windows/apps/hh694083.aspx">requirements</a>:
</p>
<blockquote>
<h4>
		3.5 Your app must fully support touch input, and fully support keyboard and mouse input<br />
	</h4>
<p>
		Your app must provide visual feedback when users touch interactive elements.
	</p>
<p>
		Your app must not use an interaction gesture in a way that is different from how Windows uses the gesture. The Windows 8 touch language is described in <a href="http://msdn.microsoft.com/en-us/library/windows/apps/hh465415.aspx"><font color="#0066cc">Touch interaction design</font></a>.
	</p>
</blockquote>
<p>
	There are a number of things going on here that are worth thinking about more carefully.
</p>
<p>
	The first sentence basically says that the app has to support multiple input modalities. To &quot;fully support touch input&quot; means that the app must be fully usable with <em>only </em>touch, which should be obvious given&nbsp;the increasing number of&nbsp;touch-only devices. This means that an app cannot have UI or features that are only accessible through a mouse or through a special keystroke. Usually this isn&#39;t much of an issue, because using pointer events lets you handle touch and mouse with the same bit of code anyway.
</p>
<p>
	The second half of the scentence is a little sketchy to my mind. Depending on how you read it, it might say &quot;the app must be fully usable with <em>only </em>keyboard, as well as with <em>only</em> mouse,&quot; or it can be read that &quot;the app must be fully usable with keyboard and mouse together.&quot; From what I&#39;ve seen, certification makes the latter interpretation.
</p>
<p>
	At the same time, I strongly encourage developers to provide complete keyboard-only interfaces as well as mouse-only interfaces. In doing so, you make the app much more accessible for people with disabilities. That&#39;s really the reason why the UI guidelines for desktop apps that have been around for many years suggests things like keyboard accelerators for&nbsp;menus that can also be used with a mouse.
</p>
<p>
	In this context I often think of a classmate of mine within the&nbsp;Electrical/Computer Engineering department at the University of Washington when I was an undergraduate there. Sometime in our senior year, he severed his spinal cord in a skiing accident and became a quadraplegic. But he still completed his degree, often using a computer keyboard with a rod that he held in his mouth.&nbsp;To&nbsp;this day I admire his determination to carry on despite his&nbsp;permanent injury, which means making a little extra effort of&nbsp;support&nbsp;full keyboard interactions&nbsp;and not rely on the mouse for some of it.
</p>
<p>
	Anyway, the last two sentences of section 3.5 above apply only to touch interaction, and are pretty clear. The visual feedback requirement is important because it lets the user know that the app has detected the touch&#8211;a piece of glass, in other words, doesn&#39;t give the tactile response that a keyboard or mouse does, so the acknwoledgement of input has to be visual. For this, the pointer down and pointer up animations in the animations libraries&nbsp;provide standard visual responses.
</p>
<p>
	As for gestures, the point here is to avoid forcing users to retrain themselves for the sake of your app, which ultimately lowers their efficiency across the rest of the system. It&#39;s a reminder that your app is not the only one running on the device, so be a good, cooperative player and avoid &quot;innovating&quot; in places like input where you&#39;ll just cause confusion.
</p>
<p>
	The last thing I&#39;ll add regarding input is not part of Store ceritification, but also good to think about: sensors. As I wrote in my book, I like to think of sensors as another form of input, one that is a fresh area that&#39;s open to all kinds of innovation. And because there&#39;s nothing in Store certification related to how you use inclinometer, the compass, gyros, etc., you can be very creative here!</p>
]]></content:encoded>
			<wfw:commentRss>http://kraigbrockschmidt.com/blog/?feed=rss2&#038;p=796</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Iterating WinRT PropertySets in JavaScript</title>
		<link>http://kraigbrockschmidt.com/blog/?p=794</link>
		<comments>http://kraigbrockschmidt.com/blog/?p=794#comments</comments>
		<pubDate>Tue, 07 May 2013 18:00:41 +0000</pubDate>
		<dc:creator>kraigb</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[snippet]]></category>
		<category><![CDATA[WinRT]]></category>

		<guid isPermaLink="false">http://kraigbrockschmidt.com/blog/?p=794</guid>
		<description><![CDATA[In WinRT, a number of APIs return a Windows.Foundation.Collections.PropertySet object. Two examples are the localSettings and roamingSettings objects within Windows.Storage.ApplicationData.current, whose values propert is a PropertySet. In JavaScript, doing a simple for&#8230;in iteration on a PropertySet will give you not only the properties in that set, but also its methods, which is often unexpected. For [...]]]></description>
				<content:encoded><![CDATA[<p>
	In WinRT, a number of APIs return a <a href="http://msdn.microsoft.com/en-us/library/windows/apps/windows.foundation.collections.propertyset.aspx">Windows.Foundation.Collections.PropertySet</a> object. Two examples are the <a href="http://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.applicationdata.localsettings.aspx">localSettings</a> and <a href="http://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.applicationdata.roamingsettings.aspx">roamingSettings</a> objects within Windows.Storage.ApplicationData.current, whose <a href="http://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.applicationdatacontainer.values.aspx">values</a> propert is a <em>PropertySet</em>.
</p>
<p>
	In JavaScript, doing a simple for&#8230;in iteration on a <em>PropertySet </em>will give you not only the properties in that set, but also its methods, which is often unexpected. For example, the following code:
</p>
<p>
	<font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">var</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> ls = Windows.Storage.ApplicationData.current.localSettings; </font></font><br />
	<font face="Consolas" size="2"><font face="Consolas" size="2">ls.values[</font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">&quot;property1&quot;</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">] = </font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">&quot;value1&quot;</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">;</font></font><br />
	<font face="Consolas" size="2"><font face="Consolas" size="2">ls.values[</font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">&quot;property2&quot;</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">] = </font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">&quot;value2&quot;</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">;</font></font><br />
	<font face="Consolas" size="2"><font face="Consolas" size="2">ls.values[</font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">&quot;property3&quot;</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">] = </font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">&quot;value3&quot;</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2">;</font></font></p>
<p>	<font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">for</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> (</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">var</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> key </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">in</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> ls.values) { </font></font><br />
	<font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp; console.log(</font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">&quot;values[&quot;</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> + key + </font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">&quot;] = &quot;</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> + ls.values[key]);</font></font><br />
	<font face="Consolas" size="2"><font face="Consolas" size="2">}</font></font>
</p>
<p>
	will not only output &quot;values[property1] = value1&quot; for each of the three values, but will also give you stuff like:
</p>
<p>
	values[addEventListener] =<br />
	function addEventListener() {<br />
	&nbsp;&nbsp;&nbsp; [native code]<br />
	}
</p>
<p>
	This comes as a result of how the PropertySet is projected from WinRT into JavaScript. It sort of works like an array, but not really, so you get this kind of behavior.
</p>
<p>
	Seeing this, one option is to use the iteration methods of the PropertySet, meaning to call its <a href="http://msdn.microsoft.com/en-us/library/windows/apps/windows.foundation.collections.propertyset.first.aspx">first</a> method to obtain an iterator, then using the iterator&#39;s cumbersome current/moveNext semantics. This isn&#39;t particularly enjoyable code to write in my mind.
</p>
<p>
	Fortunately, there&#39;s an easier way, which Luke Hoban&nbsp;provided based on an&nbsp;old blog post by Douglas Crockford, <a href="http://yuiblog.com/blog/2006/09/26/for-in-intrigue/">http://yuiblog.com/blog/2006/09/26/for-in-intrigue/,</a> in which he points out that for&#8230;in includes all the keys in an object&#39;s prototype&nbsp;and not just those in the object itself. To prevent this, you have to use the hasOwnProperty method to check where the property is coming from. So this modification of the code above will produce the expected output:
</p>
<p>
	<font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">for</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> (</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">var</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> key </font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">in</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> ls.values) {</font></font><br />
	<font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">&nbsp;&nbsp;&nbsp; if</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> (ls.values.hasOwnProperty(key)) {</font></font><br />
	<font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; console.log(</font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">&quot;values[&quot;</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> + key + </font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">&quot;] = &quot;</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> + ls.values[key]);</font></font><br />
	<font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp; }</font></font><br />
	<font face="Consolas" size="2"><font face="Consolas" size="2">}</font></font>
</p>
<p>
	Better still, in Windows Store apps we can rely on the more intelligent behavior of EcmaScript 5&#39;s <em>forEach </em>iterator, and just do the following:
</p>
<p>
	<font face="Consolas" size="2"><font face="Consolas" size="2">Object.keys(ls.values).forEach(</font></font><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2"><font color="#0000ff" face="Consolas" size="2">function</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> (key) {</font></font><br />
	<font face="Consolas" size="2"><font face="Consolas" size="2">&nbsp;&nbsp;&nbsp; console.log(</font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">&quot;values[&quot;</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> + key + </font></font><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2"><font color="#a31515" face="Consolas" size="2">&quot;] = &quot;</font></font></font><font face="Consolas" size="2"><font face="Consolas" size="2"> + ls.values[key]);</font></font><br />
	<font face="Consolas" size="2"><font face="Consolas" size="2">});</font></font>
</p>
<p>
	This produces the same results with a simpler construct.</p>
]]></content:encoded>
			<wfw:commentRss>http://kraigbrockschmidt.com/blog/?feed=rss2&#038;p=794</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>When does an app get resized?</title>
		<link>http://kraigbrockschmidt.com/blog/?p=791</link>
		<comments>http://kraigbrockschmidt.com/blog/?p=791#comments</comments>
		<pubDate>Mon, 06 May 2013 18:00:26 +0000</pubDate>
		<dc:creator>kraigb</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[app building]]></category>
		<category><![CDATA[layout]]></category>

		<guid isPermaLink="false">http://kraigbrockschmidt.com/blog/?p=791</guid>
		<description><![CDATA[Apps need to be prepared for a variety of display sizes. For one, a user can switch view states at any time, putting the app into snapped view, filled view, and fullscreen landscape. The user can also rotate a device to switch to portrait automatically (on devices with appropriate sensors). These are the basics for [...]]]></description>
				<content:encoded><![CDATA[<p>
	Apps need to be prepared for a variety of display sizes. For one, a user can switch view states at any time, putting the app into snapped view, filled view, and fullscreen landscape. The user can also rotate a device to switch to portrait automatically (on devices with appropriate sensors). These are the basics for a tablet device like a Surface.
</p>
<p>
	But also remember that as WIndows 8 runs on many different kinds of devices, there are many other ways that display properties can be changed.
</p>
<p>
	For example, think of everything that can happen through the Display settings in Control Panel. The user can rotate a display directly (as when using a desktop monitor that swivels), which will change a view state to fullscreen portrait as well. The user can change display resolution, which clearly changes the size of fullscreen and filled views, as well as the vertical dimension of a snapped view.
</p>
<p>
	On multi-monitor systems, the user can also change which monitor is assigned to run Windows Store apps, which potentially has the same effect as changing display resolution if those monitors are different.
</p>
<p>
	A user could also plug an external display into a device: monitors, projectors, and so forth. Depending on how the user configures that display&#8211;duplicating the main device, extending the display, or switching exclusively to the external display&#8211;the screen resolution can change as well as the pixel density. For example, a Surface Pro has a 1920&#215;1080 screen that puts the 140% scaling into effect because it&#39;s only a 10.6&quot; screen. But plug it into a monitor with the same resolution and the scaling can revert to 100%. (This means that the app will see an effective resolution change from approxmately 1366&#215;768 to 1920&#215;1080.)
</p>
<p>
	The bottom line is that apps really need to watch for the relevant resize event (such as window.resize in JavaScript) and update their layout both for window/screen dimensions and pixel density&#8211;and don&#39;t overlook the non-obvious cases when running some tests. It&#39;s good to try all the things described here.
</p>
<p>
	Beyond this, two other software features could be cause for resizing the app: app bars and the soft keyboard. By default, these appear as overlays on the app&#39;s canvas, and with the keyboard Windows will also pan the app up automatically to make room. If you want more sophsiticated behavior, though, you can handle the events when these become visible and update your layout more precisely.</p>
]]></content:encoded>
			<wfw:commentRss>http://kraigbrockschmidt.com/blog/?feed=rss2&#038;p=791</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
