Android云 - 备份管理器与驱动器

Gui*_*lhE 3 backup android sharedpreferences google-drive-api

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

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

注意:备份服务不是用于将应用程序数据与其他客户端同步,也不是为了保存您在正常应用程序生命周期中要访问的数据.您无法按需读取或写入备份数据,除了通过备份管理器提供的API之外,无法以任何方式访问备份数据.

注意:Android备份服务提供的备份传输不保证在所有支持备份的Android设备上都可用.某些设备可能支持使用不同的传输进行备份,某些设备可能根本不支持备份,并且您的应用程序无法知道设备上使用的传输.

由于我存储SharedPreferences这个信息,我通过扩展开始我实现BackupAgentHelper如谷歌建议(http://developer.android.com/guide/topics/data/backup.html#BackupAgentHelper).

...每次用户更改某些数据时,您的应用都应调用dataChanged(),这会向备份管理器队列添加备份请求.

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

BackupManager.dataChanged(C.PROJECT_PATH);
Run Code Online (Sandbox Code Playgroud)

当我的应用程序启动时,

contentBackupManager.requestRestore(new RestoreObserver() {})
Run Code Online (Sandbox Code Playgroud)

一切都是设置和AndroidManifest.xml.

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

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

这是否意味着我只会在Google云端硬盘中找到我的答案?

Fel*_*lix 6

你是不正确的,你不应该使用BackupManager它.您需要使用能够保存确切数据类型的第三方服务.所以你可以:

  • 使用Google Drive或Dropbox等服务提供API,您可以在其中上传(和下载)任何类型的文件,并以您选择的格式(XML/JSON /二进制文件)存储数据.这里的好处是:
    • 您不需要服务器端应用程序来进行数据存储,因此开发人员的工作量就会减少
    • 用户拥有自己的数据,这对某些用户来说很重要
  • 编写一些自定义服务器端代码,以提供特定于您的应用的API.您可以使用Google App Engine.显然,如果你有很多用户,那么缺点就是增加开发工作量和来自appengine的潜在账单.但是,如果你走这条路,你也有很多好处:
    • 您不会在用户的云端硬盘或Dropbox帐户上浪费空间,
    • 用户不希望在第三方应用中输入其Drive/Dropbox凭据,
    • 你可以使用像GCM这样的漂亮功能,
    • 您将数据存储在实际数据库中,因此您可以根据需要对其进行结构化,并且您也拥有它.

你选 :)