React Native - React Navigation Deep Link не работает на Android - PullRequest
0 голосов
/ 28 мая 2020

в настоящее время я работаю над React Native Android Project, я хочу использовать глубокую ссылку на какой-то странице. Но почему-то ссылка всегда перенаправляет на страницу входа, а не на страницу регистрации.

уже пробовали adb shell am start -W -a android.intent.action.VIEW -d "myapp://mobile/signup"

Боюсь, что это неправильно во вложенной навигации.

или я должен поставить путь на весь экран? потому что я не ставлю все это

"response-navigation": "^ 3.11.1" "react-native": "0.60.4"

router. js

const prefix = 'myapp://'
<Navigation ref={(comp) => (this.navigator = comp)} uriPrefix={prefix} />

навигация / индекс. js

const LoginStack = createStackNavigator(
    {
      LoginScreen: { screen: LoginScreen },
      SignUpScreen: { 
        screen: SignUpScreen,
        path: 'signup',
       },
      ForgotPasswordScreen: { screen: ForgotPasswordScreen },
    },
    {
      navigationOptions: { tabBarVisible: false },
    },
    {
      mode: "modal",
      header: null,
      transitionConfig: () => TransitionConfig,
    }
);

const AppNavigator = createBottomTabNavigator(
    {
      Default: {
        screen: HomeStack,
        navigationOptions: {
          tabBarIcon: ({ tintColor }) => (
            <TabBarIcon icon={Images.Icon} tintColor={tintColor} />
          ),
        },
      },
      LoginStack: { 
        screen: LoginStack,
        path: 'login', 
      },
    },
    {
      initialRouteName: 'Default',
      tabBarComponent: TabBar,
      tabBarPosition: "bottom",
      swipeEnabled: false,
      animationEnabled: false,
      tabBarOptions: {
        showIcon: true,
        showLabel: true,
        activeTintColor: Color.tabbarTint,
        inactiveTintColor: Color.tabbarColor,
      },
      lazy: true,
      navigationOptions: {
        gestureDirection: I18nManager.isRTL ? "inverted" : "default",
      },
    }
);

const AuthNavigator = createStackNavigator(
  {
    LoginScreen: { screen: LoginScreen },
    SignUpScreen: { 
      screen: SignUpScreen,
      path: 'signup', 
    },
  },
  {
    mode: "modal",
    header: null,
    transitionConfig: () => TransitionConfig,
  }
);

export default createAppContainer(
  Config.Login.RequiredLogin
    ? createSwitchNavigator(
        {
          AuthLoading: AuthLoadingScreen,
          App: AppNavigator,
          Auth: AuthNavigator,
        },
        {
          initialRouteName: "AuthLoading",
        }
      )
    : AppNavigator
);

AndroidManifest. xml

<activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:exported="true"
        android:launchMode="singleTask"
        android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
        android:windowSoftInputMode="adjustResize">
        <intent-filter>
            <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="myapp" android:host="mobile" />
        </intent-filter>
      </activity>

любая помощь приветствуется :)

1 Ответ

0 голосов
/ 29 мая 2020

У меня была такая же проблема с react-navigation 4.x. так что в итоге я сначала перешел на экран, который я хотел открыть в глубоких ссылках, а затем открыл URL-адрес. В вашем случае, если вы хотите указать go URL-адрес страницы при входе в систему и после некоторого процесса перейти к подписке, вы должны сначала перейти к SignUp, а затем go к URL-адресу. В приведенном ниже коде показана моя кнопка, которая открывает URL-адрес

const goToWebPage = () => {
    props.navigation.navigate('SignUp');
    Linking.canOpenURL(`${paymentUrl}\/${id}`).then(supported => {
        if (supported) {
           Linking.openURL(`${paymentUrl}\/${id}`);
        } 
    });
 } 

. Основная проблема, я думаю, заключается в createSwitchNavigator. перед использованием моего подхода используйте подход https://medium.com/react-native-training/deep-linking-your-react-native-app-d87c39a1ad5e и отключите глубокие ссылки, добавив enableURLHandling={false} в Navigator и удалив uriPrefix={prefix}, поэтому, если это не сработает, используйте мой подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...