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

无法接收Firebase动态链接,实现应用平滑跳转求助

解决InAppWebView次级应用平滑返回主应用并接收链接的问题

1. 配置主Activity的启动模式与Intent Filter

将主Activity的启动模式设为singleTask或singleTop,保证返回时复用后台已有实例而非新建。同时在AndroidManifest.xml中配置匹配目标链接的Intent Filter:

<activity
    android:name=".MainActivity"
    android:launchMode="singleTask"> <!-- 核心:复用后台实例 -->
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- 匹配自定义Scheme/Host -->
        <data
            android:scheme="your-custom-scheme"
            android:host="your-target-host" />
        <!-- 若用Firebase动态链接,添加对应域名配置 -->
        <data
            android:scheme="https"
            android:host="your-dynamic-link-domain.page.link" />
    </intent-filter>
</activity>

2. 拦截次级应用跳转,直接唤起主Activity

在InAppWebView的shouldOverrideUrlLoading回调中,拦截返回主应用的目标链接,通过Intent直接唤起主Activity,避免调用外部浏览器:

webView.webViewClient = object : WebViewClient() {
    override fun shouldOverrideUrlLoading(
        view: WebView?,
        request: WebResourceRequest?
    ): Boolean {
        val targetUrl = request?.url.toString()
        // 判断是否为返回主应用的链接
        if (targetUrl.startsWith("your-custom-scheme://your-target-host") ||
            targetUrl.startsWith("https://your-dynamic-link-domain.page.link")) {
            val intent = Intent(Intent.ACTION_VIEW, Uri.parse(targetUrl))
            // 设置Flags确保回到后台已运行的实例
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP)
            startActivity(intent)
            return true // 拦截WebView默认跳转逻辑
        }
        return super.shouldOverrideUrlLoading(view, request)
    }
}

3. 在主Activity中接收并处理链接数据

由于使用singleTask模式,主Activity不会重新创建,需在onNewIntent方法中接收链接参数并触发对应逻辑(比如跳转至汇总页):

override fun onNewIntent(intent: Intent?) {
    super.onNewIntent(intent)
    intent?.data?.let { uri ->
        // 解析链接参数,例如支付状态
        val paymentStatus = uri.getQueryParameter("status")
        if (paymentStatus == "completed") {
            // 执行跳转到汇总页的逻辑
            startActivity(Intent(this, SummaryActivity::class.java))
        }
    }
}

4. Firebase动态链接接收问题排查

若仍需使用Firebase动态链接,确保:

  • 已在Firebase控制台完成App Links配置,assetlinks.json文件放置在域名根目录,且通过Google Search Console验证域名所有权。
  • 动态链接的Intent Filter与主Activity的启动模式配置匹配。

关键注意事项

  • 避免使用FLAG_ACTIVITY_NEW_TASK,否则会创建新的Activity实例,无法恢复后台状态。
  • 次级应用中的跳转需直接使用目标Scheme/URL,避免通过window.open触发外部浏览器,可通过JS调用Android原生方法触发Intent。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:50:40