绝大多数用户在安装时都不需要的功能最适合设置为按需模块。下面列举了几个示例来说明哪些应用功能适合作为按需模块:
- 在应用中编辑和上传视频(绝大多数用户只会观看视频)
- 在应用中添加食谱(大多数用户只会浏览并学习其他人的食谱)
- 帮助和支持功能(大多数用户不会寻求帮助,或者不会在应用中寻求帮助)
- 不太常用的功能(如提供详细的错误捕捉和报告功能)所依赖的大型库
- 特定的付款或结账功能
- 分辨率极高的媒体内容或 VR/AR 功能
通常情况下,按需模块相对较小(小于 10MB),如果不遇到网络问题或其他故障,用户都可以非常快速地下载和使用这些模块。也就是说,用户体验通常与模块随同应用一起安装的情况没有什么不同。
本页介绍了可帮助您实现以下目标的最佳做法:
- 确保您的用户了解并觉得能够掌控不能立即加载的大型模块的下载情况或模块安装错误。
- 进一步优化模块分发体验,尤其是在您可以预期用户需要特定模块的情况下。
阅读完本指南后,请尝试通过 Play Core API 示例应用了解这些最佳做法的实际应用。
让用户知情
当某项功能并不是立即可用时,您应该通知用户。如果用户决定从 Google Play 下载该功能,应显示下载的进度。
您可以监控请求状态,以显示下载进度和安装状态。不过,您要显示的界面类型可能取决于下载内容的大小:
- 如果模块较小(约 10MB 或更小),安装起来非常快,不妨考虑显示旋转图标等指示器或简短的“正在下载内容”消息。
- 如果模块较大,可能需要几秒钟或更长的时间才能完成下载和安装,不妨考虑显示下载和安装进度条,如图 1 所示。
图 1. 在下载和安装按需功能时显示消息和进度条
恰当地传达安装延迟和故障
如果下载失败或进度比预期要慢,应清晰明确地向用户传达所发生的情况以及他们可以采取的措施,如图 2 和图 3 所示。例如,如果您监控下载请求的状态,并且您的应用收到了 API_NOT_AVAILABLE
错误,应通知用户他们的设备不支持按需下载。
![](https://developer.android.google.cn/static/studio/images/projects/dynamic-delivery/failed_download.png?authuser=19&hl=hi)
图 2. 让用户知道此时无法安装某项功能的原因
![](https://developer.android.google.cn/static/studio/images/projects/dynamic-delivery/large_download.png?authuser=19&hl=hi)
图 3. 向用户说明为什么下载某项功能所用的时间可能比预期要长
在征求下载大型模块的许可之前,先介绍一下模块的价值
如果按需模块较大(大于 150MB),Google Play 会要求在下载该模块之前先征得用户同意。
在您请求下载模块的许可之前,应先向用户说明模块的价值。帮助他们理解您为什么向他们提出这一请求,就像请求应用权限许可时一样。开诚布公地与用户交流可提高他们接受下载的可能性。
例如,假设您要构建一个电子商务应用,其中一项功能允许用户使用增强现实 (AR) 技术将家具直接放置在他们的公寓内。您可以添加一条消息,例如“您想看看新沙发放在客厅的效果吗?那就立即安装增强现实查看器吧。”
在后台执行下载和安装
模块下载和安装应始终在后台进行。也就是说,当用户等待某项功能变为可用时,您应允许他们继续使用应用的其他部分。当该功能可用时,您应提供一条通知,允许用户自行决定是否切换到该功能。
如图 5 所示,用户可以继续使用应用,并在按需功能安装完毕时收到通知。
图 5. 不要在模块安装完成时突然更改用户的上下文,而是通知用户所请求的功能已可供使用。
当模块可供使用时,通知用户并让他们选择是否启动该功能。此模式可让用户了解具体环境并控制他们的体验。
在某些情况下,您可以在相关功能可供使用后立即启动该功能。不过,由于这样可能会中断用户的体验,因此请仔细考虑此行为是否符合预期且适当。
不再需要模块时释放设备存储空间
所有功能模块都可以单独卸载,这项功能非常有用。如果不再使用某个功能模块,您可以通过请求 Google Play 卸载该模块以减小应用在用户设备上的大小。
例如,您的应用可能具有功能强大的新手入门流程,其中或许包含富媒体。当用户完成新手入门流程或已经活跃了一段时间后,您可以使用 Play Feature Delivery API 请求 Google Play 仅卸载应用中的该组件。
请注意,您也可以稍后卸载首次安装应用时添加的模块。例如,当用户首次使用您的应用时,培训新用户如何使用该应用的模块非常有用。不过,为了减小应用大小,您可以在他们完成培训后卸载该模块。
高级提示
通常,您需要处理这样的情况:用户明确表示有意使用按需功能模块的功能。
不过,您可能希望在用户向您发出想要使用某项功能的信号之前预测用户何时很可能会与该功能进行互动。以可让您下载和制作烹饪食谱的应用为例,以下准则说明了如何通过预测用户需求来优化模块分发体验。
预测用户在当前会话中对某项功能的需求。考虑一下,用户是否仅在想制作自己的食谱并与社区分享时才需要在食谱应用中创建账号。您可以根据创建账号这一操作判断用户很可能想添加自己的食谱,并在用户点按“添加食谱”之前开始下载相应功能模块。您可以将此方法应用于用户在应用中的其他操作体验,以使功能下载流程更加顺畅。
预测用户在将来的会话中对该功能的需求。如果您不需要应用立即下载并安装按需模块,可以将安装操作延迟到应用在后台运行时再执行,并且 Google Play 会为您处理下载和安装操作。例如,假设您要在烹饪应用中推出新的季节性食谱,这些食谱在用户的当前会话中优先级并不高。您可以请求 Play 在该应用于后台运行时下载并安装这些食谱。这对于当时不需要但将来很可能需要的较大功能(大于 10MB)特别有用。
在安装应用之前预测用户对某项功能的需求。您可能希望添加对按条件分发的支持,以便在安装时根据用户所在国家/地区、设备硬件功能和 API 级别包含您的功能。例如,您可能希望将使用猪肉的食谱包含在按条件分发的模块中,并在大多数人忌吃猪肉的地区从应用安装中省略该模块。