我在 React-Native 应用程序上设置了深层链接。 iOS 运行良好。 在 Android 上,如果应用程序已在后台运行,则深层链接将起作用。 但是,如果应用程序重新启动,深层链接会打开应用程序,但不会触发重定向。 据我所知,该链接可以通过意图在
MainActivity
onCreate()
函数中使用。
当应用程序打开时,我正在处理链接,但在本例中,Linking.getInitialURL()
会生成 null
值。
这里需要注意的是,我有一个 SplashActivity,它被设置为
android.intent.category.LAUNCHER
。
这会传递回 MainActivity(正如我所说,深层链接位于附加内容中)。
我尝试将 MainActivity 作为启动器,但这会导致在触发深层链接时打开应用程序的多个实例,而不是通过主屏幕打开应用程序。
MainActivity 和 SplashActivity 均设置为
android:launchMode="singleTask"
任何人都可以提供有关在 Android 上设置此功能的正确方法的任何见解吗?
您可以在 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);
};
}, [])