字
字节笔记本
2026年2月19日
appscheme:Flutter 自定义 Scheme URL 深度链接插件
本文介绍 appscheme,一个 Flutter 插件,用于实现 Android 和 iOS 的自定义 Scheme URL 方案,支持深度链接功能。
appscheme 简介
appscheme 是一个 Flutter 插件,用于实现自定义 URL Scheme 方案,允许外部应用或网站通过特定 URL 打开应用并传递数据。该插件支持 Android 和 iOS 双平台。
核心定位:Android、iOS 自定义 Scheme URL 方案
基本信息
- 插件名称:appscheme
- 当前版本:1.0.1(最新版 1.2.0)
- 发布日期:2021年6月5日
- 发布者:dsfgx.com
- 平台支持:Android、iOS
- Pub.dev:https://pub.dev/packages/appscheme
核心功能
appscheme 使 Flutter 应用能够处理自定义 URL Scheme,实现:
- 深度链接:从外部应用或网页打开应用
- 数据传递:通过 URL 参数传递数据
- 应用冷启动处理:获取启动应用的 Scheme
- 运行时监听:应用运行中接收 Scheme 事件
安装配置
添加依赖
在 pubspec.yaml 中添加:
yaml
dependencies:
appscheme: ^1.2.0然后执行:
bash
flutter pub getAndroid 配置
在 AndroidManifest.xml 中添加 intent-filter:
xml
<activity android:name=".MainActivity">
<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:host="hong.com"
android:path="/product"
android:scheme="app" />
</intent-filter>
</activity>iOS 配置
在 Info.plist 中添加:
xml
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>hong.com/product</string>
<key>CFBundleURLSchemes</key>
<array>
<string>app</string>
</array>
</dict>
</array>使用方法
初始化
dart
import 'package:appscheme/appscheme.dart';
AppScheme appScheme = AppSchemeImpl.getInstance();获取初始 Scheme(应用冷启动)
dart
appScheme.getInitScheme().then((value) {
if (value != null) {
// 处理 Scheme 数据
String dataString = value.dataString;
print('初始 Scheme: $dataString');
// 解析参数
Uri uri = Uri.parse(dataString);
String? productId = uri.queryParameters['productId'];
}
});获取最新 Scheme
dart
appScheme.getLatestScheme().then((value) {
if (value != null) {
print('最新 Scheme: ${value.dataString}');
}
});监听 Scheme 事件(应用运行时)
dart
StreamSubscription? _schemeSubscription;
void initSchemeListener() {
_schemeSubscription = appScheme.registerSchemeListener().listen((event) {
if (event != null) {
print('收到 Scheme: ${event.dataString}');
// 处理跳转逻辑
handleScheme(event.dataString);
}
});
}
void dispose() {
_schemeSubscription?.cancel();
}完整示例
dart
import 'package:flutter/material.dart';
import 'package:appscheme/appscheme.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
AppScheme? _appScheme;
String _schemeData = '等待接收 Scheme...';
@override
void initState() {
super.initState();
_initAppScheme();
}
void _initAppScheme() {
_appScheme = AppSchemeImpl.getInstance();
// 获取初始 Scheme
_appScheme?.getInitScheme().then((value) {
if (value != null) {
setState(() {
_schemeData = '初始: ${value.dataString}';
});
}
});
// 监听 Scheme 事件
_appScheme?.registerSchemeListener().listen((event) {
if (event != null) {
setState(() {
_schemeData = '收到: ${event.dataString}';
});
}
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('App Scheme 示例')),
body: Center(
child: Text(_schemeData),
),
),
);
}
}URL 格式
<scheme>://<host>:<port>/<path>?<query>
示例:
openapp://hhong:80/product?productId=10000007
解析:
scheme: openapphost: hhongport: 80path: /productquery: productId=10000007
测试方法
可以使用在线测试工具验证 Scheme 配置:
测试 URL:https://api.dsfgx.com/a.html
或在终端使用 adb 测试:
bash
adb shell am start -W -a android.intent.action.VIEW -d "app://hong.com/product?productId=123"适用场景
应用间跳转
- 从浏览器打开应用
- 从其他应用跳转到本应用
- 推送通知点击跳转
数据传递
- 分享内容到应用
- 通过链接携带参数
- 推广链接追踪
深度链接
- 商品详情页直达
- 特定功能页面跳转
- 邀请注册流程
注意事项
- Dart 3 兼容性:1.0.1 版本与 Dart 3 不兼容,建议使用最新版 1.2.0
- 平台差异:Android 和 iOS 的配置方式不同
- Scheme 唯一性:确保 Scheme 名称不会与其他应用冲突
总结
appscheme 是一个实用的 Flutter 深度链接插件,其核心优势包括:
- 双平台支持:同时支持 Android 和 iOS
- 简单易用:API 简洁,易于集成
- 功能完整:支持冷启动和运行时两种场景
- 文档齐全:配置说明详细
对于需要实现应用间跳转、深度链接功能的 Flutter 应用来说,这是一个不错的选择。
分享: