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¶m2=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 可以获取到后面拼接的参数
});