flutter如何监听app_links打开网页

在Flutter中如何监听app_links打开网页?我在使用uni_links插件时,发现Android和iOS的配置方式不同,但不知道具体如何实现。比如,在AndroidManifest.xml和Info.plist中需要添加哪些配置?另外,如何在Flutter代码中正确捕获和处理传入的URL链接?希望能提供一个完整的示例代码,包括初始化和事件监听部分。

2 回复

在Flutter中监听app_links打开网页,需使用uni_linksurl_launcher插件。步骤如下:

  1. 添加依赖到pubspec.yaml
  2. 配置Android的AndroidManifest.xml和iOS的Info.plist
  3. 使用getInitialLink获取初始链接,linkStream监听后续链接变化。

示例代码:

import 'package:uni_links/uni_links.dart';

void initUniLinks() {
  getInitialLink().then((String? link) {
    // 处理初始链接
  });

  linkStream.listen((String? link) {
    // 监听链接变化
  });
}

更多关于flutter如何监听app_links打开网页的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中监听 app_links 打开网页,可以使用 app_linksuni_links 插件。以下是使用 app_links 插件的步骤:

1. 添加依赖

pubspec.yaml 中添加:

dependencies:
  app_links: ^5.0.1

2. 配置平台

  • Android:在 AndroidManifest.xml<activity> 标签内添加:
    <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="https" android:host="yourdomain.com" />
    </intent-filter>
    
  • iOS:在 Info.plist 中添加:
    <key>CFBundleURLTypes</key>
    <array>
      <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLName</key>
        <string>yourdomain.com</string>
        <key>CFBundleURLSchemes</key>
        <array>
          <string>https</string>
        </array>
      </dict>
    </array>
    

3. 代码实现

import 'package:app_links/app_links.dart';

class AppLinkHandler {
  final AppLinks _appLinks = AppLinks();

  void initAppLinks() {
    // 监听初始链接
    _appLinks.getInitialAppLink().then((uri) {
      if (uri != null) {
        _handleDeepLink(uri);
      }
    });

    // 监听后续链接变化
    _appLinks.uriLinkStream.listen((uri) {
      _handleDeepLink(uri);
    });
  }

  void _handleDeepLink(Uri uri) {
    print('收到深度链接: ${uri.toString()}');
    // 根据 uri 路径处理不同页面
    if (uri.path == '/product') {
      // 跳转到商品页面
    }
  }
}

// 在 main 中初始化
void main() {
  WidgetsFlutterBinding.ensureInitialized();
  AppLinkHandler().initAppLinks();
  runApp(MyApp());
}

注意事项

  • yourdomain.com 替换为你的实际域名。
  • 测试时确保设备支持深度链接(如真机测试)。
  • 对于 HTTP 链接,Android 和 iOS 可能需要额外配置。

使用这种方式,当用户点击指向你应用的链接时,应用会自动打开并触发对应的处理逻辑。

回到顶部