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

React Native Firebase动态链接Android端参数未传递问题咨询

Android端Firebase动态链接参数丢失问题(小米浏览器)

环境信息

"react-native": "0.67.4",
"@react-native-firebase/app": "12.7.4",
"@react-native-firebase/dynamic-links": "12.7.4",

设备: 小米9
浏览器: 小米浏览器
测试链接: https://sweeftdigital.page.link/transfer_tip?userId=3

测试情况

  • 小米浏览器:点击动态链接直接打开App,但未传递userId参数
  • Chrome浏览器:点击后询问打开方式,选择App则参数正常传递

现有配置代码

AndroidManifest配置

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.tipapp"
>

  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.CAMERA" />
  <uses-permission android:name="android.permission.RECORD_AUDIO" />
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.VIBRATE" />
  <uses-feature android:name="android.hardware.camera" android:required="false" />
  <uses-feature android:name="android.hardware.camera.front" android:required="false" />

  <application android:name=".MainApplication"
    android:label="@string/app_name"
    android:icon="@mipmap/ic_launcher"
    android:allowBackup="false"
    android:usesCleartextTraffic="true"
    android:theme="@style/AppTheme"
  >
    <activity android:name=".MainActivity"
      android:exported='true'
      android:label="@string/app_name"
      android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
      android:launchMode="singleTask"
      android:screenOrientation="portrait"
      android:windowSoftInputMode="adjustResize"
    >

      <intent-filter android:autoVerify="true"
      >
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
      </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" />
        <!-- Accepts URIs that begin with "https://www.sweeftdigital.page.link/” -->
        <data android:scheme="https"
          android:host="sweeftdigital.page.link" />
        <!-- Accepts URIs that begin with "tipapp://” -->
        <data android:scheme="tipapp" />
      </intent-filter>

    </activity>
  </application>
</manifest>

React Navigation Deeplink处理代码

const config = {
      screens: {
         webView: {
            path: '/transfer_tip',
            parse: {
               userId: (userId: any) => userId,
            },
         },
         authLoading: '*',
      },
   };

   const linking = {
      prefixes: ['tipapp://', 'https://sweeftdigital.page.link'],
      config: config,
   };
   
    <NavigationContainer
         linking={linking}
      ... 

问题

请问这是配置错误还是Firebase动态链接的正常行为?


问题原因

这是小米浏览器等国产自定义浏览器的跳转逻辑问题,并非Firebase动态链接或你的配置错误。这类浏览器在处理HTTPS动态链接时,可能会直接截取域名部分唤起App,忽略URL后的查询参数,导致参数丢失。

解决方案

  1. 拆分Intent Filter配置
    将HTTPS和自定义Scheme的Intent Filter分开定义,避免浏览器解析冲突:
<!-- 保留原有的Launcher Intent Filter -->
<intent-filter android:autoVerify="true">
  <action android:name="android.intent.action.MAIN" />
  <category android:name="android.intent.category.LAUNCHER" />
  <action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
</intent-filter>

<!-- HTTPS动态链接单独配置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="sweeftdigital.page.link" />
</intent-filter>

<!-- 自定义Scheme单独配置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="tipapp" />
</intent-filter>
  1. 手动监听Firebase动态链接回调
    不依赖React Navigation的自动解析,直接通过Firebase SDK获取完整链接参数:
import dynamicLinks from '@react-native-firebase/dynamic-links';
import { useNavigation } from '@react-navigation/native';
import { useEffect } from 'react';

// 在App入口或根组件中添加监听
const App = () => {
  const navigation = useNavigation();

  useEffect(() => {
    // 获取App启动时的初始链接
    const fetchInitialLink = async () => {
      const initialLink = await dynamicLinks().getInitialLink();
      if (initialLink?.url) {
        const urlParams = new URL(initialLink.url).searchParams;
        const userId = urlParams.get('userId');
        if (userId) {
          navigation.navigate('webView', { userId });
        }
      }
    };

    fetchInitialLink();

    // 监听后台唤起的链接
    const linkSubscription = dynamicLinks().onLink(({ url }) => {
      const urlParams = new URL(url).searchParams;
      const userId = urlParams.get('userId');
      if (userId) {
        navigation.navigate('webView', { userId });
      }
    });

    return () => linkSubscription();
  }, [navigation]);

  // ... 其他组件代码
};
  1. 验证Firebase动态链接配置
    确保Firebase控制台中创建动态链接时,"Deep link"字段包含完整的参数路径(如https://sweeftdigital.page.link/transfer_tip?userId=3),而非仅基础路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:40:36