March 29th, 2016
This aricle originally appreared as a guest post on Venture beat.
Apple’s software quality has been the subject of criticism for some time now. Marco Arment helped bring this to the forefront after publishing his blog post, “Apple has lost the functional high ground,” where he criticized the company for poor quality software.
What followed was a firestorm that was so pronounced that when Apple publicly announced iOS 9, it framed the new version as a chance to “elevate the foundations” — addressing things like security, performance, and improvements to frequently used apps. Unfortunately, it has been quite a shaky start. From breaking their seven year standard in the 9.2 update, to the shared web credentials fiasco in the most recent 9.3 update, the software quality has definitely left something to be desired.
This time Apple is taking its critics head-on before the software’s release, unleashing typically tight-lipped executives to talk about its ongoing efforts to improve and upgrade the software. Since an open-to-feedback Apple is a new and welcomed development for iOS developers, I wanted to take the opportunity to address a piece of iOS 9 software that deserves considerable attention: Universal Links.
I started my mobile software development career building for Android. At the time, I had a Samsung Galaxy S II and was eager to start building tools. The prospect of reaching a powerful computer that was in billions of people’s pockets was incredibly alluring. I built a few simple apps based on some crazy ideas that I had, but nothing took off. In the early days of Android, it was hard to gain traction in the Play Store — developers were competing with a fundamental belief that Android users were less interested in apps and therefore spent less money on them overall.
So, I decided to give iOS a try. It was generally believed that iOS apps generated more money as Apple users appreciated apps more and were believed to have more disposable income. The difference between the two platforms was immediately recognizable.
I opened up Xcode for the first time and followed some simple tutorials. Drag and drop widgets with simple, beautiful animations baked in? Graphical, storyboard style layouts that actually worked without having to edit the XML? The most beautiful method autocomplete of any IDE I’ve ever worked with? Oh man! This was programming.
Now, a few years later, I run a deep linking company called Branch that’s used in thousands of iOS and Android apps. What is deep linking? To put it simply, it’s the art of trying to make links work for apps in the same way that they work for websites. So when you click a link, it opens up the app and shows you the page you clicked on. The tech promises to make apps as accessible as websites are, as well as significantly improve the user experiences on the phone.
Sound familiar? It’s what Apple aimed to do with Universal Links. The difference? Branch’s tech works for apps that haven’t been installed yet, it works across other platforms, and it adds analytics and attribution to help app marketers and developers know where users are coming from.
Universal Links are a new feature that Apple launched in iOS 9 to help improve mobile deep linking by allowing marketers to include their app in traditional marketing campaigns. This product was met with considerable excitement by the mobile deep linking community which had spent the last six years building complex hacks on top of the previous technical mechanism: URI schemes.
Universal Links promises a beautiful user experience where, when a link was clicked and the app was installed, the app would open up immediately and show the page loaded. Branch incorporated Universal Links into the platform, and extended it with analytics and the ability to deep link through install.
However, there’s a significant problem: Universal Links don’t really work and Apple doesn’t seem interested in responding to developer radars about the bugs.
Let’s walk through a few of the issues with Universal Links.
1. They are not Universal. At all.
Apple implemented Universal Links in a way that would force the major app platforms (Facebook, Twitter, Pinterest, etc) to make substantial and harmful changes to the way they handle external links. Currently, the way that most of these feed-style apps handle external links is to intercept the click and open with an internal webview. This allows them to do a ton of tracking of how the user navigates the web, but only within the confines of the app. Triggering a Universal Link requires them to send a clicking user externally and loses their ability to track, which is core to their business.
Because of this, if you plan on using your links on these platforms, you must build special edge case handling to support deep linking with legacy methods. Facebook has their own App Links standard which promises similar functionality to Universal Links, but their flagship iOS app doesn’t even support their own standard. As of March 2016, it’s basically impossible to open up your app out of Facebook in a reliable way.
There are few apps that support Universal Links today and most are Apple-built apps, like Mail, Notes, and Messages.
2. Universal Links don’t work for email campaigns.
Email is a primary communication channel for companies interacting with their users, and is becoming increasingly relevant in mobile marketing. Because of the volume and complexity of email campaigns, most brands end up using an external provider like Sailthru, Mailchimp, or Sendgrid.
These providers provide an array of services, one of which is open, click, and conversion tracking. In order for them to do click tracking, they must wrap the original link in a redirect so that the user hits the provider’s server prior to being sent to the destination.
Sound familiar? It’s basically the description of every transactional and marketing email that you receive every day. The bad news: it’s impossible to use Universal Links in this scenario. You can’t wrap a Universal Link in a redirect and have it still work. So, either you universify the redirecting domain or you give up click tracking entirely. Every marketer we’ve talked to has said that this is a deal breaker for them.
We’ve had to do a ton of work to support this use case for our mobile marketers so that finally Branch works with all major providers to provide click/install tracking for Universal Links in email. No company would do this on their own, and they shouldn’t have to.
3. They are easily broken by users and hard to re-enable.
It’s currently incredibly easy for a user (or an app developer for that matter) to permanently disable Universal Links on the phone. A user simply needs to click the domain name in the top right hand corner of the screen after clicking a Universal Link. You’ll notice in iOS 9 that there’s both a back button and a link to the domain if you originated from a Universal Link. Here’s an example from LinkedIn:
If I were to click ‘linkedin.com,’ it would open up Safari and permanently disable Universal Links for my device. There are few ways to re-enable them, but for all intents and purposes, a user would never figure it out.
4. The feature is nearly impossible to debug and test.
For developers, the ability to verify the functionality of a feature is critical to development. Debugging Universal Links is easily a 6-7 step process spanning a web server config, developer portal configuration, and native app project configuration. And it’s incredibly easy to make a mistake along the way. Forget an end bracket in the structured JSON file you have to host on your own server? Broken Universal Links. Didn’t include the entitlements file in your app build? Broken Universal Links. It’s treacherous.
Despite the hundred ways that Universal Links can break, Apple didn’t provide a single validator tool to help a developer debug. We had to build our own Universal Links validator, saving developers from walking through each step, checking every line of code to ensure they didn’t miss a critical step. What should take five minutes can take a day or two to debug.
The fundamental problem with Universal Links is that it lacks thoroughness and use case testing. From what we know, the feature wasn’t discussed with major apps on the platform or reviewed with developers who needed to build on top of it. After release, publicly filed radars were ignored. Even the documentation changed substantially a month after release with no notice, forcing developers to reimplement what they had built in the previous month.
Universal Links is a developer tool. Developer tools are immensely personal products that give a business an opportunity to build strong relationships with its users. There are very few other types of product in the world that require its users to become experts in every detail of the product before they can use it. And for a product as complicated as a mobile linking tool, it is nearly impossible for the parent company to predict all of the ways in which people will think to use it or all of the edge cases induced by a fragmented, global market. Community feedback and thorough testing are the only way to deliver all of the necessary improvements.
Apple would benefit from taking a more open stance when launching developer tools. If it applied the same customer-first mentality that it applies to hardware development to the creation of its developer platform products, quality would improve dramatically. No company can pretend to know exactly what’s right for their customers. Once they start listening, I know we’ll start to see dramatically fewer and more stable releases on the iOS platform.
For the most robust, easy-to-set-up Universal Links, use the button below to get started.