Breaking the Ecosystem Shackles: The Power of Defaults and Intents in Android
77Introduction
This post has been bouncing around my head in various forms for awhile, but it finally came to the forefront in the last week. There's been a lot of talk, rightfully so, about the steps back the iOS6 Maps app has taken. People are waiting patiently for Google to release a stand-alone Google Maps app for iOS, while one person as even gone so far as to take matters into his own hands. But here's the sad truth: Even if Google releases a Google Maps app, and Apple approves it, and it's as awesome as its Android equivalent...it will still be deficient in one major way:
Google Maps will never again be the default mapping provider for iOS.
This means a couple of major things for iOS users:
- If you tap on an address in an app, be it Safari or Contacts or Calendar, it will always open in Apple's Maps, not in Google Maps
- If you ask Siri to navigate you to a location, it will always open in Apple's Maps, not in Google Maps
Unfortunately, this is a pretty notable limitation of iOS, which highlights a bigger flaw:
Only Apple's official apps are a part of the larger Apple ecosystem.
The Blessing and Curse of Ecosystem Lock-in
These recent events have sparked a larger conversation about mobile OS choice and ecosystem lock-in. The prevailing theory is that you are largely tied to the ecosystem behind the mobile handset you choose - iPhone users use Apple's ecosystem, Android users use Google's ecosystem, and Windows Phone users use Microsoft's ecosystem.
Now, I am not a hater of Apple's products or ecosystem - quite the opposite, actually. I have an iPad and a MacBook, and an Apple TV. Until recently, I even used an iPhone. If you’re all-in with Apple services, as I was, by all means, get an iPhone. It will work great with the ecosystem you trust. Apple's fans are often accused of being "cult-like", but the truth is simply that the more Apple products you have, the better each of them work. Your iPhone makes your Apple TV a little bit better, and your Apple TV makes your iPhone a little bit better. Your MacBook makes your iPad a little bit better, and vice-versa. This is a powerful truth that should not be underestimated.
Breaking the Chains
Personally, when I used an iPhone, I actually found myself using Google's services more than Apple services, partially because Apple's services were still in their infancy (or didn't even exist, at one point), but mostly because Google services were everywhere (PC, iPhone, iPad, MacBook, etc.) whereas Apple services were a bit more limited in scope.
Obviously this put me in the ideal position to make the jump from iOS to Android, but there were still some features iOS provided that Google didn't cover. I needed third-party solutions to those problems, but years of using iOS had taught me that third-party solutions were always inferior to those that come from the OS maker.
Here's where I disagree with the prevailing school of thought, though - I don't believe it's that iOS works better with Apple services and Google works better with Google services; it’s that iOS works better with Apple services and Google works better with pretty much everything else. This is primarily because Google provides two incredibly powerful tools that, when leveraged, allow you to take many third-party solutions and elevate them to the same position as first-party solutions.
These tools are Defaults and Intents.
Defaults
Defaults is, well, exactly what it sounds like - it allows you to set a default application to launch for a specific activity. Before becoming an Android user, I assumed this was limited to setting a default browser and a default mail client - something I'd long wanted in iOS, but had never gotten. For instance, I'd love to set my default browser in iOS to Chrome, but it's just not meant to be.
While this is true - you can change your default browser and mail client - it actually goes far deeper than I'd realized. Any third-party app can register to be a default for certain activities. For example, Waze, a third-party navigation app, can replace Google Maps when you want to view a contact's address:
This simple addition of functionality in Android shows you, in a single picture, the ability to break-through a handset maker's attempt to lock you into a particular mapping provider. Imagine if iOS allowed you to use Waze or Mapquest or (hypothetically) Google Maps in such a way?
Now, in Apple's case, it's not in their best interest to allow this - they want you tied to their ecosystem and, to be fair, for many of their users, this is the simplest solution. Many people just don't want to deal with different applications from different providers for different activities. Now, third-party apps in iOS can be written to open other third-party apps - for example, Week Calendar will allow you to open an address in Navigon:
While this is nice, it's up to both third-party app creators to support this functionality - Navigon has to be written to accept the incoming address information, and Week Cal has to be written to send it. This indirectly touches on Android's other powerful system - between-app communication using the Intent system.
Intents
The Intent system, like the Default system, is simple on the surface, but powerful in practice. My favorite example of this is Pocket.
Google’s Intent system allows you to treat Pocket as though it were a first-party solution. Any application that has access to the Share functionality allows you to easily save anything you’re looking at to Pocket. It’s simple, brilliant, and I use it all the damn time (ironically I am usually saving articles to read on my iPad later):
Notice all the other options there, too. Keep in mind that this sharing menu is universal to all Android apps that include the Share button. Simple. Powerful. The sharing menu in iOS looks rather anemic in comparison:
Now, let's look at two "save it later" options on iOS:
1. First-party solution? Reading List. This is a pretty limited solution, as I believe it only functions in Safari on iOS and OSX. Not really comparable to something like Pocket.
2. Third-party solution? Pocket on iOS. This is a bit better, but is still limited compared to Android, as it functions as either an awkward browser bookmarklet using Javascript, or the third-party app you want to share from has to implement Pocket’s API. While many major apps do so, because of Pocket’s popularity, it is far from the universal solution that Android gives us. For instance, Chrome on iOS doesn't allow you to share to anything besides Google+, Email, Facebook, and Twitter. Now, I could blame Google for this, but the brilliant thing about Android's Intent system is that the only one responsible for the app is the app itself. Pocket isn't dependent on dozens of other third-party app creators working with the API to enable sharing; all Pocket has to do is register its Intent with Android, and Android handles the rest. It's so elegant, you'd think it's something Apple would have thought of first.
Because Android allows third-party app developers to step in, it almost means they can excel above third-party solutions. Let's compare sharing a link to Facebook in iOS6 with the same action in Jelly Bean using the third-party app Friendcaster.
iOS6:
Friendcaster in Android 4.1:
The Android option - again, a third-party option - actually has a couple of additional features - you can post directly to a friend's wall from an app, and you can share with another app after you finish with Friendcaster. I think it is notable that a third-party solution is more powerful on Android than a first-party solution in iOS, especially given that first-party solutions are added to iOS with such fanfare and only during major OS updates.
Conclusion
As some final examples, here are some of the major ecosystem features I used in iOS, and what I've used to replace them in Android (in addition to the ones I mentioned above). Note that some of them are also dependent on the fact that Android allows third-party services to run in the background, in addition to utilizing Intents and Defaults.
- Photostream -> Dropbox auto-upload
- iMessage -> Google Talk via IMO. IMO is great because it runs in iOS, Android, and on the browser, keeping all of my conversations in-sync iMessage-style. Still not as elegant as iMessage, but many of my friends have been using Google Talk since before iOS and Android were even a thing.
- Twitter -> Tweet Lanes
- iCloud Device Backup -> Titanium Backup scheduled backup to Dropbox
- Notes -> Evernote
To be clear, my point is not to bash iOS for its limitations - quite the contrary, as iOS' first-party ecosystem is still incredibly strong, even with the recent Maps changes. You could live in the Apple world using only Apple services and be a very, very happy user.
However, as someone who chooses to live on four different platforms - Windows, OSX, iOS, and Android - I have found that Android's flexibility when it comes to third-party ecosystems has been invaluable. There's no arguing that most or all of Google's Android-based solutions are still some of the best, but it's nice to know there's stuff out there that's been able to reach equivalent functionality, just by leveraging the powers of Defaults and Intents. As much as I love other Android-specific features like Widgets, it's the loss of this sort of inter-app functionality that would really make me miss Android if I were to ever go back to iOS. Apple gives you a pre-packaged solution that works well for many (perhaps even most) people, while Google gives you the pieces to build your own, potentially-more-powerful solution - which is something I love taking advantage of.
I realize I didn't really discuss Windows Phone, but since I've never used it (beyond handling store models), I don't feel qualified to discuss it. I know Windows Phone 8 is adding something similar to Intents, called Contracts, but I don't know how powerful it will be. Still, more moves in this direction are nice to see. If anyone has more information about this, I'd love to read about it in the comments below.
Anyway, thanks for reading all this, and I hope it was enjoyable to read as it was to write!