The App Store is huge. Open the Store and you’ll have more than 2.2 million apps to choose from. Getting noticed when you’re a little fish in a giant ocean is one of the hardest challenges when launching a new app. One way to leverage your fledgling, but growing, user base is to help them spread the word by sharing your app with their friends. And one of the easiest ways to do that is by providing current users with a way to link directly to content within your app using Universal Links.
What are Universal Links?
Imagine you’re a user named Yoshi64 using our new app called Kart2K. You might have a profile page with a web address like http://Kart2K.com/users/Yoshi64. We can make this a Universal Link by giving our Kart2K app permission to handle links for our app’s website Kart2K.com. Now when an iOS user taps on a Kart2K.com link, iOS will open the app instead of opening Safari. Tapping on Yoshi64’s profile link will open the Kart2K app and show Yoshi64’s profile, making the link Universal! iOS users who already have the app will be taken straight into the native app. Those who don’t have the native app on their device will be directed to the web page.Since that’s a pretty high-level overview, let’s answer the question of how does this work in practice? As detailed in the documentation from Apple, there are two steps to making your app and website support Universal Links. First, on your website, you need to add an app association file. This is a simple file that enumerates which parts of your website should be handled by an app. The sections of your website are defined by matching paths – so basically sub-trees off the domain name. The corresponding apps are defined by their bundle id. You could specify several apps that were responsible for handling different sections of your website. In practice, you typically would only have one app, but there may be some sections of your website (marketing material, support forums) that you still want to behave as normal web pages. You also need to add an entitlement to your app that advertises which domain the app supports for opening Universal Links.
When your app is launched in response to a Universal Link, iOS hands the app an NSUserActivityObject which contains the universal link. Your app will need to be able to extract the link from the user activity and display the corresponding data. NSUserActivityObjects are also used for registering activity with Spotlight. This lets your app data show up in Spotlight searches which drives user engagement. Supporting a universal URL scheme and activity objects allows your app to easily adopt several discoverability features in iOS and is well worth the development effort.
So now you’re all set. Your app is primed and ready for Universal Links! Ship it!
What Could Go Wrong?
No Plan Survives Contact with the User
When you open a Universal Link in the app, iOS shows a button in the top right to open it in Safari instead.
If your user taps that link, it disables Universal Link support in your app! All future links will open in Safari instead. This is quite disappointing because it’s so easy for a user to do. A simple tap to see where that button goes now disables the entire feature. Now when you tap a link, you go to the website without a clue that you should really be in the app. If the user scrolls the web page back up, a link back to the app is revealed, but it’s certainly not obvious. Hopefully the user will stumble upon it.
Special Cases Galore!
iOS only respects Universal Links in some cases. Behavior depends heavily on context.
If you tap on a Universal Link in Safari, it works. If you copy and paste a Universal Link into Safari’s location bar, you get the web view. If you scroll the web view up, you get the hidden “Open in App” link like above, but it’s unlikely the user will discover it.
If you tap on a Universal Link in a Safari View Controller screen, it works, but if you programmatically open a Safari View Controller with a Universal Link, it doesn’t cause the app to open. Instead you get the web view, with no option to open in app.
Most third party apps use a Safari View Controller for links. If you post a Universal Link in Slack and a colleague taps it, Slack opens a Safari View Controller with the link, so you only get the web page again, with no option to open in app.
This all makes it very difficult for third party apps to offer strong support for Universal Links, even the ones that are really trying to “do the right”.
And the Special Snowflakes
At some point hopefully Apple will fix this problem with Safari View Controller and all those third party apps will suddenly play nicely with Universal Links. However, there are always holdouts — the special apps that feel they need to provide their own custom in-app browser.
The big standout here is Facebook. Facebook’s in-app browser is completely custom, likely to retain their ability to track the user for profiling and advertising purposes. Regardless of the reasons Facebook implements its own browser, it doesn’t support Universal Links. Facebook always opens the link in a web browser rather than redirecting to the app. If you tap the button to “Open in Safari”, iOS takes over and the link opens in the target app, but that step is a bit obtuse for users, so the experience is confusing, to say the least.
Since our goal is to allow users to share direct links to content and improve the viral growth of our app, the lack of support from Facebook is quite disappointing, since it’s a primary (if not the only) means of sharing for many users.
There’s a company called Branch that has a whole platform for linking content. They’ve got a lot of great content about which apps that work (and sometimes work) with Universal Links. We haven’t used their product but they have an interesting turn-key solution for all your deep linking needs.
Universal Links in iOS 9 and later are a great way to increase sharing in your app and put your users to work, recruiting their friends into your app’s user base. It’s a win-win scenario, where you get more users and your current users can share links directly to in-app content they want to share. Adding support for Universal Links in your app also opens up integration with other iOS technologies like Spotlight Search and Handoff. There are a few gremlins to keep an eye on and sharing via third party apps can be a bit hit or miss, especially with Facebook, however, all in all, Universal Links are a great way to provide a positive experience to your users and share relevant useful content to prospective users.