应用程序内更新:加快Android应用程序更新



Android Dev Summit上宣布的各种工具中,我要特别注意应用内更新(IAU)应用程序更新机制,该机制可帮助开发人员加快新功能,错误修复和性能改进的速度。 由于此功能是在Google I / O 2019之后发布的 ,因此在本文中,我将详细讨论IAU,描述建议的实现方案并提供一些代码示例。 我还将讨论我们将IAU集成到Pandao(从中国订购商品的应用程序)中的经验。

新的API使开发人员可以将应用程序更新为Google Play上可用的最新版本。 这样,IAU可以补充现有的Google Play自动更新机制。 IAU包含几种实施方案,这些方案在用户交互方面根本不同。

  1. Flexible Flow为用户提供了在后台下载更新并在方便的时候安装它的功能。 它适用于用户仍可以使用旧版本但已提供新版本的情况。


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



由于第二个选项不太重要,不太适合Pandao应用程序,因此我们将更详细地分析“灵活流”方案。

IAU的灵活流集成


用例


使用IAU的升级过程包括几个步骤。

  1. 使用Play Core库的应用程序,可在Google Play上检查是否有可用的更新。
  2. 如果是,则应用程序要求Google Play显示IAU对话框。 Google Play向用户显示一个对话框,其中包含要更新的建议。
  3. 如果用户同意,则Google Play在后台下载更新,并在状态栏中向用户显示下载进度。
  4. 如果在后台运行应用程序时下载完成,则Google Play将自动完成安装。 如果此时应用程序处于活动状态,则对于这种情况,有必要确定自己的安装完成逻辑。 请考虑以下情形。
    1. 该应用程序通过向用户显示带有进度指示器的Google Play对话框来启动安装过程。 安装完成后,将启动该应用程序的更新版本。 在这种情况下,建议显示一个附加对话框,允许用户确认他准备立即重新启动应用程序。 这是推荐的实施方案
    2. 该应用程序等待,直到它在后台,然后完成更新。 一方面,从UX的角度来看,这是一种不太麻烦的行为,因为用户与应用程序的交互不会中断。 但另一方面,它要求开发人员实施逻辑以确定应用程序是否在后台。

如果下载的更新的安装未完成,则Google Play可能会在后台完成安装。 最好不要显式使用此选项,因为它不能保证安装更新。

基本测试要求


要在测试设备上手动完成整个更新过程,您必须至少具有两个具有不同程序集编号的应用程序版本: sourcetarget

  • 编号较高的原始版本必须在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添加一个回调函数,该函数将返回有关更新可用性,启动更新的对象(如果有)以及当前下载进度(如果已经开始)的信息。

 // Create instance of the IAUs manager. val appUpdateManager = AppUpdateManagerFactory.create(context) // Add state listener to app update info task. appUpdateManager.appUpdateInfo.addOnSuccessListener { appUpdateInfo -> // If there is an update available, prepare to promote it. if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE) { // ... } // If the process of downloading is finished, start the completion flow. if (appUpdateInfo.installStatus() == InstallStatus.DOWNLOADED) { // ... } } .addOnFailureListener { e -> // Handle the error. } 

要显示用于请求Google Play更新的对话框,必须将接收到的AppUpdateInfo对象传递给AppUpdateInfo方法。

  appUpdateManager.startUpdateFlowForResult( // Pass the intent that is returned by 'getAppUpdateInfo()'. appUpdateInfo, // Or 'AppUpdateType.IMMEDIATE for immediate updates. AppUpdateType.FLEXIBLE, // The current activity. activity, REQUEST_CODE ) 

要监视更新状态,可以将InstallStateUpdatedListener事件侦听器添加到IAUs管理器中。

 // Create a listener to track downloading state updates. val listener = InstallStateUpdatedListener { state -> // Update progress indicator, request user to approve app reload, etc. } // At some point before starting an update, register a listener for updates. appUpdateManager.registerListener(listener) // ... // At some point when status updates are no longer needed, unregister the listener. appUpdateManager.unregisterListener(listener) 

一旦下载了更新(“已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

Source: https://habr.com/ru/post/zh-CN452092/


All Articles