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

Firebase Dynamic Links无法获取invitedby参数问题求助

解决Firebase动态链接在APP内无法获取invitedby参数的问题

我之前开发邀请奖励功能时,完完全全碰到过和你一样的坑!浏览器里打开短链能看到完整的invitedby参数,但APP里用getDynamicLink拿到的却是短链本身,根本取不到参数,当时折腾了好一阵子才搞定。

先说说可能的原因和对应的解决方法:

1. 生成链接时参数没正确编码

如果你的手机号包含+或者其他特殊字符,直接拼接进链接会导致Firebase解析时出错。虽然浏览器能自动处理,但APP内的Firebase SDK可能无法正确解析出参数。

修改生成链接的代码,对手机号进行URL编码:

String encodedPhone = Uri.encode(user.getPhone());
String link = "https://samplelink.com/?invitedby=" + encodedPhone;

2. AndroidManifest的Intent-Filter配置有误

Firebase动态链接需要你的APP能正确接收对应的链接请求,如果Manifest里的配置不对,SDK就无法自动解析短链到原始长链。

检查你的Activity(处理链接的那个)里的Intent-Filter,确保包含以下配置:

<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:scheme="https" android:host="q7rxq.app.goo.gl"/>
    <!-- 同时匹配原始链接的域名,确保万无一失 -->
    <data android:scheme="https" android:host="samplelink.com"/>
</intent-filter>

3. getDynamicLink的调用时机不对

如果你的APP已经在后台运行,点击动态链接会触发onNewIntent而不是onCreate,如果只在onCreate里调用getDynamicLink,就会错过解析链接的时机。

把解析代码移到一个公共方法里,在onCreate和onNewIntent里都调用:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    handleDynamicLink(getIntent());
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
    handleDynamicLink(intent);
}

private void handleDynamicLink(Intent intent) {
    FirebaseDynamicLinks.getInstance()
        .getDynamicLink(intent)
        .addOnSuccessListener(this, pendingDynamicLinkData -> {
            Uri deepLink = null;
            if (pendingDynamicLinkData != null) {
                deepLink = pendingDynamicLinkData.getLink();
            }
            
            FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
            if (user == null && deepLink != null) {
                String referrerUid = deepLink.getQueryParameter("invitedby");
                // 这里先打印确认一下referrerUid是否存在
                Log.e(TAG, "Referrer UID: " + referrerUid);
                if (referrerUid != null) {
                    createAnonymousAccountWithReferrerInfo(referrerUid);
                }
            }
        });
}

4. 手动兜底解析短链

如果以上方法都不行,那就手动对短链进行二次解析,强制获取原始链接:

private void handleDynamicLink(Intent intent) {
    FirebaseDynamicLinks.getInstance()
        .getDynamicLink(intent)
        .addOnSuccessListener(this, pendingDynamicLinkData -> {
            Uri deepLink = null;
            if (pendingDynamicLinkData != null) {
                deepLink = pendingDynamicLinkData.getLink();
            }
            
            if (deepLink != null && deepLink.getHost().equals("q7rxq.app.goo.gl")) {
                // 说明拿到的是短链,手动解析一次
                FirebaseDynamicLinks.getInstance().getDynamicLink(deepLink)
                    .addOnSuccessListener(pendingData -> {
                        if (pendingData != null) {
                            Uri originalLink = pendingData.getLink();
                            String referrerUid = originalLink.getQueryParameter("invitedby");
                            if (referrerUid != null) {
                                createAnonymousAccountWithReferrerInfo(referrerUid);
                            }
                        }
                    });
            } else {
                FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                if (user == null && deepLink != null) {
                    String referrerUid = deepLink.getQueryParameter("invitedby");
                    if (referrerUid != null) {
                        createAnonymousAccountWithReferrerInfo(referrerUid);
                    }
                }
            }
        });
}

最后再检查一个点:

去Firebase控制台的动态链接页面,确认你配置的动态链接域名(q7rxq.app.goo.gl)是正确的,并且已经关联到你的APP项目。

按照这些步骤排查,应该就能解决问题了!

内容的提问来源于stack exchange,提问作者Uncle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:51:46