深度链接
当应用接收到新的 URL 时,导航到路由。
深度链接不仅可以打开应用,还可以将用户带到应用“内部”的特定位置。例如,来自运动鞋广告的深度链接可能会打开一个购物应用,并显示该特定鞋子的产品页面。
Flutter 支持 iOS、Android 和 Web 上的深度链接。打开 URL 会在您的应用中显示该屏幕。通过以下步骤,您可以使用命名路由(使用 routes 参数或 onGenerateRoute),或使用 Router 组件来启动和显示路由。
如果您的应用在 Web 浏览器中运行,则无需额外设置。路由路径的处理方式与 iOS 或 Android 深度链接相同。默认情况下,Web 应用使用以下模式从 URL 片段读取深度链接路径:/#/path/to/app/screen,但可以通过 配置应用的 URL 策略来更改。
如果您是视觉学习者,请查看以下视频
开始使用
#要开始使用,请参阅我们针对 Android 和 iOS 的示例代码
从基于插件的深度链接迁移
#如果您已经编写了一个插件来处理深度链接,如 Deep Links and Flutter applications(Medium 上的免费文章)中所述,您应该禁用 Flutter 的默认深度链接处理程序。为此,在 Info.plist 中将 FlutterDeepLinkingEnabled 设置为 false 或 在 AndroidManifest.xml 中将 flutter_deeplinking_enabled 设置为 false。
行为
#行为会根据平台和应用是否启动和正在运行而略有不同。
| 平台 / 场景 | 使用 Navigator | 使用 Router |
|---|---|---|
| iOS(未启动) | 应用获取 initialRoute (“/”),并在短时间内获取 pushRoute | 应用获取 initialRoute (“/”),并在短时间内使用 RouteInformationParser 解析路由并调用 RouterDelegate.setNewRoutePath,从而使用相应的 Page 配置 Navigator。 |
| Android -(未启动) | 应用获取包含路由 (“/deeplink”) 的 initialRoute | 应用获取 initialRoute (“/deeplink”) 并将其传递给 RouteInformationParser 以解析路由并调用 RouterDelegate.setNewRoutePath,从而使用相应的 Pages 配置 Navigator。 |
| iOS(已启动) | 调用 pushRoute | 解析路径,并使用一组新的 Pages 配置 Navigator。 |
| Android(已启动) | 调用 pushRoute | 解析路径,并使用一组新的 Pages 配置 Navigator。 |
当使用 Router 组件时,您的应用能够在应用正在运行时,当打开新的深度链接时替换当前的一组页面。
了解更多
#- 学习 Flutter 的新导航和路由系统 提供了对 Router 系统的介绍。
- Flutter 深度链接深入解析,来自 Google I/O 2023 的视频
- Flutter 深度链接:终极指南,一个逐步教程,展示如何在 Flutter 中实现深度链接。