Наконец это будет выглядеть так:

я была эта проблема в течение 2 недель. я использовалWix's Navigation для навигации по приложению. Я последовал заэтот урок для реализации Deeplink / универсальная ссылка.

У меня есть базовый класс под названиемBaseScreen где я храню все обработчики DeepLink, как в учебнике. ЭтотBaseScreen будет выглядеть так:

componentDidMount(){
    // this handles the case where the app is closed and is launched via Universal Linking.
    Linking.getInitialURL()
        .then((url) => {
          if (url) {
            // Alert.alert('GET INIT URL','initial url  ' + url)
            this.resetStackToProperRoute(url)
          }
        })
        .catch((e) => {})

   // This listener handles the case where the app is woken up from the Universal or Deep Linking
   Linking.addEventListener('url', this.appWokeUp);
  }

  componentWillUnmount(){
    // Remove the listener
    Linking.removeEventListener('url', this.appWokeUp);
  }

  appWokeUp = (event) => {
    // this handles the use case where the app is running in the background and is activated by the listener...
    // Alert.alert('Linking Listener','url  ' + event.url)
    this.resetStackToProperRoute(event.url)
  }

  resetStackToProperRoute = (url) => {
    // grab the trailing portion of the url so we can use that data to fetch proper information from the server
    let trailing = url.slice(url.lastIndexOf('=') + 1, url.length)
    // go to the desired screen with the trailing token grabbed from the url
    this.props.navigator.resetTo({
      screen: 'NewPassword',
      overrideBackPress: true,
      passProps: {
        token: trailing
      },
      animated: true,
      animationType: 'fade',
      navigatorStyle: {
      navBarHidden: true,
  }
})
  }

Когда приложение запустится, оно покажет экранLoginScreen который расширяетBaseScreen выше. Убив приложение, нажмите на ссылку в письме, приложение запуститсяLoginScreen сначала он будет перенаправлен на экранNewPasswordи после того, как все будет сделано, я перенаправлю обратно наLoginScreen по:

this.props.navigator.resetTo({
  screen: 'LoginScreen',
  animated: true,
  overrideBackPress: true,
  animationType: 'fade',
  navigatorStyle: {
    navBarHidden: true,
  }
})

НоLinking.getInitialURL() изLoginScreen все равно получите старый URL, поэтому он будет перенаправлен наNewPassword снова, и это петля.

Я также пытался передать:passProps: {} вариант когдаresetTo LoginScreen но не повезло.

Я думаю, что единственный способ исправить это - очистить initialUrl вручную после того, как все сделано вNewPassword экран. Слушатель дляBaseScreen должен быть там, потому что если я не убью приложение (просто сверну его), слушатель должен быть запущен, чтобы перейти кNewPassword.

Навигация Wix имеет документ для Deeplink, я попытался положить методonNavigatorEvent(event) вBaseScreen но это не называется. Я не знаю, что я что-то пропустил.

Спасибо за уделенное время. Любая идея будет оценена

Ответы на вопрос(1)

Ваш ответ на вопрос