Sunday, 19 January 2014

Bits I learned from Real Users

Over the last week or so I have had a great experience with one of my customers.  They downloaded an app called "Track My Trip" which has been somewhat successful in the store.  It has downloads in over 110 countries and almost 10K in downloads.  However I had one customer that emailed me directly (you have links in your apps to email you right?) with his complaints.  That's great.  I worked with this person going back and forth with three separate beta publishes (see my blog on beta testing) and much learning on my part.  What follows are just three of the things I learned that might be useful to you.

Internationalization and GPS

This was one of those obvious things once I figured it out.  We always are aware of internationalization with regards to user facing information.  Making sure all thing foreign are correct.  But I got nabbed by something internal.  The Windows Phone GPS sensor returns position coordinates for latitude and longitude in decimal format (49.1343121, 22.234221).  Which I stored in a tracking file.  However when I went to play back the track internally I used LinqToXML to load it into a list assigning that same lat and long to a "double" type variable.  Well, if you are in, say, France, a decimal place is represented as a "," comma.  The Windows Phone GPS sensor still returns data as a decimal but when trying to load that back into a double variable it died an awful death with a data type exception.  To overcome the problem there was two things I could do.  Figure out how to make The Windows Phone GPS sensor produces coordinates compatible with the native format or just change the conversion to double (from the XML string).  I chose the latter:  (the useful bit is the "CultureInfo.InvariantCulture")

double latitude = Convert.ToDouble(myStringLatitude, CultureInfo.InvariantCulture);

SkyDrive Permissions and User Name

My app uses SkyDrive integration to upload recorded tracks.  Always worked great for me and didn't get complaints from users.  Until I got an email from one user who could not upload tracks to SkyDrive.  I spent some back and forth time trying to figure out what was going on before he mentioned that his company had black listed SkyDrive for security purposes.  Now here is a lesson in not taking things at face value.  I bounced a few ideas off a couple of Nokia Developer Ambassadors (what a great resource) and then went back to the user to dig deeper.  I got the user to send me a screenshot of his SkyDrive (Live Login) screen.  Well, first it was in a foreign language so I had to translate it (used bing translate).  Then I noticed, eventually, that one bit of information was missing.  It wasn't asking permission to share your name.  Not a big deal, and I could live with out it.  So I dug into the code and found that because I couldn't get the name it didn't complete the connection bits.  Turns out that when you sign up for a Live Id you don't need to provide much other than an email address, then there is no name to share.

The takeaway?  Always check carefully what you are asking the Live SDK to provide.  You may be asking for more than you need and you should NEVER do that.

What's Cool to you May Not Be!

I cannot repeat this enough.  I said it in my last blog and I'll say it again now.  As a developer, never assume what you think is cool actually is cool or even useful.  In that same app I included a nifty feature for logging into Live, but quickly found it was much more annoying than nifty.  You see, I don't always use my apps like thousands of other users do.  So I can't possibly know.  Listen to your users, use beta tests, get feedback, keep it simple... people love stupid simple!