3

我正在开发一个应用程序,我想实现一个功能,可以在相同的用户设备之间共享,比如收藏夹、书签等。所以,我想实现像 iCloud 这样的东西。

我遇到了 2 个可能的想法:备份管理器和 Google Drive。我认为备份管理器是最简单的解决方案,可以满足我的需求,但也许我错了:

注意:备份服务不是为与其他客户端同步应用程序数据或保存您希望在正常应用程序生命周期中访问的数据而设计的。您无法按需读取或写入备份数据,也无法通过 Backup Manager 提供的 API 以外的任何方式访问它。

注意:Android Backup Service 提供的备份传输不保证在所有支持备份的 Android 设备上都可用。有些设备可能支持使用不同的传输方式进行备份,有些设备可能根本不支持备份,并且您的应用程序无法知道设备上使用了哪种传输方式。

由于我将此信息存储在 SharedPreferences 中,因此我按照 Google 的建议 ( http://developer.android.com/guide/topics/data/backup.html#BackupAgentHelper )扩展BackupAgentHelper来开始实施。

...每次用户更改某些数据时,您的应用程序应调用 dataChanged(),它将备份请求添加到备份管理器队列。

因此,例如,每次我更改数据、保存或删除书签时,我都会调用:

BackupManager.dataChanged(C.PROJECT_PATH);

当我的应用程序启动时,我调用:

contentBackupManager.requestRestore(new RestoreObserver() {})

一切都已设置好,AndroidManifest.xml 也是如此。

不幸的是requestRestore正在返回!= 0(错误)并且我的 BackupAngent(扩展 BackupAgentHelper)onBackuponRestore没有被调用(onCreate是)。但是,再一次:

备份请求不会立即调用您的 onBackup() 方法。相反,备份管理器会等待适当的时间,然后对自上次执行备份后请求备份的所有应用程序执行备份。

这是否意味着我只能在 Google Drive 中找到答案?

4

1 回答 1

6

你是正确的,你不应该使用BackupManager这个。您将需要使用第三方服务来保存您的确切数据类型。所以你可以:

  • 使用提供 API 的服务,如 Google Drive 或 Dropbox,您可以在其中上传(和下载)任何类型的文件,并以您选择的格式(XML/JSON/二进制)存储您的数据。这里的好处是:
    • 您不需要用于数据存储的服务器端应用程序,因此可以减少开发工作量
    • 用户拥有自己的数据,这对某些用户可能很重要
  • 编写一些自定义服务器端代码,为您的应用提供特定的 API。您可以为此使用Google App Engine。显然,如果你有很多用户,缺点是增加了开发工作量和来自 appengine 的潜在费用。然而,如果你走这条路,你也有很多优势:
    • 您不会在用户的 Drive 或 Dropbox 帐户上浪费空间,
    • 用户不喜欢在 3rd 方应用程序中输入他们的 Drive / Dropbox 凭据,
    • 您可以使用GCM等漂亮的功能,
    • 您将数据存储在一个实际的数据库中,因此您可以根据需要构建它,并且您也拥有它。

你选 :)

于 2013-03-25T13:18:52.333 回答