如何通过外部链接唤起我们的Flutter app

Android通过deep link或者app link(本文使用deep link),iOS通过 url schema,可以打开对应的app,因此我们需要对我们的app进行对应的配置。

使用外部库:

主要用于监听用户的uri地址

yaml 复制代码
dependencies:
  # app links schema: 
  app_links: ^3.5.0

1. Android

1.1. 实现效果:

1.2. 配置

android/app/src/main/AndroidManifest.xml

xml 复制代码
<activity>
<!-- //... -->
  <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <!-- 下面就是自己自定义的schema和host -->
   <data android:scheme="tradelink"
       android:host="hambit" />
  </intent-filter>
</activity>

1.3. 测试

浏览器输入网址:tradelink://hambit

如果需要携带参数直接拼接到地址后面也可以的:tradelink://hambit?param1=value1&param2=value2

1.4. 监听用户url打开浏览器

lib/main.dart

  • 在程序启动后进行监听,或者其他地方,看业务需求
dart 复制代码
import 'package:app_links/app_links.dart';

//...
final appLinks = AppLinks();
appLinks.allUriLinkStream.listen((uri) {
  print(uri); // 这里的uri就是你在浏览器输入的地址
  // 使用uri.queryParameters 可以获取到后面拼接的参数
});

2. iOS

2.1. 配置

  • 使用Xcode打开项目,新增一个 URL Type
  • 在项目中添加以下代码

ios/Runner/AppDelegate.swift

swift 复制代码
import UIKit
import Flutter
import FirebaseCore
import app_links  // 添加此行

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    FirebaseApp.configure()
    GeneratedPluginRegistrant.register(with: self)
    // 添加以下行
    // ---
    if let url = AppLinks.shared.getLink(launchOptions: launchOptions) {
      AppLinks.shared.handleLink(url: url)
    }
    // ----
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

2.2. 测试

  • 浏览器输入:tradelink:// 或者 tradelink://hambit

  • 或者输入携带参数:tradelink://hambit?name="name"

2.3. 监听用户url打开浏览器

  • 用安卓设置的第4步一致
dart 复制代码
import 'package:app_links/app_links.dart';

//...
final appLinks = AppLinks();
appLinks.allUriLinkStream.listen((uri) {
  print(uri); // 这里的uri就是你在浏览器输入的地址
  // 使用uri.queryParameters 可以获取到后面拼接的参数
});
相关推荐
2501_916007477 分钟前
使用Apple Dashboards显示和自定iOS应用性能指标与数据可视化指南
android·ios·小程序·https·uni-app·iphone·webview
蜡台40 分钟前
# 已解决|MySQL 8\.4\.11 密码正确仍报错1045 \(28000\) Access denied 终极修复方案
android·mysql·adb
JMchen1231 小时前
2026年六款主流AI编程工具深度实测:Cursor、Copilot、Claude Code等对比与选型思考
android·kotlin·copilot·ai编程·开发工具·cursor·claude code
用户38034165882971 小时前
YUV→RGB 的颜色范围与矩阵:画面发灰的真凶
ios
深念Y1 小时前
黑苹果P400-直通显示折腾全记录-20260907
macos·ios·系统·黑苹果·苹果·英伟达·p400
mmsx1 小时前
osmdroid 地图实战 05|让地图动起来:三个实时能力 + 六条工程排雷清单
android
码农coding2 小时前
android12 SystemUI组件之StatusBar启动
android
hai_android2 小时前
Kotlin 协程上下文:从 plus 到 CombinedContext,彻底搞懂左偏结构
android·kotlin
2501_915921432 小时前
抓包工具对比:Charles、TraceEagle、Wireshark、Fiddler 与 Proxyman
网络协议·计算机网络·网络安全·ios·adb·https·udp
淡淡的香烟2 小时前
AndroidKMP之网络请求
android·网络