如何在Flutter中通过Branch.io获取App安装后的深度链接数据?
可行性确认
完全可行,Branch.io原生支持**延迟深度链接(Deferred Deep Linking)**场景——用户未安装应用时点击链接跳转应用商店,安装完成首次启动后,能获取到原链接携带的所有自定义参数(包括你需要的openId)。
具体实现步骤
假设你使用的是Flutter社区常用的branch_io插件,按以下步骤操作:
1. 核对基础配置(避免遗漏)
虽然你已完成基础配置,再确认以下关键项:
- iOS:在
Info.plist中配置Associated Domains,格式为applinks:<你的Branch域名>(例如applinks:your-app.app.link);确保LSApplicationQueriesSchemes包含itms-apps和branch。 - Android:在
AndroidManifest.xml中配置正确的Intent Filter,关联你的Branch域名和自定义Scheme;确保添加了含Branch Key的Meta Data。
2. Flutter端代码实现
2.1 添加插件依赖
在pubspec.yaml中添加依赖:
dependencies: branch_io: ^latest_version # 替换为插件最新版本号
2.2 初始化并获取延迟链接数据
在应用启动的最早期阶段(比如main函数)完成Branch初始化,通过getInitialLink方法获取链接数据——这个方法同时覆盖「已安装应用时打开链接」和「安装后首次启动获取延迟链接」两种场景:
import 'package:flutter/material.dart'; import 'package:branch_io/branch_io.dart'; void main() async { // 初始化Flutter绑定 WidgetsFlutterBinding.ensureInitialized(); // 初始化Branch,替换为你的Branch Key await BranchIO.init('YOUR_BRANCH_KEY'); // 获取初始链接数据(包含延迟深度链接) final branchLinkData = await BranchIO.getInitialLink(); if (branchLinkData != null) { // 解析自定义参数openId final openId = branchLinkData.data['openId']; if (openId != null) { // 这里处理openId逻辑:比如跳转指定页面、存入本地存储等 debugPrint('获取到openId: $openId'); } } runApp(const MyApp()); }
2.3 可选:监听应用运行时的链接跳转
如果需要处理应用在前台/后台时点击链接的场景,可添加流监听:
// 在StatefulWidget的initState中添加 @override void initState() { super.initState(); BranchIO.linkStream.listen((linkData) { final openId = linkData.data['openId']; if (openId != null) { // 处理运行时的链接参数 } }); }
测试注意事项
- 必须使用真实设备测试:模拟器无法完整模拟「跳转应用商店-安装-首次启动」的流程。
- 使用Branch官方生成的测试链接:在Branch仪表盘创建测试链接,通过短信/邮件发送到测试设备,点击后完成安装启动流程,验证是否能获取到
openId。 - 避免直接复制链接到浏览器打开:部分浏览器可能无法正确触发Branch的延迟链接逻辑,建议用系统自带的短信/邮件应用点击链接。
内容的提问来源于stack exchange,提问作者Nijat Namazzade
相关产品推荐
相关产品推荐

