
在
Android Dev Summit上宣布的各种工具中,我要特别注意应用内更新(IAU)应用程序更新机制,该机制可帮助开发人员加快新功能,错误修复和性能改进的速度。 由于此功能是在Google I / O 2019之后
发布的 ,因此在本文中,我将详细讨论IAU,描述建议的实现方案并提供一些代码示例。 我还将讨论我们将IAU集成到Pandao(从中国订购商品的应用程序)中的经验。
新的API使开发人员可以将应用程序更新为Google Play上可用的最新版本。 这样,IAU可以补充现有的Google Play自动更新机制。 IAU包含几种实施方案,这些方案在用户交互方面根本不同。
- Flexible Flow为用户提供了在后台下载更新并在方便的时候安装它的功能。 它适用于用户仍可以使用旧版本但已提供新版本的情况。

- Instant Flow需要用户下载并安装更新,然后才能继续使用该应用程序。 它适用于开发人员更新应用程序至关重要的情况。

由于第二个选项不太重要,不太适合Pandao应用程序,因此我们将更详细地分析“灵活流”方案。
IAU的灵活流集成
用例
使用IAU的升级过程包括几个步骤。
- 使用Play Core库的应用程序,可在Google Play上检查是否有可用的更新。
- 如果是,则应用程序要求Google Play显示IAU对话框。 Google Play向用户显示一个对话框,其中包含要更新的建议。
- 如果用户同意,则Google Play在后台下载更新,并在状态栏中向用户显示下载进度。
- 如果在后台运行应用程序时下载完成,则Google Play将自动完成安装。 如果此时应用程序处于活动状态,则对于这种情况,有必要确定自己的安装完成逻辑。 请考虑以下情形。
- 该应用程序通过向用户显示带有进度指示器的Google Play对话框来启动安装过程。 安装完成后,将启动该应用程序的更新版本。 在这种情况下,建议显示一个附加对话框,允许用户确认他准备立即重新启动应用程序。 这是推荐的实施方案 。
- 该应用程序等待,直到它在后台,然后完成更新。 一方面,从UX的角度来看,这是一种不太麻烦的行为,因为用户与应用程序的交互不会中断。 但另一方面,它要求开发人员实施逻辑以确定应用程序是否在后台。
如果下载的更新的安装未完成,则Google Play可能会在后台完成安装。 最好不要显式使用此选项,因为它不能保证安装更新。
基本测试要求
要在测试设备上手动完成整个更新过程,您必须至少具有两个具有不同程序集编号的应用程序版本:
source和
target 。
- 编号较高的原始版本必须在Google Play上发布,Google Play会将其标识为可用更新。 设备上必须安装具有较低内部版本号和集成IAU的目标版本,我们将对其进行更新。 最重要的是,当应用程序要求Google Play检查更新时,它将比较已安装版本和可用版本的程序集编号。 因此,只有在Google Play上的内部版本号高于设备上的当前版本时,才会启动IAU。
- 源版本和目标版本必须具有相同的程序包名称,并且必须使用相同的发行证书进行签名。
- Android 5.0(API级别21)或更高版本。
- 播放Core库1.5.0或更高版本。
代码示例
在这里,我们看一个使用IAU灵活流程的示例代码,也可以在
官方文档中找到。 首先,您需要在模块级别将Play Core库添加到build.gradle文件中。
dependencies { ... implementation "com.google.android.play:core:1.5.0" }
然后创建一个
AppUpdateManager
实例,
AppUpdateManager
添加一个回调函数,该函数将返回有关更新可用性,启动更新的对象(如果有)以及当前下载进度(如果已经开始)的信息。
要显示用于请求Google Play更新的对话框,必须将接收到的
AppUpdateInfo
对象传递给
AppUpdateInfo
方法。
appUpdateManager.startUpdateFlowForResult(
要监视更新状态,可以将
InstallStateUpdatedListener
事件侦听器添加到IAUs管理器中。
一旦下载了更新(“已
DOWNLOADED
状态),就需要重新启动应用程序以完成更新。 可以通过调用
appUpdateManager.completeUpdate()
来启动重新启动,但是在此之前,建议显示一个对话框,以便用户明确确认他准备重新启动应用程序。
Snackbar.make( rootView, "An update has just been downloaded from Google Play", Snackbar.LENGTH_INDEFINITE ).apply { setAction("RELOAD") { appUpdateManager.completeUpdate() } show() }
错误“更新不可用”
首先,重新检查是否符合“基本实施要求”部分所列的要求。 如果您已完成所有操作,但仍无法根据
onSuccess
调用进行更新,则问题可能出在缓存中。 由于内部缓存机制,Google Play应用程序很可能不知道可用的更新。 为了避免在手动测试过程中发生这种情况,您可以转到Google Play上的“我的应用和游戏”页面来强制重置缓存。 或者,您可以只在Google Play应用程序的设置中清除缓存。 请注意,此问题仅在测试期间发生,它不会影响最终用户,因为最终用户的缓存仍每天更新。
盘岛应用中的IAU灵活流程
我们参加了一项抢先体验计划,并将IAU的“灵活流程”(推荐实施)集成到了Pandao应用程序中,该平台是制造商和销售商可以在其上交易中国商品的平台。 IAU对话框显示在主屏幕上,以便最大数量的用户可以与之交互。 最初,我们希望每天最多显示一次对话,以免分散人们与应用程序交互的注意力。
由于A / B测试在任何新功能的生命周期中都起着关键作用,因此我们决定评估IAU在我们的应用中的效果。 我们将用户随机分为两个不相交的组。 第一组是不使用IAU的对照组,第二组是测试组,我们向这些用户展示了IAU的对话。
盘岛应用中的IAU灵活流A / B测试。在过去的几个发行版中,我们测量了该应用程序每个版本的活动用户百分比。 事实证明,在当时具有最新版本的活动用户中,主要部分由来自B组的参与者组成,即具有IAU功能。 图中的紫色线表示在发布1.29.1版本后的头几天,具有IAU的活动用户数超过了不使用此功能的用户数。 因此,可以说带有IAU的用户更新应用程序的速度更快。
Pandao应用程序中的IAUs灵活流对话框。根据我们的数据(请参见上图),用户最常在发行后的头几天单击IAU对话框中的确认按钮,然后不断减少转换,直到发布该应用程序的下一版本为止。 使用对话框中的安装按钮可以观察到相同的情况,该按钮将启动下载更新的安装。 因此,可以说两种情况下的平均转化价值都与释放频率成正比。 在盘岛,单击确认按钮一个月内的平均转化率达到35%,单击安装按钮一次的平均转化率达到7%。
我们假设随着时间的推移,确认百分比的下降只是用户体验问题,因为对新版本感兴趣的人将很快更新,而对更新不感兴趣的人将不感兴趣。 基于此假设,我们决定不打扰那些对更新不感兴趣的人,也不每天询问他们。 优良作法是使用基于“过时”的其他查询逻辑,也就是说,为了不打扰用户,我们评估了他们的旧版本以及建议他们更新的频率。
通常,IAU在A / B测试期间显示出良好的结果,因此我们为所有用户推出了IAU。
致谢
感谢您撰写本文的帮助,包括Marina Pleshkova
Maryna_Pliashkova ,Alexander Cherny
alexchernyy ,Ilya Nazarov
RolaRko ,Gleb Bodyachevsky,Daniil Polozov
jokerdab ,Anastasia Kulik,Vladislav Breus和Vladislav Goldin
Vladiskus 。