禁用追踪时Branch SDK深度链接无法获取正确引荐参数求助
Branch.io深度链接禁用追踪后参数异常的解决方案
问题场景
- 应用关闭状态下,Branch深度链接可正常唤起应用,但
InitSessionBuilder的BranchReferralInitListener回调返回参数固定为{"+clicked_branch_link":false,"+is_first_session":false},无法获取实际链接参数 - 应用后台运行时,回调偶尔返回上述无效参数,偶尔返回旧的深度链接参数,无法获取最新链接信息
- 核心触发条件:调用
Branch.getInstance().disableTracking(true)时出现问题;不调用该方法,深度链接功能完全正常,但不符合合规要求
关键原因
Branch SDK的disableTracking(true)会完全禁用用户会话追踪、数据收集功能,连带影响了深度链接参数的会话存储与传递机制——默认情况下,Branch依赖用户会话来关联深度链接点击事件和应用启动/唤醒操作,禁用追踪后会话无法建立,导致回调无法返回正确参数。
解决方案
1. 保留禁用追踪,手动处理深度链接参数
禁用追踪后,Branch不会在会话中存储链接参数,需直接从唤起应用的Intent中解析参数:
// 在Application的onCreate中初始化Branch并禁用追踪 @Override public void onCreate() { super.onCreate(); Branch.getAutoInstance(this); Branch.getInstance().disableTracking(true); } // 在处理深度链接的Activity中,重写onCreate和onNewIntent @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); parseBranchDeepLink(getIntent()); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); parseBranchDeepLink(intent); } private void parseBranchDeepLink(Intent intent) { if (intent == null || intent.getData() == null) return; Uri deepLinkUri = intent.getData(); // 判断是否为Branch链接 boolean isBranchLink = deepLinkUri.getScheme() != null && (deepLinkUri.getScheme().equals("your-app-scheme") || deepLinkUri.getHost().equals("your-branch-host")); if (isBranchLink) { // 手动解析链接中的参数 String targetParam = deepLinkUri.getQueryParameter("your_target_param_key"); // 处理业务逻辑 } // 仍需调用initSession以维持Branch集成的其他功能 Branch.getInstance().initSession(new BranchReferralInitListener() { @Override public void onInitFinished(JSONObject referringParams, BranchError error) { // 这里的referringParams可能无法获取有效链接参数,仅用于处理其他必要逻辑 } }, deepLinkUri, this); }
2. 配置Branch控制台的合规深度链接模式
在Branch控制台中开启“无追踪深度链接”模式:
- 进入你的应用项目,找到Deep Links -> Configuration
- 启用“Privacy-First Deep Linking”选项,确保即使禁用用户追踪,链接参数仍能传递到应用
- 检查Data Passing设置,确认所有需要的链接参数都被标记为“Required”,保证参数不被过滤
3. 适配Android 13/14系统权限与配置
- 确保
AndroidManifest.xml中正确声明android.permission.INTERNET权限 - 验证App Links配置:确保
assetlinks.json已正确部署到你的域名根目录,且AndroidManifest中对应的Activity intent-filter配置正确:
<activity android:name=".DeepLinkActivity"> <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="your-branch-domain" /> <data android:scheme="your-app-scheme" /> </intent-filter> </activity>
4. 排查旧参数缓存问题
应用后台唤醒时返回旧参数,是因为禁用追踪后Branch无法区分新会话,需在每次处理深度链接后清理Intent数据:
private void parseBranchDeepLink(Intent intent) { // 处理参数后,清除Intent中的深度链接数据 intent.setData(null); }
内容的提问来源于stack exchange,提问作者FluffySam
相关产品推荐
相关产品推荐

