Android облако – Backup Manager vs Drive

Я разрабатываю приложение, и я хотел бы реализовать функцию, в которой можно было бы делиться, скажем, избранными, закладками и т. Д. Между одними и теми же пользовательскими устройствами. Итак, я хочу достичь чего-то вроде iCloud.

Я столкнулся с двумя возможными идеями: Backup Manager и Google Диском. Я думаю, что Backup Manager является самым простым решением и будет соответствовать моим потребностям, но, возможно, я ошибаюсь:

Примечание . Служба резервного копирования не предназначена для синхронизации данных приложения с другими клиентами или сохранения данных, к которым вы хотите получить доступ в течение обычного жизненного цикла приложения. Вы не можете читать или записывать данные резервного копирования по требованию и не можете обращаться к нему каким-либо образом, кроме как через API, предоставленные диспетчером резервного копирования.

Примечание . Транзакция резервного копирования, предоставляемая службой резервного копирования Android, не гарантируется на всех устройствах на базе Android, поддерживающих резервное копирование. Некоторые устройства могут поддерживать резервное копирование с использованием другого транспорта, некоторые устройства могут вообще не поддерживать резервное копирование, и ваше приложение не знает, какой транспорт используется на устройстве.

Поскольку я храню эту информацию в SharedPreferences, я начал свою реализацию, расширив BackupAgentHelper, как советует Google ( http://developer.android.com/guide/topics/data/backup.html#BackupAgentHelper ).

… каждый раз, когда пользователь меняет некоторые данные, ваше приложение должно вызывать dataChanged (), который добавляет запрос резервного копирования в очередь Backup Manager.

Таким образом, каждый раз, когда я меняю данные, сохраняю или удаляю закладку, например, я вызываю:

BackupManager.dataChanged(C.PROJECT_PATH); 

Когда мои приложения запускаются, я вызываю:

 contentBackupManager.requestRestore(new RestoreObserver() {}) 

Все настройки и AndroidManifest.xml тоже.

К сожалению requestRestore возвращается! = 0 (ошибка), и мой BackupAngent (extends BackupAgentHelper) onBackup и onRestore не вызывается ( onCreate is). Но, еще раз:

Запрос на резервное копирование не приводит к немедленному вызову метода onBackup (). Вместо этого Backup Manager ждет подходящее время, а затем выполняет резервное копирование для всех приложений, которые запросили резервное копирование с момента последней резервной копии.

Означает ли это, что я найду свой ответ только на Google Диске?

Вы правы, что для этого не нужно использовать BackupManager . Вам нужно будет использовать стороннюю службу, которая будет хранить ваш точный тип данных. Таким образом, вы можете:

  • Используйте службу, такую ​​как Google Диск или Dropbox, которая предоставляет API, в котором вы можете загружать (и загружать) файлы любого типа и хранить свои данные в выбранном вами формате (XML / JSON / двоичный файл). Ниже перечислены следующие факторы:
    • Вам не нужно приложение на стороне сервера для хранения данных, поэтому меньше усилий разработчиков
    • Пользователь имеет собственные данные, которые могут быть важны для некоторых пользователей
  • Напишите некоторый пользовательский серверный код, который предоставит API, специфичный для вашего приложения. Для этого вы можете использовать Google App Engine . Очевидно, что недостатки – это увеличение усилий по разработке и потенциальных счетов от appengine, если вы получаете много пользователей. Однако у вас есть несколько преимуществ, если вы идете по этому маршруту:
    • Вы не теряете места на учетной записи пользователя Диска или Dropbox,
    • Пользователи не любят вводить свои учетные данные Drive / Dropbox в сторонних приложениях,
    • Вы можете использовать отличные функции, такие как GCM ,
    • Вы храните свои данные в реальной базе данных, чтобы вы могли структурировать их по своему усмотрению, и вы также владеете им.

Вы выбираете 🙂