Unread Cloud performs two complementary functions: retrieving articles from feeds, and syncing account data across devices. This was my thought process behind deciding to build Unread Cloud instead of letting the app retrieve articles directly from feeds and instead of syncing via iCloud.

Article Retrieval

I have customers who subscribe to more than a thousand RSS feeds. I wanted to avoid the app polling each feed individually, especially while in the background. Unread can retrieve up to 100 articles from Unread Cloud with a single HTTPS request. Unread Cloud also removes inline scripts and other cruft from article HTML before the app retrieves it, making the article HTML retrieved from Unread Cloud more compact.

Some feeds age out articles quickly. For example, this feed from The Verge tends to have only a few hours’ worth of articles at a time. If the app retrieved articles directly from feeds, it would miss articles that were posted and aged out of a feed before the app retrieved it. Unread Cloud checks feeds often enough to prevent that from happening, and can do so regardless of whether your device is online. Therefore Unread Cloud’s article retrieval ensures that you do not miss articles.

Without a server-side article retrieval mechanism, any syncing system would also need to store full article content. Otherwise when adding an account to a new device, that new device would not see articles that had aged out of feeds. The centralized article repository ensures that a new device contains the same set of articles that exists on other devices, without other devices needing to upload article content to a syncing system.

Syncing

In addition to retrieving articles, refreshing an account also involves syncing account data such as:

  • The set of feeds to which an account is subscribed, along with subscription titles, associated tags, and webpage text settings.
  • The set of articles that have been marked read.
  • The set of articles that have been saved.

I initially built a web service just for article retrieval and intended to use iCloud for syncing, but I quickly encountered some drawbacks. The most significant issue is that iCloud throttles requests, making it difficult to store or retrieve a large volume of data in a timely manner.

Using iCloud would also make the device responsible for deleting old data from iCloud. If an article has aged out of the account, the syncing system should no longer be storing that the article is marked read. I wrote code to retrieve old read article identifiers from iCloud, determine which were still necessary, and delete the others. That would sometimes be throttled and the operation would not complete in an acceptable timeframe. With Unread Cloud, old server-side data is removed without any work by the app, and without being throttled by systems outside my control.

If you have not yet tried Unread 3, you can download it from the App Store.