flutter如何实现deeplink功能

在Flutter中如何实现DeepLink功能?需要支持Android和iOS平台,能否提供一个完整的实现示例?具体需要配置哪些文件和代码?如何处理动态链接的参数传递和路由跳转?

2 回复

在Flutter中实现DeepLink功能需以下步骤:

  1. 配置AndroidManifest.xml和Info.plist,添加URL Scheme和Intent Filter。
  2. 使用uni_linksurl_launcher包处理链接。
  3. 在Flutter中监听链接事件,解析参数并导航到对应页面。

示例代码:

import 'package:uni_links/uni_links.dart';

void initUniLinks() {
  getInitialLink().then((uri) {
    // 处理初始链接
  });
  linkStream.listen((uri) {
    // 处理后续链接
  });
}

更多关于flutter如何实现deeplink功能的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中实现DeepLink(深度链接)功能主要涉及以下几个步骤:

1. 添加依赖

pubspec.yaml 中添加 uni_links 插件:

dependencies:
  uni_links: ^0.5.1

运行 flutter pub get 安装。

2. 配置平台

  • Android
    AndroidManifest.xml<activity> 标签内添加 intent-filter

    <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="yourapp" android:host="example" />
    </intent-filter>
    
  • iOS
    Info.plist 中添加 CFBundleURLTypes

    <key>CFBundleURLTypes</key>
    <array>
      <dict>
        <key>CFBundleURLName</key>
        <string>yourapp</string>
        <key>CFBundleURLSchemes</key>
        <array>
          <string>yourapp</string>
        </array>
      </dict>
    </array>
    

3. 处理链接

在Flutter代码中监听和处理链接:

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

String? _initialLink;
StreamSubscription? _sub;

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

Future<void> initUniLinks() async {
  // 获取初始链接
  try {
    _initialLink = await getInitialLink();
    if (_initialLink != null) {
      _handleLink(_initialLink!);
    }
  } on PlatformException catch (e) {
    print("初始链接错误: $e");
  }

  // 监听链接变化
  _sub = linkStream.listen((String? link) {
    if (link != null) _handleLink(link);
  }, onError: (err) {
    print("链接监听错误: $err");
  });
}

void _handleLink(String link) {
  // 解析链接并跳转到对应页面
  print("处理链接: $link");
  // 例如:yourapp://product/123 -> 跳转到商品详情页
}

@override
void dispose() {
  _sub?.cancel();
  super.dispose();
}

4. 测试链接

  • 安卓:adb shell am start -W -a android.intent.action.VIEW -d "yourapp://example/product/123"
  • iOS:在Safari中输入 yourapp://example 测试

注意事项:

  • 确保链接格式与配置的 schemehost 一致
  • 处理冷启动(getInitialLink)和热启动(linkStream)场景
  • 对于Web环境,需使用 url_launcher 配合处理

通过以上步骤,即可在Flutter应用中实现基本的DeepLink功能。

回到顶部