You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

禁用追踪时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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 07:53:44