1

REACT-NATIVE-FCM を使用しています。

私のアプリには、App.js のスタック ナビゲーター内にドロワー ナビゲーターがあります。

通知トレイからの通知クリックで、ユーザーが特定の画面に直接移動できるようにします。

ホームページでの FCM イベントの登録は、アプリが閉じている場合にのみ機能しますが、フォアグラウンドのアプリではイベントは呼び出されません。最後に開いた画面に移動するだけです。

すべての画面で FCM イベントを登録する必要がありますが、これはうまくいきません。したがって、App.js はアプリの初期化中に index.js から呼び出されるため、App.js に FCM イベントを登録するソリューションがありますが、App.js で this.props.navigation.navigate を使用することはできません。

反応ナビゲーションを使用して、スタックが宣言された直後にユーザーをリダイレクトするにはどうすればよいですか。

APP.JS

    const Drawer = DrawerNavigator(
      {
        Dashboard: { screen: Dashboard },
        Screen1: { screen: Screen1 },
         Screen2: { screen: Screen2},
         Screen3: { screen: Screen3},
      },
      {
        navigationOptions: {
          gesturesEnabled: false,
        },
       initialRouteName: "Dashboard",
        contentOptions: {
          activeTintColor: "#e91e63"
        },
        drawerPosition: 'right',
        contentComponent: props => <SideBar {...props} />
      }
    );


    const AppNavigator = StackNavigator(
        {
            Home: { screen: Home },
           Drawer: { screen: Drawer },
            ScreenABC: { screen: ScreenABC },
            ScreenXYZ: { screen: ScreenXYZ }
        },
        {
             headerMode: "none",
        }
    );


    export default () =>
        <Root>
            <AppNavigator />
        </Root>;


    //CALLED WHEN APP IN FOREGROUND
    this.notificationListener = FCM.on(FCMEvent.Notification, async (notif) => {
    //alert('FCM.on: ' + JSON.stringify(notif));
if(notif.routeValue == 1)
{
this.props.navigation.navigate("Screen1")}
    });

    //CALLED WHEN APP IN BACKGROUND
    FCM.getInitialNotification().then(notif => {

       });
4

1 に答える 1

1

どうしても特定の画面に行きたい場合。を呼び出す前に、少なくともナビゲーターの状態をリセットする必要がありますnavigate

または、カスタム アクションを作成し、このアクションをディスパッチして正しいナビゲーターの状態を返すこともできます。

ナビゲーターの状態をホームにリセットする方法は次のとおりです。

export const homeNav = (state, action) => {
  let index;

  let routes;

  switch (action.type) {

 case types.RESET_HOME_NAV:
  routes = [...state.routes];

  for (let index = state.index; index > 0; --index) {
    routes.pop();
  }

  return {
    ...state,
    routes,
    index: 0,
  };

default:
  return NavigatorHome.router.getStateForAction(action, state);
}};
于 2018-02-20T15:33:17.577 に答える