△ 使用 Android 备份和恢复功能留住用户
随着移动设备厂商不断推出新的型号,用户更换设备的频率也越来越频繁。替换新机时,最让用户头疼的问题之一就是数据迁移了。那么不完善的数据迁移会给用户带来哪些糟糕体验呢?我们从下面的案例来看看用户的烦恼。
Sally 的烦恼
她叫 Sally,Sally 是一位食品微生物学家,她有一份很棒的工作,这份工作让她很忙碌,甚至精疲力尽。
在实验室辛苦工作一天后回到家,她最喜欢的就是在手机上玩休闲游戏。
Sally 喜欢她的手机,她在 2017 年买了这部手机,方便她在上下班路上刷美剧 The Good Place (善地)。不过现在她主要在手机上玩游戏。然而这部手机已经没有之前那么好用了。
Sally 去了当地的手机专卖店,经验丰富的店员 Hakeem 向她推荐了一款非常棒的新款 Android 手机。
Sally 回到家后就马上开始设置新手机,她很轻松地就将旧手机中的所有应用、照片、消息和设置传输到了新手机, 这让她感到很高兴。
传输完成后,她想看看喜欢的一些游戏在这部很棒的新手机上的运行效果。她最喜欢的休闲游戏是 Super Soccer Goalie Catch 2。她花了几个月时间才达到 123 级,迫不及待地想在新手机上打通这一关。
不幸的是,当她打开游戏时发现所有游戏进度都没有了。Sally 需要花几天时间才能升到原来的级别,她感到很灰心丧气,她觉得不值得付出这么多时间回到原等级。于是卸载了这款游戏,并安装了该游戏的主要竞争对手 Soccer Goalie 3D 应用。
Sally 并没有气馁,她打开了 Protein Shake Tracker 应用。Sally 喜欢喝蛋白粉,喜欢给它们打分,并跟踪自己摄入了多少营养。当 Sally 打开该应用时系统提示她登录,但 Sally 不记得自己的登录信息,也没有使用密码管理器。她也很确定自己已经更换过电子邮件地址。她有些不知所措。
相信大家已经猜到了,Sally 卸载了该应用并决定尝试另一款名为 ProteinMate 的新的出色应用。这款应用在她的 Instagram 动态消息上投放了大量广告。
Sally 喜欢她的新手机也喜欢手机上的大多数应用,但部分应用无法传输之前的数据,这让她很失望。
Javier 遇到的困惑
这是 Javier,Javier 使用 iPhone 给晚辈们发消息。他的手机中有很多晚辈们的照片,这对他来说意味着一切。
Javier 喜欢尝鲜,并且经常会购买新款手机。他很喜欢新买的可折叠 Android 手机的外观,这样的设计使他有更多的屏幕空间来发消息和玩游戏,并且可以向朋友们炫耀。
Javier 将他的所有应用、联系人和照片从 iPhone 手机传输到新的可折叠 Android 手机上。传输完成后,他马上打开了所用的即时通讯应用,希望在大屏幕上看看晚辈们的照片。
但他发现这款即时通讯应用并没有将 iPhone 上的消息传输过来,这让他很受打击。他在想,或许应该换一款即时通讯应用。
现在,您可能会认为所有这些都是在散布恐慌。但在 Google 我们对切换体验进行了大量研究,结果显示用户对切换体验并不满意。
这是卫报近期刊登的一篇文章中的一段话,与我们的研究结果相吻合。
△ 真实的用户反馈
这位用户将手机忘在了车顶上,当他发现游戏进度没有传输到新设备上时,就卸载了这款游戏。我们在研究中听到很多类似的声音。
△ 研究成果摘要
这是我们研究结果的总结。让用户感到不解的是,应用不能延续旧手机原有的状态。他们对自己的个人数据丢失感到不安,用户不会责怪 Android 或 OEM,而会责怪应用或他们自己。
在新机配置过程中只有 30% 的设备以新设备进行设置,绝大多数用户希望能够将旧手机中的数据传输到新设备。如果不能这样做,用户会感到不安,从而导致 Play 商店中的应用评分降低,并直接造成用户流失。
不要像这位开发者一样,完全不了解为什么用户会流失。这些用户是您一开始努力争取到的,当用户更换新设备时,一定要留住他们。
幸运的是,在 Android 上将应用数据传输到新设备非常简单,甚至可以免费将数据备份到云端,通过用户信任的高质量应用,帮助您扩大用户群,最终增加收入。
关于 Android 备份和恢复
我们来看两种用例: 从 iOS 切换到 Android 和从 Android 切换到 Android。
如果用户之前使用的是 iOS 手机,可以用数据线将旧手机连接到新的 Android 设备,然后进行设备到设备的迁移,简称 D2D。在 D2D 期间我们将查看用户的 iOS 设备上有哪些应用,然后尝试在 Play 商店中找到对应的 Android 应用,并自动安装这些应用。对于部分应用,还可以传输应用数据。如果您对 iOS 和 Android 版应用之间的数据传输感兴趣,请通过该 电子邮件地址 联系我们。
△ 通过数据线连接设备进行备份和恢复
对于从 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>
在本例中,我们将 Firebase 推送令牌排除在云备份之外,因为它在任何其他设备上都无法使用。将特定设备之外无法复用的数据排除是非常合理的。我们还排除了一个较大的可下载文件,如果可以很容易地从某个位置重新下载特定的数据,那么将其包含到云备份中毫无意义。
此外,对于云备份,我们已将 disableIfNoEncryptionCapabilities 标志设置为「true」。这意味着,除非提供端到端加密,否则不会将数据备份到云端。
最后,我们为设备到设备传输定义了更宽松的配置,因为在这个过程中不涉及云存储。
<uses-sdk android:targetSdkVersion=”31” />
<application
...
android:dataExtractionRules=”my_rules.xml”>
完成配置后,需要使用 dataExtractionRules 属性在 AndroidManifest 文件中指向该配置。另外,不要忘了将 Android 12 作为目标平台,因为该属性是从这个版本才引入的。
如需获取有关配置自动备份的更详细说明,请参阅 官方文档 。
键值对备份 (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 传输用户凭证
接下来我们介绍一个特定类别的应用数据。当用户在新设备上启动一款应用时,面临的最大障碍之一是再次登录。用户甚至有可能不记得自己的登录名和密码。如果您的应用能够自动识别用户,让他们能够从旧设备上离开应用的位置继续,这不是很好吗?
为了实现这一点可以使用 BlockStore。它允许您将识别用户身份所需的任何登录凭据传输到新设备作为设备到设备迁移的一部分。BlockStore 不依赖自动备份和键值对备份等功能。即使您不使用备份和恢复进行任何其他操作,仍可以使用 BlockStore 来传输身份验证令牌。我们快速了解一下它是如何工作的。
val client = Blockstore.getClient(this)
val data = StoreBytesData.Builder()
.setBytes(/* 二进制数组 */)
.build()
client.storeBytes(data)
.addOnSuccessListener{ result ->
Log.d(TAG, “Stored: ${result.getBytesStored()}”)
}
每当用户登录到您的应用并生成一个身份验证令牌或任何其他登录凭据时,只需将这些数据保存到 BlockStore 中,BlockStore 将对这些数据进行加密并安全存储。
val client = Blockstore.getClient(this)
client.retrieveBytes()
.addOnSuccessListener{ result ->
Log.d(TAG, “Retrieved: ${String(result)}”)
}
在完成设备到设备迁移后,当您的应用在新设备上启动时,您可以向 BlockStore 请求之前保存的凭据,并在不要求用户输入登录名和密码的情况下登录应用。
如需了解有关 BlockStore 的更多信息,请参阅。
测试
在您根据需要完成所有配置后,无论是使用自动备份还是键值对备份,都应进行一些测试,以确保在恢复后首次启动应用时,获得所需的状态,这一点非常重要。
测试非常简单,您可以通过特殊的工作流使用单个设备或模拟器专门模拟应用的云备份和设备到设备传输。
如需获得关于测试的详细说明,请参阅 官方文档。
持续更新您的实现方式
最后,使您的配置保持最新版本同样很重要。随着应用不断演化并增加新功能,请确保备份和恢复涵盖新增的内容。如果您使用的是自动备份可能不需要执行任何操作,默认情况下会包含所有新数据。如果您使用的是键值对备份,请更新 BackupAgent 以包含任何相关的信息。
关于 Android 12 的重要更新
应用开发者向我们反馈,他们担心 adb 备份会导致应用数据轻易被提取。为了解决这个问题,我们已经关闭了所有应用的 adb 备份。因此,启用备份和恢复不会使您的应用受到 adb 备份的影响。但您仍然可以根据需要将 adb 备份用于测试和开发目的。
其次,我们引入了 dataExtractionRules 配置,作为控制自动备份的新方法。我们正在逐步淘汰旧的方法,即 allowBackup 标志和 fullBackupContent 配置。建议您在 Android 12 及更高版本中使用 dataExtractionRules。同时为早期操作系统版本保留 fullBackupContent 配置。
如需获得上述更新的详细说明,请参阅 官方文档。
总结
我相信当您的应用数据同步到新设备上时是十分令人振奋的。好消息是,目前已有超过 20 亿台 Android 设备支持免费备份到云端。从 2022 年 1 月起 Wi-Fi 和数据线传输将扩展到所有新的 Android 设备。所有这些都将默认生效,建议您确保这些功能已开启。如果您有大量数据或敏感数据,可以对导出的内容进行微调。不要忘了新的 BlockStore API,您可以使用它安全地处理密码。
希望这些内容对您有帮助,同时希望您利用备份和恢复为用户提供更好的体验。
欢迎您 点击这里 向我们提交反馈,或分享您喜欢的内容、发现的问题。您的反馈对我们非常重要,感谢您的支持!
版权声明
禁止一切形式的转载-禁止商用-禁止衍生 申请授权