我使用react-navigation进行了相当简单的设置,它利用了一个接受参数paramSignIn的switch导航器来设置初始路由,如下所示:
const uriPrefix =
Platform.OS === 'android'
? 'myApp://myApp/'
: 'myApp://'
const createRootNavigator = (signedIn = false) => (
createSwitchNavigator({
LoginNav,
AllNav: { screen: AllNav, uriPrefix, path: '' }
}, {
initialRouteName: signedIn ? 'AllNav' : 'LoginNav',
})
);
然后我在RootContainer中称呼它:
const Nav = Navigation(isLoggedIn);
return (
<Nav />
)
在iOS上,此uriPrefix可以正常工作,我可以使用带有链接的Linking.openURL()
链接到屏幕。
在Android上不起作用。我可以使它在Android上运行,而无需使用switchNavigator并仅导出LoginNav和AllNav,但我仍然需要switchNavigator。
我遵循了此处的说明:https://reactnavigation.org/docs/en/deep-linking.html,但是无法以其定义的方式传递uriPrefix。我发现,至少对于iOS,我能够在switchNavigator中进行定义,但对Android而言,它却无法正常工作。
看起来像是反应导航中的错误:https://github.com/react-navigation/react-navigation/issues/5027https://github.com/react-navigation/react-navigation/issues/4913
[这里有一些解决方法可能会有所帮助,我最终将所有导航更改为堆栈导航以支持深度链接=(