Working With Social Network APIs

Creating Vicinity Buzz naturally involved working with a the APIs of social networks. That information seemed worth sharing for those of you interested in writing any type of application that would integrate with a social network.

Developer Documentation

Any of the social networking sites you probably want to integrate with have developer api’s that are well documented. Here’s the starting points for a variety of services:

Working With JSON

All of these APIs are best used with JSON. If you’re not familiar, you can read up at json.org. It’s the notation for serialization of javascript objects, and object literals.

Where To Make the Call From

If you are working in a standard web page, you could call the api from document.ready (assuming you are using jquery). This is the approach I take on hoolihan.net, my personal homepage. There is a twitter feed on the right side.

If you have a bit more of an application, you may want to look at one of the many javascript frameworks that help you route events to actions. These are frameworks like backbone, knockout, spine, etc. There are also commercial variants like kendo, dojo, and sencha.

jQueryMobile is commonly paired with PhoneGap, and in that scenario, using something like backbone is a bit tricky. You may want to bring in a template binding library, but avoid routing.

Binding

jQuery.templates was one of the first good javascript template binders that I’m aware of, but there are now many different options. In the jQuery world, most of the momentum seems aimed at jsrender. Recently I’ve considered bring in knockout and only using the binding part, but I’m not far enough in to evaluate that direction.

API Keys

Unless you’re using the most basic parts of the API, you’ll probably need to register your app and get an API key. It’s a token that identifies your application. In the event of API abuse (too many calls, etc), they have information to contact you and analytics around the issue.

Open Authentication

This is a big topic, but if your application wants to use a social network to identify your users, this is possible via open authentication. If you are interested in this, get started here.

What Do You Think?

Are there any particular areas of the APIs that you’d like to see more detail about? Any conceptual parts that would warrant their own post? Let me know what you think below.

VicinityBuzz: Writing A Mobile App

This post is intended to go through the process of writing and publishing an app. It will be a high-level introduction. The idea is that future posts that will dig into specific topics in depth. This post will be updated to link to those future posts as an index of mobile development topics. The app I’m describing is VicinityBuzz and it’s available here.

Product Vision

While I had been thinking about writing a mobile application for a while, I needed an idea to stick with to completion. The app stores are relatively young, but they are fairly saturated, and bringing something new to the table was a challenge. Recently I read Eric Ries’ The Lean Startup and I do like the idea of MVP(Minimum Viable Product), so I didn’t feel the need to have a telephone book of requirements. I was just looking to have an original idea for the app stores.

In the case of VicinityBuzz, I have always felt that there are not enough good ways to search social media, particularly by location. There are social media sites like FourSquare solely dedicated to location, but I’m referring to something else. Using networks where content is the reason (not location) but by location. For instance, at a conference, users often hashtag their tweets with the name of the conference. But not always. And the hashtag will draw attention from people not at the conference. That’s fine, and there can be useful conversation by just using the hashtag, but what if I want to see posts of all users that are actually at the location.

app screenshot

This is particularly true of news events. On the day of the shootings at Chardon High School, I used the application to see what students and families in the area were posting about. They were each telling their own version of the story. It was heartbreaking and much more informative and up to date than the news being released to the public. Hashtags were useless in this case, for two reasons. First, the students weren’t hashtagging their posts, they didn’t need to. They were posting to their real-life friends and thus already connected on twitter. Second, the tag was full of a lot of the reaction from the public around the globe. That was interesting too, but it wasn’t was I looking for. I wanted facts and eye-witness accounts. It was like CNN’s iReport, but on steroids.

Platform Selection

Native or not? As a web developer, I chose PhoneGap. It’s a mobile platform framework that uses html and JavaScript, which are skills I already have. And the application didn’t have very many device needs that would require native access. GPS is the only device call I make, and that is easily accessible from the PhoneGap JavaScript API. I knew it would be faster than for me to learn the ins and outs of the Cocoa framework and Objective-C, although I am in the process of doing that now for future apps. I have written some small applications in the native iOS sdk, and even paired with some developers to help bootstrap their iOS work, but I just didn’t feel comfortable writing an app consumable by the general public yet. Along with PhoneGap, I’m using jQuery mobile.

Essentially PhoneGap provides project templates for your platform (Android, iOS, WP7, and more) that create a shell of an application that hosts a browser control. All of your files go in a directory (like resources) and get loaded up by the browser control.

app screenshot featuring controls

Using PhoneGap gives me a version that is easily ported to Android and WinPhone 7. Although those markets lag Apple’s AppStore in terms of developer revenue, I want to cast the widest net possible with this application for obvious financial reasons, and also to learn. The more feedback I can get on the application, the better I can make it.

At some point I may go ahead and do a native rewrite. But for now, I’m very happy with what is possible in PhoneGap and jQuery mobile.

