我已经成功地在 Flutter 上为我的应用程序设置了深层链接(目前仅在 Android 上),这里是 AndroidManifest.xml 文件中用于设置深层链接的意图过滤器(使用示例主机名和前缀) :
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" android:host="example.com" android:pathPrefix="/prefix"/>
</intent-filter>
这有效,每当我在手机上访问http://example.com/prefix时,它都会建议打开我的应用程序。
现在,我希望能够向深层链接传递参数,也许是像 http://example.com/prefix?code=abc123 这样的 URL 参数。所以我可以从我的 Flutter 应用程序中读取它,例如
getParam('code')
返回 abc123
。
这可能吗?
如果您需要特定域名的更先进的深层链接体验,Google firebase 有一个很棒的产品,名为动态链接,而且是免费的。
Flutter 有一个官方包可以用作 firebase_dynamic_links。
动态链接消除了 DeepLink 的弱点。使用动态链接,您可以以类似的方式处理所有平台(例如 Android、iOS 和 Web)。它将用户从您的移动网站无缝转移到您应用程序中的等效内容(如果用户尚未在她/他的设备上安装您的应用程序,则内容将在应用程序安装后显示)。此外,您可以在 Firebase 控制台中查看动态链接的日志。另一个功能是找出用户点击链接的位置。更多信息
使用 go router 满足您的深度链接需求。它可以处理两种场景。
您可以使用“:”前缀将任何段标记为参数。在 GoRoute 中定义如下:
GoRoute(
path: '/search/:keyword',
builder: (context, state) => const UserScreen(id:state.pathParameters['keyword']),
),
如果你使用经典参数而不是段,在url末尾放置?query=keyword,你可以像这样定义GoRoute:
GoRoute(
path: '/search',
builder: (context, state) => const UsersScreen(filter: state.uri.queryParameters['keyword']),
),