Open letter to Cloud Storage Apps on Android
Dear [Cloud Storage Provider],
Android has some amazing features, such as the ability to provide both read and write access to files and directories within your app via a standard system interface. Some other mobile operating systems are just getting such a feature. On Android, it’s been around since Android 4.4 (October 2013) and has only gotten more and better features since then. It’s called the Storage Access Framework (SAF).
What can the SAF do on Android?
I’m glad you asked. Any app can:
Open a directory (Android 5.0+)
In addition, an app can request persistent access to any of the above! This is extremely useful if an app wants to, for example, have persistent access to a directory where it can add, delete, and modify files. When any changes occur, your cloud storage app can manage syncing these changes with your backend.
Why don’t you just implement our SDK?
There are many reasons using the SAF is good for both you and app developers. Here are a few:
The SAF provides a single familiar user interface for creating and opening files and directories.
App developers only have to interact with the SAF, rather than implementing individual cloud storage SDKs.
Your apps can do a better job syncing changes to the cloud (e.g. only uploading the parts of files that changed or even detecting when there were no changes).
When your APIs change you can update your app much faster than relying on all app developers to update SDKs.
I’m not advocating getting rid of your SDK. I’m sure many of you provide unique features in your SDK that are not available via the SAF. However, for the majority of apps that just need to be able to open and create files, the SAF is where it’s at.
But can most Android users even use the SAF?
If you were waiting until these features were more widespread, well, as of September 11, 2017, 91.9% of devices are on Android 4.4 or later and 76.8% of devices are on Android 5.0 or later.
Adding support for the Storage Access Framework was already useful and important for seamless access to files throughout Android. However, I believe this is going to be especially useful and important now that Android apps can run on Chrome OS.
You convinced me, how do I get started?
To get started, follow the documentation here and read this post on Building a DocumentsProvider.
Do we really need to support all the capabilities?
Please support as much of the DocumentsProvider capabilities as possible! It’s very frustrating to both app developers and users when your cloud service shows up in the SAF sometimes, but not others. Here are a few examples from cloud storage providers I’ve tested:
Google Drive: supports open and create file, but not open directory
OneDrive: only supports open file
Box: sometimes shows up for open and create, but doesn’t work
Dropbox: no support
If you’re not listed here and want to be, let me know in the comments!
An Android App Developer