Prototyping

I started development with jQuery UI in a browser. Using the built in JavaScript debugger in Chrome was easy. Note you could just as easily use Firebug in Firefox, or the IE Developer tools. Once I was satisfied with functionality, I swapped jQuery mobile in place of jQuery UI and moved the app into the PhoneGap container. More on that in the next section.

One note: If I had to do this over again, I would have simply started with jQuery mobile. It’s not that hard to get started with as the docs are great, and it’s best to just start down that path.

App Store Submission

Thus far, I can only speak to the Apple Store submission process. After going through the steps provisioning portal, it was fairly easy to test the app on a device. In order to submit to Apple, you then create a profile for the application (screenshots, contracts, payment details, etc) and submit a signed binary to Apple for review. The process of signing a binary for release can be a little tricky, but the walk-through on Apple’s developer portal helps a lot.

One thing to note: Apple requires you have a support page. I stole an idea from the Trello folks, and used a public trello board for this purpose. It took less than 5 minutes to setup.

Marketing

I created a basic web page with a description of the application. Apple has a page for making the link to their store. If you are interested in opening the store automatically, either see the options in this stackoverflow post, or add the query paramter “ls=1” to the url you get from the link maker.

What’s Next?

Apple just announced “the new iPad” so I have to do some updating to support that. I haven’t read the new docs, but I assume this means a high-res iPad splash screen and icon. All of my other assets are web assets and scale accordingly.

My next steps are to add a simpler user workflow, a refresh button to update your current search, and add some social networks like Facebook and Instagram.

After that, I’m going to start porting to Android and WinPhone 7. Since the application is already written, it should be as simple as getting a PhoneGap project running for each environment. I have also considered the Mac App Store and the upcoming Win 8 Marketplace for desktop application versions.

Finally, I’ll blog more in depth about some of the topics covered, and provide links to those posts on this page. Mobile development is rewarding, but can be challenging for those coming from a web or desktop background. I’d like to pass on some of the things I learned so that others working in mobile can save some time.

Feel free to provide feedback and questions if you have something in particular you’d like me to cover. And checkout the application!

Getting Started With iOS Development

I’ve been playing with development in several of the mobile platforms over the last year, and for iOS in particular. Many developers are intimidated because of the differences between objective-c and other languages and the differences between cocoa touch and other frameworks. How to get started is one of the most common questions around.

First you’ll need an apple computer. There are some ways around this, but they are on the gray-side of the law and certainly outside of the OS X terms of use.

Next, you’ll need Xcode. Download it for free at https://developer.apple.com/xcode/. Xcode is the development environment for both OS X and iOS based applications. You can develop for free, and even test iOS apps in a simulator. If you join the iOS developer program, for $99 / year you can deploy to devices (up to 100) for testing purposes. You can sign up for the program at the iOS portal, which also hosts all kinds of tutorials and guides available to members and non-members.

Apple just recently posted this a getting started guide that will walk you through the basics. They have many other great docs available on the iOS developer site, including this objective-c primer and a longer version here.

I recommend The Big Nerd Ranch Guide for iOS. Among the iOS developers I know, it’s considered the best book to start with.

And for troubleshooting, no post about iOS would be complete without mentioning stackoverflow. It is the best site for any programming question, not just iOS / objective-c questions.

If you take the time to use the resources available, and work with (not against) the platform and supporting guidance, I think you’ll find iOS to be a friendlier platform than it’s reputation would suggest.

My 45 Days With Win Phone 7, and the Move Back to iPhone

A while back, I bought a Windows Phone 7, specifically an HTC 7 Surround. I bought it used via ebay (for under $150), so as to not have it count as my contract subsidized phone. It was not an unlocked phone, and I was able to switch my SIM card from my main phone (an iPhone 4) to the WP7 without problems.

I bought the phone in order to have a chance to do some Windows Phone 7 development. As a developer with Silverlight experience, it’s a pretty easy transition to make. Sure, the dev toolset has a simulator, but I wanted to try out some apps and have my hands on the real thing. Plus, it serves as a nice backup phone, and it makes a nice portable gaming distraction (with achievements). Even without swapping the SIM card, you can use email, online apps, as long as wifi is available.

Soon after the purchase, my wife’s iPhone 3gs broke. At this point, we knew a new Apple phone was coming soon, so I gave my new iPhone 4 to my wife, and used the WP7, waiting for the new phone. She knows I do a lot more “technical stuff” with a phone, and was fine with taking the 4 and letting me getting the new revision when it released (I used her upgrade for the 4s). Yes, for a tech guy, that’s a great way for a wife to show love. All I had to do was holdout for about 45 days with a WP7.

