flutter如何设置deeplink

在Flutter中如何设置Deeplink?具体步骤是什么?需要哪些依赖和配置?在Android和iOS平台上分别要如何处理?有没有完整的示例代码可以参考?

2 回复

在Flutter中设置DeepLink需要以下步骤:

  1. 配置AndroidManifest.xml(Android)和Info.plist(iOS),添加URL Scheme和Intent Filter。
  2. 使用uni_linksgo_router等插件处理路由。
  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中设置Deep Link(深度链接)可以通过以下步骤实现:

1. 配置Android端

android/app/src/main/AndroidManifest.xml 中,为启动的Activity添加intent-filter:

<activity
    android:name=".MainActivity"
    android:launchMode="singleTop">
    <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="yourapp"
            android:host="example.com" />
    </intent-filter>
</activity>

yourappexample.com 替换为你的应用标识。

2. 配置iOS端

ios/Runner/Info.plist 中添加:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLName</key>
        <string>yourapp.example.com</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>yourapp</string>
        </array>
    </dict>
</array>

3. Flutter代码处理

使用 uni_links 包处理链接:

  • 添加依赖到 pubspec.yaml
dependencies:
  uni_links: ^0.5.1
  • 在代码中监听链接:
import 'package:uni_links/uni_links.dart';

String? initialLink;
StreamSubscription? sub;

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

Future<void> initUniLinks() async {
  try {
    initialLink = await getInitialLink();
    if (initialLink != null) {
      handleLink(initialLink!);
    }
  } catch (e) {
    print('Error: $e');
  }

  sub = linkStream.listen((String? link) {
    if (link != null) handleLink(link);
  });
}

void handleLink(String link) {
  // 解析链接并导航到对应页面
  print('Handling link: $link');
}

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

4. 测试

通过命令行或生成二维码测试:

adb shell am start -W -a android.intent.action.VIEW -d "yourapp://example.com/path"

确保在真实设备上测试,模拟器可能有限制。

回到顶部