我已经在我的 React Native 中实现了共享功能。当我单击应用程序中的共享按钮时,共享菜单将打开,其中包括我的应用程序等。当用户从此共享菜单中选择我的应用程序时,我希望将用户定向到我的 React Native 应用程序中的特定屏幕(例如消息屏幕)。如何在 React Native 中实现这种重定向?
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<queries>
<intent>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="https"/>
</intent>
</queries>
<application android:name=".MainApplication" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" android:allowBackup="true" android:theme="@style/AppTheme">
<meta-data android:name="expo.modules.updates.ENABLED" android:value="false"/>
<meta-data android:name="expo.modules.updates.EXPO_UPDATES_CHECK_ON_LAUNCH" android:value="ALWAYS"/>
<meta-data android:name="expo.modules.updates.EXPO_UPDATES_LAUNCH_WAIT_MS" android:value="0"/>
<activity android:name=".MainActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|uiMode" android:launchMode="singleTask" android:windowSoftInputMode="adjustResize" android:theme="@style/Theme.App.SplashScreen" android:exported="true" android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
<data android:scheme="com.my.AppShare" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="*/*" />
</intent-filter>
</activity>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" android:exported="false"/>
</application>
</manifest>
App.js
import HomeScreen from "./src/components/HomeScreen";
import * as React from "react";
import { NavigationContainer } from "@react-navigation/native";
import { Text, View } from "react-native";
import { createStackNavigator } from "@react-navigation/stack";
const Stack = createStackNavigator();
export default function App() {
const navigationRef = React.useRef(null);
return (
<NavigationContainer ref={navigationRef}>
<Stack.Navigator
initialRouteName="Home"
screenOptions={{ headerShown: false }}
>
<Stack.Screen name="Home" component={HomeScreen} />
<Stack.Screen name="Message" component={MessageScreen} />
</Stack.Navigator>
</NavigationContainer>
);
}
HomeScreen.jsx
export default function HomeScreen() {
const onShare = async () => {
try {
const options = {
title: "Share via",
message: "Check this out!",
url: "http://example.com",
};
Share.open(options);
} catch (err) {
console.log(err);
}
};
return (
<View>
<TouchableOpacity onPress={() => onShare()}>
<Entypo name="share" size={24} color="black" />
<Text>Share</Text>
</TouchableOpacity>
</View>
);
};
MessgeScreen.jsx
export default function MessageScreen({ route, navigation }) {
return (
<View>
<Text>Message Screen</Text>
</View>
);
}
我希望从共享菜单中选择我的应用程序会将用户重定向到我的应用程序中的特定屏幕(例如消息屏幕)。
但是,当我从共享菜单中选择我的应用程序时,它不会重定向到所需的屏幕。相反,它会正常打开应用程序,而无需导航到特定屏幕。我正在寻找一种方法来正确处理此意图并导航到 React Native 中的特定屏幕。
要重定向到特定屏幕,您必须在应用程序中实现深度链接。
不幸的是,我无法为您提供完整的代码,但您可以参考此博客以获取更多信息和示例。