android - 如何让 Android 将应用数据存储在用户的 Google 帐户中,以便在新设备上安装时恢复
问题描述
我们正在我们的 Web、iOS 和 Android 应用程序上实施一个无登录系统,该系统允许用户拥有持久身份,而无需任何注册/登录流程。
loginless 的一个关键部分是依靠 iOS 和 Android 将我们应用程序的数据永久存储在用户的 iCloud/Google 帐户中,以便在每个场景中为用户自动恢复数据:
- (i) 退出并重新打开应用程序(
SharedPreferences
在 Android、UserDefaults
iOS 中完成) - (ii) 在同一设备上卸载并重新安装应用程序(
key/value backup
在 Android¹ 中完成,在 iOS中完成Keychain
)NSUbiquitousKeyValueStore
- (iii )基于旧设备的备份设置新设备(在 Android 中完成
key/value backup
¹,在 iOS 中完成UserDefaults
)Keychain
NSUbiquitousKeyValueStore
- (iv) 在新设备上安装应用程序,该设备登录到用户之前使用该应用程序的同一 iCloud/Google 帐户(
NSUbiquitousKeyValueStore
在 iOS 中完成)
我们剩下的唯一情况是弄清楚如何为 Android 完成 (iv)。即使新设备不是从旧设备的备份设置的,Android 中的键/值备份是否会在这种情况下恢复数据?
我们在研究过程中发现了Cloud Firestore和AccountManager的存在,但似乎 Cloud Firestore 中的数据是基于设备键入的,因此无法完成 (iv),而且 AccountManager 似乎需要向用户通过 询问他们的帐户android.permission.GET_ACCOUNTS
,加上 loginless 的整个设计旨在不向用户询问任何个人身份信息。我们的这些结论是否正确,或者可以使用 Cloud Firestore 来完成 (iv)?还有什么我们可以用来在 Android 中完成 (iv) 的吗?
¹ 我们决定使用键/值备份而不是自动备份,因为备份的频率高于自动备份的频率。请参阅Android 文档中有关差异的更多信息。
解决方案
如果android:allowBackup属性设置为 true,则共享首选项应从以前的设备恢复。据我所知,如果您在 Google(驱动器)上备份了您的手机,则此方法有效。
推荐阅读
- r - 将 ggplot 应用于多个列并保存多个图形输出
- mysql - MySQL 错误 29. SQL 未使用正确的文件路径
- c++ - 确定从无符号整数中减去是否会翻转
- api - 内部服务器错误是否应该大张旗鼓地记录?
- javascript - 如何将 tr 元素附加到表中?
- javascript - 从 Windows 10 通知栏中单击的通知未按预期工作
- c# - 将验证添加到 IConfiguration.Bind .NET Core 2.2
- django - DJANGO API REST FRAMEWORK:模式方法
- python - 如何在Python中以块的形式循环二进制文件
- php - 我正在尝试构建一个类来动态更新数据库但收到此错误: