flutter如何实现app link功能

在Flutter中如何实现App Link功能?需要配置哪些Android和iOS的原生设置?有没有具体的代码示例或插件推荐?处理深度链接时需要注意哪些常见问题?

2 回复

在Flutter中实现App Link功能,需在pubspec.yaml添加uni_links依赖。然后在Android的AndroidManifest.xml和iOS的Info.plist中配置URL Scheme和关联域名。最后在Flutter代码中监听链接并处理跳转逻辑。

更多关于flutter如何实现app link功能的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中实现App Link功能(也称为深度链接)主要通过以下步骤实现:

1. 配置Android和iOS原生设置

Android配置:

android/app/src/main/AndroidManifest.xml 中添加intent过滤器:

<activity android:name=".MainActivity">
  <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"
      android:pathPrefix="/path" />
  </intent-filter>
</activity>

iOS配置:

ios/Runner/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>

2. Flutter端处理链接

使用 uni_links 包处理应用内链接解析:

安装依赖:

dependencies:
  uni_links: ^0.5.1

代码实现:

import 'package:uni_links/uni_links.dart';

class DeepLinkHandler {
  StreamSubscription? _sub;

  void initDeepLinks() {
    _sub = getUriLinksStream().listen((Uri uri) {
      handleDeepLink(uri);
    });
  }

  void handleDeepLink(Uri uri) {
    // 根据uri路径处理不同页面
    if (uri.pathSegments.contains('product')) {
      // 跳转到商品页面
      Navigator.pushNamed(context, '/product', arguments: uri.queryParameters['id']);
    }
  }

  void dispose() {
    _sub?.cancel();
  }
}

3. 处理冷启动场景

main.dart 中获取初始链接:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 获取初始链接
  Uri? initialUri = await getInitialUri();
  if (initialUri != null) {
    handleDeepLink(initialUri);
  }
  
  runApp(MyApp());
}

4. 域名验证(Android App Links)

  • https://yourdomain.com/.well-known/assetlinks.json 放置数字资产链接文件
  • 文件内容示例:
{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.yourapp.package",
    "sha256_cert_fingerprints": ["YOUR_APP_SHA256_FINGERPRINT"]
  }
}

注意事项:

  1. 测试时使用 adb 命令:adb shell am start -W -a android.intent.action.VIEW -d "https://yourdomain.com/path"
  2. iOS需要在开发者账户配置Associated Domains
  3. 确保URL Scheme在所有场景下都能正确响应

通过以上配置,即可在Flutter应用中实现完整的App Link功能,支持从网页链接直接跳转到应用指定页面。

回到顶部