(Originally posted 2019-01-01.)
While some beer was tasted over the vacation period, this post is about a different kind of tap.
During my Xmas and New Year holiday I’ve been experimenting with ways of kicking off automation that don’t involve talking to a device, or tapping on it, or typing anything. Specifically what you can do by tapping an iOS device on something, or waving it near something.
Most of what I’m talking about here is indeed iOS, but I bet there are similar things possible with Android. So some of this post is “go hunt for how to do it” and some of it is “here is what I did”.
There are two technologies in particular I experimented with:
Neither is an Apple technology. Hence my comment that Android users might still get ideas.
I experimented with both but it was quite late in the vacation that some NFC tags appeared, so I’ll talk about QR codes first.
But first some motivation (perhaps): There are quite a few repetitive things I do. For example:
- When I get in the car I always switch the phone to Overcast, my podcast client of choice. This is fiddly on a phone, particularly in the near-dark.
- I often want to dictate a quick thought in Drafts, or add a task to my to-do list manager (Omnifocus). I want the minimum amount of friction getting from thought to capture.
These are cases where just tapping on something is going to be quicker, less fiddly, and less error prone. Or at least that was the idea. And anything that reduces the friction or error rate should make me more likely to use it.
Plus, I just wanted to play with some technology away from the “day job".
For the rest of this post to make sense I need to tell you what application-specific URLs are.
Consider this URL:
Whereas most people are familiar with URLs beginning with
https:// it’s perfectly legitimate to begin the URL with a different protocol or scheme. In iOS an application can register a protocol handler. In URL terms the protocol name is the bit before the
://. In the above example, the OmniFocus app registers a protocol handler so that it handles anything with a scheme of
But what does an app do when it handles an application-specific URL? It should parse the rest of the URL, including the path and any query string. So, by confecting a URL and having the app handle it you can be specific with what you want the receiving app to do. And hence automate stuff. (To the extent the app supports such URLs.)
To use the URL you can:
- Open it with a web browser – such as Safari.
- Open it with one of the many automation apps that know how to open a URL.
Whatever you open it with, the opener doesn’t need to know anything about the app the URL invokes. However, some apps take part in a more elaborate protocol built on this called x-callback-url. This protocol enables apps to communicate with each other (bidirectionally) – if they support it. x-callback-url is described here.
The net of this is that if you have a trigger that furnishes the right URL it can automate apps on the device1 – one or more in a chain. The rest of this post is about doing just that.
A QR code is a kind of two-dimensional bar code – and can be displayed or printed without exotic equipment. It can be read using a device with a camera and decoding software. These requirements aren’t really strenuous with modern phones and tablets.
My idea was to print a sheet of QR codes, that I could stick to the wall. Here is an example one:
Stephen Millard kindly wrote a Shortcuts action to create this from a list of items. Each item consists of two elements:
- The printed name. e.g. “New Draft”
- The URL to invoke to run the action. e.g. “drafts5:///new”
(His code confects an HTML table and converts it into a PDF. I then printed that.)
One thing to note about this is that – if you want a hard copy – any change necessitates printing another sheet. While it’s possible you might display such a grid on e.g. an iPad I would think that a rare case.
You can get Stephen’s sample action from here. You will need to edit the first step for your own actions. And you will need Apple’s Shortcuts app to run it.(It’s free and only runs on iOS and should be regarded as a standard app in iOS 12.)
The best QR Code reader I’ve found – in terms of being able to invoke a wide range of actionable URLs – is Qrafter Pro. And opening URLs is the key point, as I’ve already said.
I got this to work nicely, but I’m not sticking with it. So I won’t be buying a laminator.
A NFC tag is a very thin piece of electronics – that can be read by placing an NFC reader within 4cm of it. In fact NFC is at the heart of contactless payment systems and its use is very similar. You need an NFC-enabled device to read it – which the latest iPhones are.
I’ve had Launch Center Pro (LCP) for a number of years – and it’s one of the best ways of confecting “actionable URLs” (as Stephen called them).
What’s new is being able to read NFC tags in the background. This means you tap on the tag and it launches an action without actually having to open the LCP app first. (But you do have to unlock your phone.)
But these are specially encoded tags, which cost about £1 each. Here’s one:
As you can see, I haven’t peeled it off the backing paper – as I’m experimenting with precise positioning. It’s actually the one in my home office, and I have others scattered around the house and one in my car2.
They’re very thin and a strip of 5 came in an ordinary letter-sized envelope in the mail from the USA.
Tapping on the office one yields – after tapping on a notification3 – the following menu:
Tapping on one of the items in the menu kicks off the action. They’re all simple actions at this point – and all ones LCP knows directly how to kick off. But they could be the beginning of a complex set of automation. For example, there might be one to set me up for writing a blog post, or for starting my day4.
Unlike printing a QR code grid, I can edit this menu any time I want. Indeed I’ve added actions to each of the 4 NFC tags I’ve deployed so far.
There’s a cautionary tale worth noting here. You see the Sonos item towards the bottom of the menu? All I can do with the Sonos app is open it. I wanted to be able to select which Sonos speaker to select – but the Sonos App has not been enabled for that. The lesson is you can only automate what the app lets you.
So it’s been interesting to experiment with two technologies that allow you to wave a phone over a QR code or tap on an NFC tag. (In case you didn’t get it, the “Automation On Tap” title refers to tapping on an NFC tag.)
I prefer the NFC implementation to the QR code one – though the latter is available to many more people. I do have some curation asks for Contrast, when it comes to Launch Center Pro. A few of them are:
- The ability to clone the action list associated with a tag – onto another tag.
- The ability to include a list of actions as a single item in another list.
- Being able to resequence a list of actions. (Perhaps I already can but I couldn’t figure out how to.)
- Cascading menus of actions – which I have figured out how to confect in both Shortcuts and Drafts.
- Sharing a list of actions would be nice.
It’ll be interesting to see if Contrast bite on these – now they have some real users. And these WIBNI5s are an indication of enjoyment and value, rather than frustration.
I would also expect that similar things exist for Android – at least that NFC background readers were available for high end phones. I’d be extremely disappointed to think that QR code reading and creation apps weren’t available on Android.
And, as you might expect, it’s been good clean fun playing with the technology.
Now, back to work – which is also good clean fun. 🙂
Or, in the case of something like IFTTT, off the device.
As I’m due to change my car soon it’s floating around the driver console and will probably get lost. On the next car I’ll probably find somewhere permanent to stick it. ↩
This additional step is necessary, according to the iOS security model. ↩
Yes, I know there’s one called “Start The day”. Right now it just kicks off an action – via Shortcuts – to open Omnifocus at today’s task list. It also runs on a timer in the morning – but again the iOS security model requires me to tap on a notification to run Lots of us wish there were an iOS equivalent of crontab that didn’t require extra interactions. ↩
Wouldn’t It Be Nice If … ↩