使用 Android 备份和恢复功能留住用户
△ 使用 Android 备份和恢复功能留住用户
Bilibili 视频链接
https://www.bilibili.com/video/BV1eL4y147we/
随着移动设备厂商不断推出新的型号,用户更换设备的频率也越来越频繁。替换新机时,最让用户头疼的问题之一就是数据迁移了。那么不完善的数据迁移会给用户带来哪些糟糕体验呢?我们从下面的案例来看看用户的烦恼。
Sally 的烦恼
Javier 遇到的困惑
这是 Javier,Javier 使用 iPhone 给晚辈们发消息。他的手机中有很多晚辈们的照片,这对他来说意味着一切。
Javier 喜欢尝鲜,并且经常会购买新款手机。他很喜欢新买的可折叠 Android 手机的外观,这样的设计使他有更多的屏幕空间来发消息和玩游戏,并且可以向朋友们炫耀。
Javier 将他的所有应用、联系人和照片从 iPhone 手机传输到新的可折叠 Android 手机上。传输完成后,他马上打开了所用的即时通讯应用,希望在大屏幕上看看晚辈们的照片。
这是卫报近期刊登的一篇文章中的一段话,与我们的研究结果相吻合。
这位用户将手机忘在了车顶上,当他发现游戏进度没有传输到新设备上时,就卸载了这款游戏。我们在研究中听到很多类似的声音。
关于 Android 备份和恢复
我们来看两种用例: 从 iOS 切换到 Android 和从 Android 切换到 Android。
如果用户之前使用的是 iOS 手机,可以用数据线将旧手机连接到新的 Android 设备,然后进行设备到设备的迁移,简称 D2D。在 D2D 期间我们将查看用户的 iOS 设备上有哪些应用,然后尝试在 Play 商店中找到对应的 Android 应用,并自动安装这些应用。对于部分应用,还可以传输应用数据。如果您对 iOS 和 Android 版应用之间的数据传输感兴趣,请通过该电子邮件地址联系我们:
switching@google.com
△ 通过数据线连接设备进行备份和恢复
对于从 Android 切换到 Android 的用例,用户也可以通过数据线连接设备。我们将重新下载用户的所有应用,并为每个参与备份和恢复的应用传输多达 2GB 的数据。
如果用户的旧设备目前不在身边,则可以从之前创建的云备份中恢复数据。这是因为 Android 设备上的应用数据会定期备份到云端。这些应用数据备份在运行 Android Pie 及更高版本的设备上受到端到端加密保护,前提是用户已设置用于解锁屏幕的 PIN 码、图案或密码。在这种模式下,我们将为设备上的每个相关应用备份多达 25MB 的数据。
Android M 及更高版本上的所有应用都已启用了备份和恢复,除非您明确选择禁用该功能。您可以很轻松地控制和自定义所需的行为,我们将在稍后介绍如何做到这一点。
在这里您可能会想,我已经使用某种解决方案来保持用户数据同步到云端。比如 Firebase 或自定义后端,为什么还需要备份和恢复?
首先,为了使用应用内云同步功能用户需要登录到您的应用。而备份和恢复功能处理的数据在此之前就已经可用,因为我们已经通过用户的 Google 帐号识别用户的身份。
其次,也许是更重要的一点,有很多数据是设备独有的,而不属于应用中的帐号。应用通常不会将这些数据同步到云端。例如,假设您有一个入门教程,在每个设备上显示一次而不是每个帐号中如此。或者,假设您的应用中有一个设置屏幕,用户可以通过设置自定义应用在此特定设备上的外观和行为。这样的例子还有很多。
但重点在于,当用户首次在新手机上启动应用时,他们真的希望所有这些首选项都已经正确配置。现在,我们来看看如何为 Android 应用配置备份和恢复。
自动备份 (Auto Backup)
默认情况下,所有应用都参与自动备份。这意味着,您的大部分应用数据将包含在云备份和 D2D 传输中。我们将只排除缓存目录和特殊的非备份文件夹,您可以在其中放置不希望备份或传输的内容。
自定义自动备份
这是自动备份中可以自定义的配置:
设置规则规定云备份或设备传输中应包含哪些文件或目录
指定只有当设备支持端到端 (E2E) 加密时,才需要进行云备份
为云端和 D2D 设置不同的规则
要完成所有这些任务,只需创建一个包含所需配置的 XML 文件。
<data-extraction-rules>
<cloud-backup disableIfNoEncryptionCapabilities=”true”>
<exclude path=”my_prefs/device_specific_prefs”/>
<exclude path=”downloaded/temp” />
</cloud_backup>
<device-transfer>
<exclude path=”my_prefs/device_specific_prefs” />
</device-transfer>
</data-extraction-rules>
<data-extraction-rules>
<cloud-backup disableIfNoEncryptionCapabilities=”true”>
<exclude path=”files/my_firebase_token”/>
<exclude path=”files/downloaded” />
</cloud_backup>
<device-transfer>
<exclude path=”my_prefs/device_specific_prefs” />
</device-transfer>
</data-extraction-rules>
<uses-sdk android:targetSdkVersion=”31” />
<application
...
android:dataExtractionRules=”my_rules.xml”>
如需获取有关配置自动备份的更详细说明,请参阅:
https://developer.android.google.cn/guide/topics/data/autobackup
键值对备份 (Key/Value Backup)
接下来,我们简单看一下我前面提到的另一种方法,即键值对备份 (K/V backup)。
void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data,
ParcelFileDescriptor newState) {
boolean isEncrypted = data.getTransportFlags
& BackupAgent.FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED
boolean isD2d = data.getTransportFlags
& BackupAgent.FLAG_IS_DEVICE_TO_DEVICE_TRANSFER
if (isEncrypted || isD2d) {
//在这里包含需要备份的数据:要么使用端到端加密,要么不上传任何数据到云端
}
}
在这里,需要扩展一个名为 BackupAgent 的类,并实现您希望的备份和恢复行为。作为备份事件的一部分您可以检查相同的条件,比如是否提供端到端加密以及当前正在进行的操作是云备份还是设备传输,以便更好地确定应该包括哪些键值对。
<application
...
android:backupAgent=”MyBackupAgent”>
同样,当备份代理就绪后,不要忘了在 AndroidManifest 中指向该代理。如果您对键值对备份感兴趣,请参阅实现键值对备份的分布指南:
使用 BlockStore 传输用户凭证
val client = Blockstore.getClient(this)
val data = StoreBytesData.Builder()
.setBytes(/* 二进制数组 */)
.build()
client.storeBytes(data)
.addOnSuccessListener{ result ->
Log.d(TAG, “Stored: ${result.getBytesStored()}”)
}
val client = Blockstore.getClient(this)
client.retrieveBytes()
.addOnSuccessListener{ result ->
Log.d(TAG, “Retrieved: ${String(result)}”)
}
在完成设备到设备迁移后,当您的应用在新设备上启动时,您可以向 BlockStore 请求之前保存的凭据,并在不要求用户输入登录名和密码的情况下登录应用。
如需了解有关 BlockStore 的更多信息,请参阅:
https://developers.google.cn/identity/blockstore/android
测试
在您根据需要完成所有配置后,无论是使用自动备份还是键值对备份,都应进行一些测试,以确保在恢复后首次启动应用时,获得所需的状态,这一点非常重要。
持续更新您的实现方式
关于 Android 12 的重要更新
总结
我相信当您的应用数据同步到新设备上时是十分令人振奋的。好消息是,目前已有超过 20 亿台 Android 设备支持免费备份到云端。从 2022 年 1 月起 Wi-Fi 和数据线传输将扩展到所有新的 Android 设备。所有这些都将默认生效,建议您确保这些功能已开启。如果您有大量数据或敏感数据,可以对导出的内容进行微调。不要忘了新的 BlockStore API,您可以使用它安全地处理密码。
更多信息
https://developer.android.google.cn/guide/topics/data/backup联系我们
switching@google.com
推荐阅读