Unlimited Possibilities through Code
There a very cool new feature in Windows Phone 8 that allows an app to be the lock screen provider for images (and other things, but I only cared about the image for this app).
I am an avid Disney parks fan, and photography has been a hobby of mine for most of my adult life. I wanted to make a wallpaper app for Windows Phone 7, but you just couldn’t do it with a good user experience. You could save the images to the users photos and then they could go set them as the wallpaper. Not what I wanted.
The app was approved for the store on December 20, go download Disney Backgrounds now.
All that changed with Windows Phone 8! Now from the lock screen settings page you can set an application for the background. That app can then set the wallpaper, and run periodically in the background to update it. This is exactly what I have done for this app. The background agent runs about every 30 minutes (there are not guarantee of exact runtime from the phone). I took a very simple approach in just randomly picking a photo from one of the collections.
I have included two photo collections as a start. One is from Walt Disney World (in Florida), the other is from Disneyland (in California). I have been fortunate enough to get to visit both of the parks in the past year and took some great pictures.
OK, another week has flown by and I wanted to update the app numbers. Mostly because I am dying to know myself how things went, and partly because I have an update for all of my football apps in the marketplace pipeline.
I personally really hate that time between when you have added a new feature and can’t wait for users to get their hands on it, and when it actually happens. For me it seems to be about 8-10 days. There is the 5-7 day app review, and then once you are certified it still takes another 2-3 days before people get the update.
But this is really a small delay, it is just the desire to see users with the latest and greatest that makes the waiting period so hard.
Take a quick look at the photo here for a really simple Disney Facts App. Now, how hard do you think it was to build that app? Now how hard do you think it was for a 12 year old to build that app? Context changes things a bit.
Nokia has an ongoing program where developers who build their first app (has to be your first) can get a free token to submit to the marketplace, and a free Nokia phone. How cool is that?
I talked to Maya about it and told her she could get a free Windows Phone just for building an app. She and I have gone back and forth about a Disney Facts app for literally a year or more. I was hoping this would be the push she needed to get it done.
We sat down with some paper and she designed what she wanted the app to look like. And then came the hard part… She had to write down all those corny facts we used to talk about when we went to Disney on an almost weekly basis. It took her a while to get them all written down (longer than building the app). Once she got to 50 facts we were ready to go.
Very simple. Category at the top, and the fact at the bottom. I had to help her with the data binding (getting the facts she had to show up on the screen), and with the random number generator. We used Telerik RadControls to build the pages. It makes it really easy for a novice to add an About page (prebuilt with a photo and everything).
Here is a photo of Maya with her Windows Phone – in PINK! It is a Lumia 800, and she is very happy with it. I hope she will continue to get good feedback from users and want to build more apps.
Here is the direct marketplace link to the Disney World Facts app for Windows Phone 7. We even setup a website for the app at DisneyFactsApp.com.
Maya even got mentioned on the Windows Developer Podcast Episode 78!
Contact our good friends over at the Windows Developer Show, they have a form you can fill out to get started.
I have been having a rough time lately with the Microsoft Advertising PubCenter AdControl for Windows Phone. It is really easy to get setup and running (always a good thing), and I have several apps that use it in the marketplace today. But I keep getting crash reports for my apps that are in this control, crashes that I can’t catch or handle.
I have tried to update to the most recent version, but still it is the ONLY reason I have for 21 app crashes in Pick a Park. This issue has led me to build in all sorts of metrics to track the ad control, and I have found that in addition to it being the only reason my app crashes, it also fails to display an ad about 50% of the time. That means I am only getting about half the money I could have made from my apps. Yikes.
Carlo Rivera had done a XAPFest talk about making money with free apps, and in it he talked about a unified ad control he was working on. He never released that to the public, so I went to Codeplex to see what others have done. I found a really nice project aptly named Unified Ad Control for Windows Phone.
On this surface this is a classic pattern in all applications. Build a control to wrap up multiple implementations from different companies of what is very similar technology (ad controls). You want to be able to have a single control in your code, even though it actually pulls from more than one ad provider.
My first thought was to use a control with one ad network as the default provider, and then list others to rotate through them if the primary ad control fails. It turns out the Unified Ad Control actually goes way beyond this simple strategy.
Mark has a great intro blog post on his site. And the Codeplex project home page has a list of the current ad providers and settings to get someone up and running quickly.
In my case I began with the Microsoft PubCenter, AdMob, and Adduplex for my tests. This is what my configuration looks like.
<?xml version="1.0" encoding="utf-8" ?>
<AdCountryDescriptor Country="US, GB" InitialAdProvider="PubCenter">
<Probability Value="60" AdProvider="PubCenter" />
<Probability Value="10" AdProvider="AdDuplex" />
<Probability Value="30" AdProvider="AdMob" />
<Probability Value="10" AdProvider="PubCenter" />
<Probability Value="30" AdProvider="AdDuplex" />
<Probability Value="60" AdProvider="AdMob" />
Basically 60% go to PubCenter, 10% to AdDuplex, and 30% to AdMob if you are in the US or GB locales. This is the locale of the phone, not the geolocation. This is something I have posted to Mark on the discussion boards and I hope he will consider for a future update.
But what if I suddenly discover that I really want to use PubCenter as much as possible in a location? Do I have to ship an update of my app? That would be tedious and very slow way to react. Fortunately there is an ad strategy you can configure for picking up an XML file from a remote URL.
Having the ability to specify a remote configuration for the ad provider fill means you can turn on and off ad providers without needing to ship an updated version of your software.
The control looks for the AdSettings.xml in the local app first, but also will grab the xml from the website as well. Right now it grabs this file a lot, but there is a changelist already checked in that addresses this for the next release.
I currently put my ad config files on the CDN for my Azure account. That makes it easy to all phones to get quick access to it, and there is no maintenance on my side to track if it is available, etc.
There is another really nice option to provide your own ads. Maybe you want to advertise your own apps within your app. This is possible with the control, although I have not tried it yet.
Your mileage may vary of course… But for me the above settings seem to be working pretty well. Most of my users are in the US and Canada, but for some reason they only get ads about 50% of the time from Microsoft Pubcenter. Adding the others in gives me better ad coverage.
I built an app just for myself recently and decided to share it. Those are always the best apps to build, ones that have some personal meaning or use for yourself. And this one is no exception.
You can download this app from the Windows Phone Marketplace – Mariners News.
I attended a class where we had just two hours to make a start to finish app. I actually didn’t intend to build this app, and had no idea we were going to do this at the event. I am actually quite glad we did, as it showed me I could do a lot more in a phone app in just a few hours than I would have thought possible.
The previous topic of the class had been using the Bing API to make requests for data and news stories. Just that morning I had been looking for a way to get news about the Seattle Mariners. There was one app in the marketplace, but the UI was terrible and slow. Viola, an idea is born.
Ok, I did make the app in under two hours, but I spent an additional hour and fifteen minutes at home that night making the icons, testing for the marketplace certification, putting in the Ad control, and preparing the submission.
Oops, I grabbed the official MLB logo when I built the icons. I wasn’t really thinking about it the night I submitted, I just went to MLB.com and grabbed the official logo. Almost the next day the Windows Phone
Developer Blog came out with an article about avoiding trademark trouble
I should have known better. Really, I have done this type of thing before.
So I sat down that evening using Expression Design and built a new logo. It is close enough for people to recognize it as the logo, but it is my version of it. No trademark or copyright issues!
Quick, simple and clean. I like it.
And then I began the long wait for certification (which you can’t cancel or abort). So I thought what else would I want to change? I am going to need to submit an update anyway, better make it worth it.
At this point I thought more about the navigation experience.
I didn’t like the display of the news articles and with about two evenings of playing I came up with the following design that I am much happier about.
Notice the stories are cut at two lines, if you click you get the complete RSS or news story as it was returned from Bing. Then if you want you can launch out to IE from that more detailed page.
I got rid of the images for the source (too much space), and just added an tagline, then about how long ago it was posted. Seeing the date and time doesn’t really do much for you, but seeing about four hours ago seems to give it a fresher feeling.
This is where I started thinking about what else I would do with a Windows Phone. I want to check for tickets, directions to SafeCo, tweet about the game, etc.
Most of these are pretty simple stuff, but add a lot of usage to the app.
The call for tickets actually goes call the correct Ticketmaster line for you. I don’t know of any other sports app that does that, and it is a uniquely mobile experience. You wouldn’t want that on your desktop, but on my phone it makes perfect sense.
Directions to SafeCo Field. Another unique experience for mobile phones. I may be lost downtown while going to a game (it happens). Quick couple of taps and I am getting directions.
Get on demand updates of news and scores through SMS is a feature that ESPN offers. But I can never remember the number, so I built it in. Now with a quick tap I get the latest box scores or news.
Share the #mariners spirit is something I want to add more to over time. The ability to profess the love for your team, taunt the opponent, or just complain about the call are all social elements to the game today. I would like to build in more Twitter integration to let users interact about the game while watching a game.
I actually finished this version of the app just a few hours after the version 1 was approved for the store. But even after approval it still takes 24-48 hours before an app goes live on the site.
I was very happy to be able to submit a quality update almost immediately. Now I just have to wait for it to be approved!
This was a really fun project, and one that I am sure I will continue to update as I find more things I want in it myself.
I am already thinking about a way to use a live tile to show me the next team opponent and the time of the that game. Too bad you can’t add calendar items on WP7, maybe a push notification that the game is getting ready to start? Hmm. I can listen using MLB At Bat to every game, so that might work. Ahh the possibilities.
Enjoy your projects, and hopefully from baseball this year too!
I recently gave a talk about data management on Windows Phone 7 for XapFest and I put in a slide about virtualizing your data for data bound objects. I didn’t really think it was that big of a topic when I was putting together the talk, but it generated a lot of interest from attendees.
I am going to demonstrate the minimal virtualized data collection object you can easily create for data binding with a Listbox.
For this example I am using a simple class named FeedItemDataModel. This represents a class that holds a single item from an RSS Feed. In this simple implementation the values are simple and set in the constructor.
The sample application shows a UI with a collection of this object databound to the UI and lets you jump to a specific index in the list. The red text you see is a memory watcher class that shows memory usage within your app.
This is another of those posts for my future self, because I know I won’t remember this little tip.
The WMAppManifest.xml has a property that tells it where to send the default launch of the application.
<DefaultTask Name="_default" NavigationPage="MainPage.xaml" />
So the normal launch page is MainPage.xaml. But you can change it to another page, and include your parameters just like from a secondary tile!
<DefaultTask Name="_default" NavigationPage="/TileDetails.xaml?myid=2" />
Now you can just press F5 and debug just as if that secondary tile had been clicked.
If you have not looked at the toolkit before you seriously owe it to yourself, go get it now!
Coding 4 Fun Phone Toolkit
Windows Phone Geek has also done a great intro post on one of the new controls (the MetroFlow control). Getting started with MetroFlow Control is a great read, even just to get up to speed with the overall concepts of the toolkit.
©2010-2012 Jason Short. All Rights Reserved. The opinions expressed herein are my own and do not represent my employer’s views in any way.