I kind of looked forward to it, thinking it would be a chance to get a feel for just how good the platform was. For the record, this was the version of the OS just before Mango. Mango released the week I got my iPhone 4s.

So what did I think?

What’s Good?

It was a very usable phone. Contact management is nice on Windows Phone. All LinkedIn, Facebook, and regular contacts are merged (including Twitter in Mango). From that persons page, you can contact them via any of those methods. And rather than a favorites person list, you can pin them to your homepage, allowing very quick access to your favorite contacts.

The basics are covered in terms of apps. Social sites, games, utilities. And they are cheap and often free. The store is closer to Apple’s than the wild west that is Android, so that’s good.

The phone itself had pretty good battery life, nice sound, and I liked the kickstand. That line has been discontinued, and I’m not sure why. Maybe HTC wanted some new Mango specific features and needed a redesign. Regardless, it was a fine phone.

You only have one page to customize, but it’s completely customizable. And the second page is essentially a list of every app on your phone. It was a different way to organize than iOS, but I found it very usable.

Those front page tiles (as of Mango) can show you various news and status updates. For example, the weather app shows the current temperature on it’s icon, and contacts show their latest social status. iOS could use this feature, though I suspect it’s icons are too small to provide useful data.

Zune pass is nice. Spotify is taking a bite out of this market, but I did a month trial of the Zune pass, and I could listen to anything I wanted that was on the store. A few gaps, but in general the marketplace has a lot of songs. Zune recently added some new pricing structures to compete with Spotify.

Cost… If you’re due for an upgrade, you can get a nice WP7 phone for free. And I think the free options for WP7 are higher end phones that the free versions of Android phones. And the only free iPhone is the 3gs, which is fairly dates at this point.

What’s Bad?

The depth of the marketplace just isn’t there compared to the App Store. This is understandable because of how new the marketplace is, but with such a low marketshare, I’m not sure it will ever catch up. Developers are monetizing on the App Store, and Microsoft and Google can’t make that case as well.

Mango changed this, but when I used the phone, it was one app at a time. That’s hard to go back to. Especially when Apps seem to take a while to initialize.

Phone manufacturers can brand some parts of the phone, and even have their own sub-pieces of the marketplace. There was an HTC Apps shortcut on my phone, that took me to specific versions of apps like Youtube, etc. I assume this is so they can optimize the experience for their phone, but it fractures the app stats, and makes integration with other apps harder. It’s a step in the Android direction, and I don’t think that’s a smart direction. (Why does it matter if app stats are off like popularity? When I’m looking for popular apps on a new phone, I would expect things like youtube to be at the top. But if youtube has 6 private label versions, it gets pushed down the list.)

Finally, there’s just a certain je ne sais quoi to the iPhone, that WP7 doesn’t have. Yes, that’s completely subjective, and a lot of it is based on personal experience. But this is a blog, and I’m telling you about my personal experience with the phone.

The Fine Print…

I bought a used phone, with some mild wear and tear. I have had 3 iPhones, all brand new purchases. That adds to the experience.

I’m invested in the iTunes store in terms of music and apps. I never really commited to WP7 and the Zune marketplace that way.

I should have spent more time seeing if there was cool integration options with my XBox. That kind of stuff sells me on a product.

Summary

WP7 is a nice platform. If I were banned from Apple products tomorrow, I would have to think long and hard about WP7 vs Android. I think WP7 is better (than Android), my only hesitation is that phones are about apps and integration, and both of those things suffer when marketshare is low.

Maybe the best way to describe the difference is by saying what I like best about iPhone. Despite being closed and proprietary, it doesn’t feel commercialized, because Apple is the only hardware maker, there isn’t hardware advertising and private labelling. Those things detract from the experience, and Apple is all about design and experience. Combine that with content, and you have a winner.

Apple brings huge headstart in content, and that’s hard to overcome. Just look at Windows vs OS X. There are virtual machines and compatablity layers, but at the end of the day, users had years of content and applications that ran on Windows, that they weren’t ready to give up on. As cloud based services and web-based applications take over, we’ve seen that the Windows market erode a bit. And eventually, that may be the case for phones and tablets too, but we’re not there yet. Apps still matter.

That’s why I think Microsoft’s Windows 8 strategy is smart. The more they can move developers to HTML 5 and Javascript, the easier it is to develop cross platform for mobile and tablet platforms. The WP7 and Windows 8 marketplaces can merge, and leech off HTML 5 developers that are targeting the higher marketshare platforms. If there is minimal overhead to developing cross platform, then WP7 will get a number of apps that is disproportionate to it’s marketshare.

I’m happy to have the WP7 around for development purposes. And would recommend it to users who don’t like the iPhone and aren’t invested in App Store already. Particularly if they are gamers with live accounts. But it isn’t a primary platform for me.