Some initial thoughts on app links in general and on the Facebook solution
When I heard that Facebook was throwing their hat in the ring with a solution to app linking I have to admit that I was excited and concerned at the same time.
On the one hand I have a skeptical side to the incentives of Facebook. I had just seen Mark talk about how the silos of Android and iOS were bad and that we should use the Facebook meta “platform”. This felt a touch cheeky when you think about how in many ways Facebook is an incredible silo.
On the other, there is a problem to solve. The URL is an amazing feature of the Web, and the app platforms need to have a way to meet with the goodness that the loose coupling of that mechanism provides.
I have personally found that all of these situations can be true after tapping on a link inside an application:
- “I have the app installed and I prefer it, why are you showing me this janky web page!”
- “Don’t tell me about your app! I just want to view the darn content!”
- “Don’t render this in a WebView with your janky wrapper, just open this in my browser of choice please”
- “Ugh, I don’t want that app to handle this, I wish it would open another one!”
There are a few different pieces to the puzzle that I would love to have more control over, both as a developer and as a user:
- The platform should be able to cater for as fine grain deep-linking as possible
- As a developer, if I am integrating with a known service, I would love to easily find documentation on the API available to get into the app (e.g. the custom URL scheme)
- As a developer, I would love to have a registry of apps so I can search for options
- If my application opens any old URL (e.g. not something I am custom dealing with) it would be nice to be able to have the option for app vs. web
- As a developer, I would love to easily give the user the choice on how to handle an action (e.g. on iOS if they have Chrome installed, offer that as a choice along with Safari)
- As a developer, I would love to be able to monetize through an affiliate program
Mark also talked about how the end user was the number one customer for Facebook. To that end, I would love to empower the user more than we currently do.
I think that there is a missed opportunity with app linking to enable just that. One of the great features of the Intent system on Android is that we have a level of abstraction that is better than the default one on the Web. How many links are there on the Web to URLs such as:
What if an amazing new mapping company came on the scene. It would be awesome to be able to take over those URLs and use that service. I guess I could install a plugin to try to change the URLs, or I could hijack as a service, but if I could instead map (pun intended) a general URL scheme to a location and then have the user select what application or service can deal with it, then we are open for business.
We can then think of “actions” and map to those, and we have a level of indirection. We wouldn’t have the frustrating “attach file, attach from dropbox, attach from …” that we get today. One application can say “I need a file from the user” and the system can detect any options and the user can choose what to do from there.
iOS doesn’t have good support for this now, but maybe the “App Linker Alliance” could have come with a helper experience that would enable just that. It would do the detection. It would save the defaults. If the user doesn’t want to launch “the app” it would go to the web site instead, etc.
Being able to hit a http URL and look for meta data is great and covers some nice use cases. It would also be nice to have a really good registry (nicer than http://graph.facebook.com/?ids=http://hulu.com&type=al? I don’t want to have an OAuth key do I?).
In some cases I wouldn’t mind being able to say:
For http://foo.com use foo:[passing in the full url]
and the app deals with it all. A nice cover-all. With the right registry and handshake maybe we could do more to ensure that only the “official” registered app is getting the info, so we don’t run into a “first app to define that URL scheme wins” type scenario.
Markup is great, but I would also love to have a /applinks.json type option that lists it all etc. I need to think deeper on this.
With WWDC coming up next, I am very curious to see where Apple takes deep linking and cross application communication. They have punted on what they had built a couple times (allegedly) but it is surely time.