微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

URL方案对于iOS正常工作,但在React Native中不适用于Android

如何解决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 举报,一经查实,本站将立刻删除。