I was at a conference on Mobile Apps recently, and one of the hot topics was disconnected apps. Let’s start with a brief definition. Connected means that the app connects with a server of some sort when it operates. In other words, the app is using data, or services, that reside beyond the mobile device itself. For example, a mapping application downloads maps for new areas as you move around in it. It also holds onto maps for a while once they are downloaded, drawing from the mobile device’s physical memory when possible. When the app needs map data for a new location, or a higher resolution as a user zooms in, it pulls that data from a server or other location outside the device. Disconnected means that the app cannot connect with a server or other devices to communicate either to download or upload data. Putting your mobile device into Airplane Mode puts it in disconnected mode. While some apps are always disconnected, others are typically connected and can also run in a disconnected mode. I’m going to use the term disconnected for either of these, although it’s the disconnected mode we are really concerned with here.
Despite the fact that the internet and connectivity are widely available all over the world, there are some important situations where connectivity cannot be relied upon and accurate, up-to-date data is essential. In disaster situations, such as flood, fire, or earthquake, connectivity is typically disrupted. Bringing mobile devices into these locations seems like it would help the responders gain important situational awareness and provide important updates back to command centers. These devices need to operate in both connected and disconnected modes, so well-designed support for disconnected apps is critical.
There are three key considerations when designing apps that will support a disconnected mode:
- Data on the device that the app is using may not be up-to-date.
The user needs to be aware both that he is in a disconnected mode and the age of the data he is relying upon.
- All data must be available locally for local access.
Apps typically need some data to operate on, so this data needs to be available on the local device before a user goes disconnected in order to keep the app working.
- Moving between connected and disconnected modes must be seamless for the user once an app is ‘provisioned’.
It makes sense that a user needs to be involved in the provisioning, or loading, of data he believes he’ll need in disconnected mode. Once that is done however, the user should be freed of the responsibility of moving or updating data. The apps themselves should manage switching between remote and local data as connectivity permits.
One of the ways that geospatially-oriented apps (or geo-apps) are being made more useful in disconnected mode is through the use of map caches. This can be generalized to the idea of a data cache. If the user knows she will be going into an area with limited or no communications, she can ‘provision’ the device in advance by pre-loading, or caching, the data for the area she is headed into on her mobile device. While there is connectivity, the cache can be augmented or updated with data from the server. Once the device is disconnected, all data is drawn from the cache. Data or information that might normally be sent back up to the server is also cached and delivered once the device is re-connected.
Passing geospatial data between client and server or from client to client is nothing new. Many applications due this today, and most define their own formats for the metadata or ancillary information. This becomes a problem on mobile devices where memory is limited. Multiple apps covering the same region of interest are currently storing the same geospatial data multiple times in a variety of propriety formats. To address this potential issue, OGC has developed the GeoPackage Specification which will eventually become an open standard for distribution and direct use of geospatially oriented data. This specification will likely become a standard not only for mobile applications but all geospatial data containers. Using this specification, developers can create apps that maximize storage utilization and manage their local data through a standards-based approach. Multiple apps will be able to share the same data store, economizing on space. This is an exciting development for those working in the mobile world. How do you see the development of a GeoPackage Specification impacting your world?