如何解决URL方案对于iOS正常工作,但在React Native中不适用于Android
我已经尝试了几乎所有的解决方案和变体来完成这项工作。可能是我缺少一些琐碎的东西,但我无法弄清楚。
以下是我的AndroidManifest.xml的代码
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.linkup">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CAMERA" />
<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" />
<application
android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:allowBackup="false"
android:usesCleartextTraffic="true"
tools:targetApi="28"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="adjustPan"
android:launchMode="singleTask">
<intent-filter>
<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 android:label="filter_react_native">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.broWSABLE" />
<data android:scheme="linkupcaribbean" android:host="paymentsuccess" />
</intent-filter>
</activity>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>
</manifest>
我也尝试过按照https://developer.chrome.com/multidevice/android/intents中所述从浏览器和应用程序打开'intent:// paymentsuccess /#Intent; scheme = linkupcaribbean; package = com.linkup; end',但这似乎并没有工作。
对此Deep linking react native app on Android和其他类似的内容也进行了尝试。
我从App.js返回以下代码
return (
<Provider store={store}>
{/* {currLang = useSelector((state) => state.language.language)}
{strings.setLanguage(currLang)} */}
<PersistGate persistor={persistor}>
<AppNavigator uriPrefix={'linkupcaribbean://'} />
</PersistGate>
</Provider>
)
在我的导航器中
const AppNavigator = createStackNavigator(
{
Tabs: ShopBottomNavigator,SearchLocation: SearchLocationScreen,SearchByWords: SearchByWordsScreen,discover: discoverScreen,discoverSubCategory: discoverSubCategoryScreen,ShowAllBusiness: ShowAllBusinessScreen,ShowAllBusinessWithFilters: ShowAllBusinessWithFilteRSScreen,BusinessDetail: BusinessDetailStack,ShowAllEvents: ShowAllEventsScreen,ShowAllFavouriteEvents: ShowAllFavouriteEventsScreen,Filters: FilteRSScreen,AddBusiness: AddBusinessScreen,ManagePayments: ManagePaymentsScreen,ShowAllProducts: ShowAllProductsScreen,ShowAllFavouriteProducts: ShowAllFavouriteProductsScreen,EventDetail: EventDetailStack,Notifications: NotificationsScreen,ShowAllDeals: ShowAllDealsScreen,ProductDetail: ProductDetailStack,MyCart: MyCartScreen,OrderDetail: OrderDetailScreen,EditProfile: MyProfileScreen,MyWallet: MyWalletScreen,ManageCard: ManageCardScreen,ShippingAddress: ShippingAddressScreen,PrivacyPolicy: PrivacyPolicyScreen,TermsAndConditions: TermsAndConditionsScreen,AboutApp: AboutAppScreen,GetHelp: GetHelpScreen,ChangePassword: ChangePasswordScreen,AddEditAddress: AddEditAddressScreen,AddReview: AddReviewScreen,Checkout: CheckoutScreen,AddNewCard: AddNewCardScreen,AllReviews: AllReviewsScreen,ShowReview: ShowReviewScreen,DealDetail: DealDetailScreen,PromotionDetail: PromotionDetailScreen,BuyerManagePayment: BuyerManagePaymentScreen,FilterEventScreen: FilterEventScreen,FilterProductScreen: FilterProductScreen,PaymentSuccess: {
screen: PaymentSuccessScreen,path: 'paymentsuccess'
}
},{
defaultNavigationoptions: {
header: null,}
}
);
我正在使用反应导航4
解决方法
根据您的要求进行更改
export const RootNavigator = () => {
const deepLinking = {
prefixes: ['https://www.example.com'],config: {
AuthNavigator: {
initialRouteName: 'Registration',screens: {
Login: {
path: 'Login/:token',params: {
token: '',},};
return (
<NavigationContainer linking={deepLinking}>
<Stack.Navigator screenOptions={{headerShown: false}}>
<Stack.Screen name="Splash" component={Splash} />
<Stack.Screen name="AuthNavigator" component={AuthNavigator} />
<Stack.Screen name="MainNavigator" component={MainNavigator} />
</Stack.Navigator>
</NavigationContainer>
);
};
这是我的authNavigator,以备不时之需
export const AuthNavigator = () => {
return (
<Stack.Navigator
screenOptions={{
headerShown: true,header: ({navigation}) => (
<Header onBackPress={() => navigation.goBack()} />
),}}>
<Stack.Screen
name="OnBoarding"
component={OnBoarding}
options={{headerShown: false}}
/>
<Stack.Screen
name="Registration"
component={Registration}
options={{headerShown: false}}
/>
<Stack.Screen name="Registration1" component={Registration1} />
<Stack.Screen name="Login" component={Login} />
<Stack.Screen name="ForgotPassword" component={ForgotPassword} />
<Stack.Screen name="LocationAccess" component={LocationAccess} />
<Stack.Screen name="AddressDetails" component={AddressDetails} />
</Stack.Navigator>
);
};
并在Android清单中现有的意图过滤器下方添加此意图过滤器
<intent-filter android:label="@string/app_name">
<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="www.example.com"
android:pathPrefix="/Login" />
</intent-filter>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。