Having worked a lot with offline-capable apps lately, I started to see similar trends everywhere. Of course, that is partly because of frequency illusion, also known as Baader-Meinhof phenomenon – “When a thing you just found out about suddenly seems to crop up everywhere.”
Nonetheless, offline is really trending. As broadband connections and 4G cell phones become commonplace, and everyone and their mom talk about IoT, streaming and The Cloud™, it might seem strange to focus on the eventuality that you would temporarily lose your precious connection. But I find it perfectly reasonable. The more we get used to online services, the more we depend on them, and the worse the damage done when they unexpectedly stop working. Considering and handling offline scenarios is proactive damage control.
YouTube supporting offline
During a recent trip to Mumbai, India, I noticed while browsing YouTube on my Android phone that a new button had appeared in the app. I was able to download videos for offline viewing! Eureka! There were some restrictions; only videos uploaded by non-commercial accounts seemed to work, and only if the clips were ad-free. But still, a great feature. You could even choose the video quality, balancing a trade-off between resolution and disk space.
Alas, when returning home to Sweden, my new favorite button was gone. India only feature, it seems. Apparently, in most markets, this ‘YouTube offline’ feature will instead be marketed and sold as YouTube Red, a premium subscription option that initially launched in the end of October in US, at $9.99 per month. Oh well.
Viaplay promoting the offline use case
Another offline-capable app catching my eye lately is that of Viaplay, probably the biggest Swedish movie/TV streaming service, originating from a major TV network. Even though the stability and speed of internet connections in Sweden is very good, Viaplay is currently running ads in the Stockholm subway network, inspiring customers to view movies that were pre-downloaded to their devices. How come? In a time when Netflix shouts from the rooftops that they will never, ever, ever support offline viewing , Viaplay is simply filling a gap. Offline is now one of their USP’s. And of course, it helps their case that mobile data is getting increasingly expensive.
There is no such thing as an unlimited data plan
Because it is no secret that mobile carriers are charging more for data compared to a few years ago. We make fewer voice calls, and EU legislations have enforced lowered roaming costs, so the carriers have to make their money somewhere else. If you are one of the lucky ones to still be on an old mobile plan with unlimited data, treat your SIM card like a precious valuable. And if you do have such a contract, chances are that your carrier has already tried to sweet talk you with a free iPhone or something similar, just in exchange for “renewing your subscription”.
How to develop apps for offline…
If you as a developer are including offline or caching features in your app, of course you should test out the functionality in realistic conditions. Set the device to flight mode and give it a go, right? No, a bit more complex. There are design choices involved with supporting sudden network loss. A good list of considerations from Infoq:
- Displaying comprehensive error messages when network calls fail.
- Allowing the use of the application in “guest mode”, where certain features can be delayed until the user actually signs in.
- Visually displaying the absence of network connectivity on the UI (connected mode/offline mode).
- Disabling controls in the absence of network connectivity.
- Allowing the user to query and act on data while no network connection (offline data access).
- Testing the application under different network conditions!
…and how to test offline
Testers, on the other hand, will do well to try out a few different scenarios of connection loss, reconnections, app booting, and how to handle data access when your device is totally isolated from communication. Google has some offline testing guidelines which are primarily intended for web apps, but which go just as well for native mobile apps for Android or iOS.
Make sure your app works well under the following circumstances:
- The app is installed, and then immediately goes offline. In other words, the first use of the app is offline.
- The app is installed on one computer and then synced to another.
- The app is uninstalled and then immediately installed again.
- The app is running on two computers at the same time, with the same profile. The app must behave reasonably when one computer goes offline, the user does a bunch of stuff on that computer, and then the computer comes online again.
- The app has intermittent connectivity, switching often between online and offline.