基础组件和兼容性
迷你应用是需要超级应用才能运行的小型应用(通常为 2-4 MB)。与超级应用无关的共同之处在于,它们都是使用网络技术 HTML、CSS 和 JavaScript 构建的(“方言”)。迷你应用的运行时是超级应用中的 WebView,而不是使迷你应用能够跨平台实现的底层操作系统。无论超级应用是在 Android、iOS 还是其他操作系统上运行,同一个迷你应用可以在同一个超级应用中运行。不过,并非所有迷你应用都可以在所有超级应用中运行,稍后我们会对此进行详细介绍。
发现广告系列
用户通常会通过带品牌的 2D 条形码临时发现迷你应用,这解决了一个重要的离线到线上挑战,例如,从实体餐厅菜单转到付款迷你应用,或者从实体电动踏板车转到迷你租赁应用。下图展示了这类带品牌标识的 2D 条形码的示例,即直接启动微信迷你版应用微信的微信微信应用演示版 2D 条形码。其他超级应用通常无法识别条形码。
![微信品牌 2D 条形码。](https://web.developers.google.cn/static/articles/mini-apps/mini-app-about/image/wechat-branded-2d-barcode-e6ef7f80e48d8.jpg?authuser=6&hl=uk)
用户也可以通过在超级应用中的常规应用内搜索来发现迷你应用、在聊天消息中分享迷你应用,或出现在新闻信息流中的新闻资讯中。某些超级应用的概念是经过验证的帐号,其资料中可以包含迷你应用。当迷你应用实际上在地理位置上相距不远时,可以突出显示它们(例如用户面前的商家迷你应用);或者当用户在超级应用中显示的地图上查询路线时(例如,当用户在超级应用中显示的地图上查询路线时),可以突出显示迷你应用。在许多超级应用中,可以通过向下滑动的手势或通过超级应用菜单中的特殊部分访问常用的迷你应用。
用户体验
所有超级应用的迷你应用界面基本相同。带有迷你应用名称的可主题化顶栏,在屏幕的上角有一个关闭按钮,最右侧是一个操作菜单,通过该操作菜单可以访问常用功能,例如分享应用、将应用添加到收藏列表或主屏幕、举报滥用应用、提供反馈和设置。下面的屏幕截图显示了一个在支付宝超级应用环境中运行的迷你购物应用,该应用已打开操作菜单。
![运行购物迷你应用的支付宝超级应用,该应用突出显示了顶栏、操作菜单按钮和关闭按钮。操作菜单已打开。](https://web.developers.google.cn/static/articles/mini-apps/mini-app-about/image/the-alipay-super-app-runn-39dde18ae385b.jpg?authuser=6&hl=uk)
界面范式
迷你应用的主导航栏通常有一个底部标签页栏。大多数超级应用提供程序都提供组件,可帮助开发者快速实现常见的界面范例,如轮播、手风琴、进度条、旋转图标、开关、地图等。这也有助于在不同迷你应用之间提供一致的用户体验,这是微信迷你计划设计准则所倡导的。这与 Apple 通过其 Apple 人机接口指南以及 Google 的 Design for Android 建议采取的激励措施类似。
![抖音迷你版应用,展示了抖音滑块(轮播界面)组件,其中包含自动跳转、点指示器等切换开关。](https://web.developers.google.cn/static/articles/mini-apps/mini-app-about/image/the-douyin-demo-mini-app-fbf61969fee88.png?authuser=6&hl=uk)
提供服务
迷你应用不是作为单独的资源逐个提供,而是作为加密的打包应用(即在一个文件中包含所有资源的归档)提供。与常规 Web 应用不同,这些应用也不会由迷你应用创建者的特定来源提供,而是由超级应用提供程序直接提供。它们仍然可以从迷你应用创建工具的服务器访问 API,但核心资源(通常称为应用 shell)必须由超级应用提供程序提供。迷你应用必须声明它们从中请求额外数据的源。
缓存、更新和深层链接
迷你应用保留在超级应用的缓存中,因此当用户下次启动缓存的迷你应用时,它几乎可以即时加载。如果有更新,系统会加载新的应用软件包。版本号可以包含在启动 URI 中(请参阅发现),这样超级应用就能尽早知道本地缓存的版本是否为最新版本。启动 URI 还可以选择包含迷你应用所需的页面,以便深层链接到迷你应用的特定页面。通过站点地图,迷你应用可以声明其哪些页面可被超级应用提供商的迷你应用抓取工具编入索引。
![macOS 访达显示一个包含缓存的微信迷你应用“.wxapkg”文件的文件夹。](https://web.developers.google.cn/static/articles/mini-apps/mini-app-about/image/macos-finder-showing-fol-d1f228bbf9ff2.png?authuser=6&hl=uk)
安全与权限
超级应用提供商会审核迷你应用,这意味着用户会认为它们比 Web 应用更安全。它们需要在清单或迷你应用配置文件中提前声明可能所需的权限,对于某些提供程序,该文件还需要说明需要每项权限的原因。当然,迷你应用仍然会有谎言,但它们很难说明原因,例如在没有用户显而易见的原因的情况下试图访问移动传感器。与网页相比,使用指纹识别用户的动力明显要低得多,因为用户通常已经登录了超级应用(请参阅身份、付款和社交图谱)。
每当迷你应用执行需要特殊权限的操作时,系统都会向用户显示一条提示,如果平台强制执行该提示,其中还会包含开发者所声明的使用理由。下面的屏幕截图显示了抖音演示迷你应用,该应用请求用户授予分享其位置信息的权限。在某些超级应用中,还有一个命令式 API,迷你应用可以利用该 API 请求权限而不立即使用它们,或仅检查权限的状态。这甚至可能包括用于打开中央超级应用权限设置(对应于 Chrome 的网站设置)的 API。迷你应用还必须提前声明可能会从中请求数据的所有服务器的来源。
![抖音迷你演示版应用,其中显示了一个地理定位提示,其中包含两个选项:“不允许”和“允许”。](https://web.developers.google.cn/static/articles/mini-apps/mini-app-about/image/the-douyin-demo-mini-app-bab6b3dbfe49e.png?authuser=6&hl=uk)
使用强大功能
托管超级应用通过 JavaScript 桥接器提供对功能强大的 API 的访问权限,该桥接器会注入超级应用提供的 WebView(请参阅构建块和兼容性)。此 JavaScript 桥接器提供了接入操作系统 API 的钩子。例如,像 getConnectedWifi()
这样的迷你应用 JavaScript 函数(迷你应用能够获取当前活跃 Wi-Fi 网络的名称)在后台通过 Android 的 getConnectionInfo()
API 或 iOS 的 CNCopyCurrentNetworkInfo()
API 来实现。常见超级应用中提供的强大设备 API 的其他示例包括蓝牙、NFC、iBeacon、GPS、系统剪贴板、方向传感器、电池信息、日历访问权限、电话簿访问权限、屏幕亮度控制、文件系统访问权限、用于物理反馈的振动硬件、相机和麦克风访问权限、屏幕录制和屏幕截图创建、网络状态、UDP 套接字、条形码扫描、设备内存信息等。
![微信迷你演示版应用显示一个滑块,该滑块用于控制设备屏幕亮度,已调至最大。](https://web.developers.google.cn/static/articles/mini-apps/mini-app-about/image/the-wechat-demo-mini-app-964b40a49071.png?authuser=6&hl=uk)
访问云服务
许多超级应用还提供对超级应用提供商云服务的“无服务器”访问。除了原始云计算和云存储之外,通常还包含高级任务,例如文本翻译、图片中的对象检测或内容分类、语音识别或其他机器学习任务。迷你应用可以通过广告变现,这些广告通常由超级应用提供商提供。超级应用平台通常还提供云分析数据,因此迷你应用开发者可以更好地了解用户与其应用的互动情况。
身份、付款、社交图谱
迷你应用非常重要的一个功能是,通过超级应用分享身份和社交图谱信息。在广义上,抖音或微信等超级应用最初是作为社交网站开始的,用户拥有(有时甚至是由政府验证的)身份、好友或关注者网络,并且通常还会存储付款数据。例如,购物迷你应用可以直接(有时甚至必须)通过超级应用的付款 API 处理任何付款,并且可以在征得用户同意的情况下获取用户数据(例如送货地址、电话号码和全名),而无需让用户费力地填写表单。下图中显示了在微信中运行的沃尔玛迷你应用,该应用首次打开,用熟悉的面孔问候我。
![Walmart 迷你应用,在“我”标签页上显示作者的面孔和姓名。](https://web.developers.google.cn/static/articles/mini-apps/mini-app-about/image/the-walmart-mini-app-show-87a18e926c07a.png?authuser=6&hl=uk)
迷你应用允许玩家分享自己的成就(例如在游戏中达到最高得分),并通过状态更新向联系人发起挑战,从而极受欢迎。然后,只需点按一下即可安装迷你应用,让用户顺畅地参与竞争,从而扩大其覆盖面。
致谢
本文由 Joe Medley、Kayce Basques、Milica Mihajlija、Alan Kent 和 Keith Gu 审核。