深层链接并不总是在带有 React-Native 的 Android 上工作

问题描述 投票:0回答:1

我在 React-Native 应用程序上设置了深层链接。 iOS 运行良好。 在 Android 上,如果应用程序已在后台运行,则深层链接将起作用。 但是,如果应用程序重新启动,深层链接会打开应用程序,但不会触发重定向。 据我所知,该链接可以通过意图在

MainActivity
onCreate()
函数中使用。 当应用程序打开时,我正在处理链接,但在本例中,
Linking.getInitialURL()
会生成
null
值。

这里需要注意的是,我有一个 SplashActivity,它被设置为

android.intent.category.LAUNCHER
。 这会传递回 MainActivity(正如我所说,深层链接位于附加内容中)。

我尝试将 MainActivity 作为启动器,但这会导致在触发深层链接时打开应用程序的多个实例,而不是通过主屏幕打开应用程序。

MainActivity 和 SplashActivity 均设置为

android:launchMode="singleTask"

任何人都可以提供有关在 Android 上设置此功能的正确方法的任何见解吗?

android react-native react-navigation android-deep-link react-native-splash-screen
1个回答
0
投票

您可以在 AndroidManifest.xml 中尝试一下吗

    <activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
    android:windowSoftInputMode="adjustResize"
    android:launchMode="singleTask"
    android:exported="true">
      <intent-filter android:autoVerify="true">
          <action android:name="android.intent.action.MAIN" />
          <category android:name="android.intent.category.LAUNCHER" />
      </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="myredirecturl" />
      </intent-filter>
  </activity>

在你的 app.js 文件中

useEffect(() => {
    const handleUrl = async ({ url }) => {   
    const checkInitialUrl = async () => {
        const initialUrl = await Linking.getInitialURL();
        if (initialUrl) {   
        }
    };

    Linking.addEventListener('url', handleUrl);

    checkInitialUrl();

    // Add AppState change listener
    const handleAppStateChange = (nextAppState) => {
        if (nextAppState === 'active') {
            // App is in the foreground, check for the URL again
            checkInitialUrl();
        }
    };

    AppState.addEventListener('change', handleAppStateChange);

    // Clean up event listeners on component unmount
    return () => {
        Linking.removeEventListener('url', handleUrl);
        AppState.removeEventListener('change', handleAppStateChange);
    };
}, [])
© www.soinside.com 2019 - 2024. All rights reserved.