If you are targetting iOS9+, you should consider Universal Links.
Deep links are links that can redirect to an app if you open them on your phone. They are powerful for sharing and leveraging apps as a content resource, as the links can open a specific screen. As such, deep links are growing in popularity, wielded in the never ending quest of cultivating users.
URL Schemes: A Serverless Past
Prior to iOS9, URL scheme deep linking was the main way to open and communicate with apps. URL schemes allow you to define custom parameters that allow the system to open your app. They are easy to implement and are defined entirely within your app, allowing developers to avoid the maintenance of pesky servers.
A common scheme is HTTP, which is used in web browsers: In http://bradkratky.ca, http is the scheme. In a custom URL scheme, you define the scheme and pass the url to your app. RFC 3986 defines Uniform Resource Identifiers syntax components as follows (though it is not required to follow this syntax):
The following are two example URIs and their component parts:
\_/ \______________/\_________/\_________/ \__/
| | | | |
scheme authority path query fragment
Interestingly, you cannot use http or https for the “custom” URL scheme in your app. These schemes will be claimed and handled by Safari. To use an http or https scheme, Universal Links will be necessary. This is a limitation because URL scheme links will not be launched when sharing in format such as e-mail: testapp://testdata may not be recognized and hyperlinked like http links are by many applications.
The URL is passed to your AppDelegate using an NSURL, using application:openURL:options as of iOS9. From there the source application can be verified and the url can be handled, at the mercy of the developer. Apple’s doc on Inter-App Communication explains the process by which the app is then launched:
URL schemes are defined by your app so there is no guarantee it will be unique. Thus, caution should be used in passing sensitive data because it could be inadvertently used to launch another app. From Apple’s docs, there is no way to know which app will be preferred:
If more than one third-party app registers to handle the same URL scheme, there is currently no process for determining which app will be given that scheme.
While this seems like a scary drawback, using something specific, such as your app’s bundle (com.companyname.appname), will likely avoid this issue. Apple still can’t be sure where it’s sending you, so it will prompt the user before opening an app via a URL scheme deep link. The user experience will be stricken with an unfortunate alert.
There is a solution: to prevent a prompt when the app is not installed, UIApplication’s canOpenURL: can be used to detect if an app can open the URL and provide logic to handle that case. Unfortunately, this creates additional work because you cannot depend on the resource you’re hoping to provide.
Though URL schemes are useful to launch other applications and very easy to implement, the interference of prompts, having to create a clickable hyperlink or launch from an app and looming possibility of same scheme collisions has this approach reeling. Universal Links were announced with iOS9 and capitalize on URL Scheme’s shortcomings. Stay tuned for the upcoming posts on Universal Links!
An app I developed, Univore, was recently released for iOS (you can also read the technical overview here)! Students (and dieticians!) seem to really be enjoying the recipes and simple instructions that Univore provides. It’s been wonderful to hear all the feedback.
When we were preparing for release, the Univore team organized for an article by the U of T MD Program to be released. This tells the origin story of the idea for Univore – but what about it’s development?!
I met Liz and Brandon while attending UHN OpenLab’s Open Rounds, a weekly forum to discuss current projects and new ideas. Liz and Brandon presented the Univore concept, but mentioned they were having trouble finding a programmer. “Hm…I’m a programmer”, I thought. After the meeting I introduced myself and got to know a little more about what they had in mind for the project.
Liz and Brandon had enlisted the design services of the extremely talented Karen Keung, who had already created much of the design for the app. It looked beautiful! The finished designs was a major selling point for me – it was much easier to visualize a great finished product, and having the UX and UI settled made my job a lot easier!
Despite the finished concept and designs, there were some challenges during development. I still had about a year left in medical school and had limited time to dedicate to development. The design, while exceptional, required extra work to implement some custom components. The late addition of the grocery list feature caused some interesting challenges (namely combining different custom quantities of ingredients, such as “a handful” and “a tablespoon”).
Fortunately, the app was finished by the end of the semester, in time for Brandon and Liz to organize a focus group for testing. The feedback sparked a couple last minute changes, the most important being the explanatory introduction screens, and we prepared for launch on August 22!
I find it incredibly gratifying to finish projects and see them grow in the wild; I’m very proud to see Univore on the App Store! Try it now!! And while the work is done for now, I’m already getting excited to start my next project!
Wine Snob is your personal butler, judging bottles of wine to impress your friends!
Take a picture of your wine bottle and Wine Snob will read the label, generating a curated review based on the details. Sly, but poignant, the Wine Snob will convince friends, and enemies, that you are a remarkable connoisseur.
Please drink responsibly.
– In-app billing
– Camera usage
– OCR using custom pre-processing techniques
– Material Design transitions
– Firebase Analytics, Invites
– Social media sharing
– Background music
Available on Google Play!
Univore is an iOS app developed to teach how quick and easy it is to adopt healthy nutrition habits.
The iOS app includes a recipe generator based on common ingredients students have available, cooking tutorials, and much more. It’s a one-stop, hand-held solution to help students build confidence and experience as first-time cooks.
– Developed in objective-c
– Google Analytics
– Crashlytics integration and Beta distribution
– Custom widgets
– Custom design
BradColorPicker is an HSV/RGBA color picker written in Swift.
The picker allows selection of a color using an HSV palette, RGB sliders or hex code input. The tool can be launched using a view controller and closes once the user finishes selection.
Available on my GitHub.
– Released as a public CocoaPod
– Developed in Swift
– Custom widgets