You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter深度链接在浏览器中无效,如何配置并处理链接参数?

Flutter 唤起应用及参数处理实现方案

一、修正Scheme配置(解决未生效问题)

唤起失败大概率是配置有误,直接按以下方式调整:

iOS端

打开ios/Runner/Info.plist,插入以下配置:

<key>CFBundleURLTypes</key>
<array>
  <dict>
    <key>CFBundleURLSchemes</key>
    <array>
      <string>myapp</string> <!-- 填入你的自定义scheme -->
    </array>
    <key>CFBundleURLName</key>
    <string>myhost</string> <!-- 对应链接中的host字段 -->
  </dict>
</array>

iOS 9及以上系统,可额外添加以下配置避免唤起异常:

<key>LSApplicationQueriesSchemes</key>
<array>
  <string>myapp</string>
</array>

Android端

打开android/app/src/main/AndroidManifest.xml,在主Activity标签内添加intent-filter:

<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="myapp"
        android:host="myhost" />
</intent-filter>

注意:确保该配置和android:name=".MainActivity"的标签对应,不要加错位置。

二、处理唤起链接的code参数

使用uni_links包监听并解析链接参数,步骤如下:

1. 添加依赖

在pubspec.yaml的dependencies节点中添加:

uni_links: ^0.5.1 # 可前往pub.dev获取最新版本号

执行flutter pub get拉取依赖。

2. 实现参数监听逻辑

在主页面的初始化代码中添加监听,示例代码:

import 'package:uni_links/uni_links.dart';
import 'package:flutter/services.dart';

class _HomePageState extends State<HomePage> {
  String? _receivedCode;

  @override
  void initState() {
    super.initState();
    _setupLinkListener();
  }

  Future<void> _setupLinkListener() async {
    // 处理应用冷启动(未打开状态被唤起)的情况
    try {
      final initialLink = await getInitialLink();
      if (initialLink != null) {
        _parseCodeFromLink(initialLink);
      }
    } on PlatformException {
      // 异常处理,可添加日志或提示
    }

    // 处理应用热启动(已打开状态被唤起)的情况
    linkStream.listen((link) {
      if (link != null) {
        _parseCodeFromLink(link);
      }
    }, onError: (err) {
      // 错误处理逻辑
    });
  }

  void _parseCodeFromLink(String link) {
    final uri = Uri.parse(link);
    final code = uri.queryParameters['code'];
    if (code != null) {
      setState(() {
        _receivedCode = code;
      });
      // 此处添加业务逻辑,如跳转页面、调用接口等
      print('获取到的code参数:$code');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('唤起测试')),
      body: Center(child: Text('当前获取的code:$_receivedCode')),
    );
  }
}

三、调试小技巧

  • iOS模拟器:执行命令xcrun simctl openurl booted myapp://myhost/?code=12213,直接唤起应用并传参;真机可在Safari中输入链接测试。
  • Android:执行adb命令adb shell am start -W -a android.intent.action.VIEW -d "myapp://myhost/?code=12213" com.your.package.name,替换com.your.package.name为你的应用包名;真机在浏览器输入链接时,需允许浏览器唤起应用的权限。

内容的提问来源于stack exchange,提问作者Andrii Havrylyak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 18:50:43