构建块和兼容性
迷你应用是需要超级应用才能运行的小型应用(通常为 2-4 MB)。这些组件都使用 Web 技术(HTML、CSS 和 JavaScript)构建而成,这与超级应用无关。迷你应用的运行时是超级应用中的 WebView,而不是底层操作系统,这使得迷你应用具有跨平台特性。无论超级应用是在 Android、iOS 还是其他操作系统上运行,都可以在同一超级应用中运行相同的迷你应用。不过,并非所有迷你应用都可以在所有超级应用中运行,我们将在后面详细介绍这一点。
发现
用户通常会通过带品牌的二维码临时发现迷你应用,这解决了线下到线上的重要问题,例如从实体餐厅菜单跳转到付款迷你应用,或从实体电动滑板车跳转到租赁迷你应用。下图显示了 WeChat 的演示版迷你应用的此类带品牌二维码示例。使用 WeChat 超级应用扫描该二维码后,迷你应用会直接启动。其他超级应用通常无法识别条形码。

您还可以通过超级应用中的常规应用内搜索功能发现迷你应用,在聊天消息中分享迷你应用,或在新闻信息流中看到迷你应用。某些超级应用具有经过验证的账号概念,其个人资料中可以包含迷你应用。当迷你应用在实际地理位置上靠近用户(例如,用户站在某家商店前面,而迷你应用是该商店的迷你应用)或在虚拟位置上靠近用户(例如,用户在超级应用中显示的地图上获取路线时)时,系统会突出显示这些迷你应用。经常使用的迷你应用会显示在应用抽屉中,在许多超级应用中,用户可以通过向下滑动手势或通过超级应用菜单中的特殊版块访问这些迷你应用。
用户体验
所有超级应用的迷你应用界面都大同小异。可设置主题的顶部栏,其中显示迷你应用的名称;屏幕顶角,右上角是关闭按钮,前面是操作菜单,可供访问常用功能,例如分享应用、将其添加到收藏夹或主屏幕、举报滥用行为的应用、提供反馈和设置。以下屏幕截图显示了在打开操作菜单的情况下,在支付宝超级应用上下文中运行的购物迷你应用。

界面范式
迷你应用的主导航栏通常位于底部标签页栏中。大多数超级应用提供商都提供组件,可帮助开发者快速实现常见的界面范式,例如轮播界面、折叠式布局、进度条、旋转图标、开关、地图等。这还有助于确保不同微应用之间的用户体验保持一致,这也是 微信的微应用设计指南所鼓励的做法。这与 Apple 通过 Apple 人机界面准则提供激励,以及 Google 通过 Design for Android 建议提供激励类似。

服务
迷你应用不是作为单独的资源分块提供的,而是作为经过加密的打包应用提供的,也就是说,作为只包含所有资源的一个文件的归档文件提供的。与常规 Web 应用不同,这些应用也不是从迷你应用创建者的特定来源提供,而是直接从超级应用提供商提供。它们仍然可以通过迷你应用创建者的服务器访问 API,但核心资源(通常称为应用 shell)必须由超级应用提供方提供。迷你应用必须声明其请求其他数据的来源。
缓存、更新和深层链接
迷你应用会保存在超级应用的缓存中,因此当用户下次启动缓存的迷你应用时,该应用几乎会立即加载。如果有更新,系统会加载新的应用软件包。版本号可以是启动 URI 的一部分(请参阅发现),这样超级应用就可以尽早知道本地缓存的版本是否仍是最新版本。启动 URI 还可以包含迷你应用的所需页面,因此可以深层链接到迷你应用的特定页面。借助网站地图,迷你应用可以声明哪些网页应由超级应用提供商的迷你应用抓取工具编入索引。

安全与权限
迷你应用需要经过超级应用提供商的审核,这意味着用户会认为迷你应用比 Web 应用更安全。他们需要先在清单或迷你应用配置文件中声明可能需要的权限,对于某些提供程序,还需要说明需要每个权限的原因。迷你应用当然仍然可以说谎,但如果没有向用户提供明显的原因,它们就很难解释为什么要尝试访问动作传感器。与网站相比,获取用户指纹的动机明显要低得多,因为用户通常已经登录了超级应用(请参阅身份、付款和社交图谱)。
每当迷你应用执行需要特殊权限的操作时,系统都会向用户显示提示,如果平台强制执行该操作,则还会显示开发者声明的使用理由。以下屏幕截图显示了 Douyin 演示版迷你应用在向用户请求分享其位置信息时的界面。在某些超级应用中,还有一个命令式 API,迷你应用可以利用该 API 请求权限,但无需立即使用这些权限,或者仅检查权限的状态。这甚至可能包括用于打开中央超级应用权限设置的 API,该设置对应于 Chrome 的网站设置。迷你应用还必须事先声明它们可能会请求数据的所有服务器的来源。

使用强大的功能
托管超级应用通过 JavaScript 桥接(会注入到超级应用提供的 WebView 中)提供对强大 API 的访问权限(请参阅构建块和兼容性)。此 JavaScript 桥接提供了对操作系统 API 的钩子。例如,getConnectedWifi()
等迷你应用 JavaScript 函数(迷你应用获取当前处于活动状态的 Wi-Fi 网络名称的功能)在底层是通过 Android 的 getConnectionInfo()
API 或 iOS 的 CNCopyCurrentNetworkInfo()
API 实现的。常见超级应用中公开的强大设备 API 的其他示例包括蓝牙、NFC、iBeacon、GPS、系统剪贴板、方向传感器、电池信息、日历访问权限、通讯录访问权限、屏幕亮度控制、文件系统访问权限、用于提供实体反馈的振动硬件、相机和麦克风访问权限、屏幕录制和屏幕截图创建、网络状态、UDP 套接字、条形码扫描、设备内存信息等。

对云服务的访问权限
许多超级应用还提供对超级应用提供商云服务的“无服务器”访问权限,除了原始云计算和云存储之外,这些服务通常还包括更高级别的任务,例如文本翻译、图像中的对象检测或内容分类、语音识别或其他机器学习任务。迷你应用可以通过广告创收,这些广告通常由超级应用提供商提供。超级应用平台通常还会提供云分析数据,以便迷你应用开发者更好地了解用户与其应用的互动情况。
身份、付款、社交图谱
微应用的一项非常重要的功能是从超级应用共享的身份和社交图信息。抖音或微信等超级应用最初是广义上的社交网站,用户在其中拥有(有时甚至经过政府验证)的身份、好友或关注者网络,并且通常还存储了付款数据。例如,购物微应用可以(有时甚至必须)直接通过超级应用的付款 API 处理任何付款,并且在征得用户同意后,可以获取用户数据(例如送货地址、电话号码和全名),而无需强迫用户费心填写表单。下图显示了在微信中运行的 Walmart 迷你应用,这是该应用首次打开,并以熟悉的面孔向我致意。

让用户能够分享成就(例如游戏中的高分),并通过状态更新向联系人发起挑战,迷你应用便可广受欢迎。这样一来,用户只需点按一下即可进入比赛,因此无需任何阻碍即可参与比赛,从而扩大迷你应用的覆盖面。
致谢
本文由 Joe Medley、Kayce Basques、Milica Mihajlija、Alan Kent 和 Keith Gu 审核。