带有反应导航的深层链接不起作用

时间:2019-04-05 22:01:16

标签: javascript reactjs react-native react-navigation deep-linking

实际上,我正在使用react-navigation 3.1.5在react-native 0.58上开发一个应用程序,但是我无法使我的应用程序正常运行。

这是我的代码:

app-navigation.js

const MainStack = createBottomTabNavigator({
  Home: { screen: Home },
  Pets: { screen: Pets, path: 'spidersecurity://terque/pets' },
  Notifications: { screen: UserNotifications },
  UpdateUser: { screen: UpdateUser },
});

const AppStack = createStackNavigator({
  MainStack: { screen: MainStack, path: '' },
  PetStack: { screen: PetStack }
});

const Main = createSwithNavigator({
  App: { screen: AppStack, path: '' }
});

基本上这是我的导航结构。我已将AndroidManifest.xml设置为以下内容:

<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="spidersecurity" android:host="terque" />
</intent-filter>

而且,当我打开地址为spidersecurity://terque/pets的链接时,此链接会打开应用程序,但不会导航到指定的屏幕。我不知道自己是否做得不好,但是我读过很多页面和博客都没有成功。

  

注意:已验证“ spidersecurity:// terque / pets”是否为路由匹配项,因为我在获取链接时在代码中添加了console.log

2 个答案:

答案 0 :(得分:0)

我刚刚创建了一个示例,并确认它仍然有效;

也许您已经通过Chrome on android进行了测试,但Chrome无法打开该应用;在这种情况下,您可以在此处了解更多信息:https://developer.chrome.com/multidevice/android/intents

Chrome已将其行为更改为deeplink

您可以查看我的简单演示;在这种情况下,我做了一个非常简单的path https://github.com/tranquan/rn-deeplink-demo

答案 1 :(得分:0)

您应该在导出的createAppContainer组件中将URL的基础部分指定为带有uriPrefix的属性,并且在路径中仅包含URL terque/pets的第二部分。

以下是他们的documentation中的一个例子:

如果您的项目是使用Expo创建的

const SimpleApp = createAppContainer(createStackNavigator({...}));

const prefix = Expo.Linking.makeUrl('/');

const MainApp = () => <SimpleApp uriPrefix={prefix} />;

如果您的项目是使用react-native init创建的

const SimpleApp = createAppContainer(createStackNavigator({...}));

const prefix = 'mychat://';

const MainApp = () => <SimpleApp uriPrefix={prefix} />;

尝试一下,看看它是否有效,因为那是他们的文档指示应完成的方式。

我已经在示例项目中以这种方式进行了编码,当我使用他们建议的命令行指令进行测试时,它可以正常工作。

我仍然遇到问题,无法在我正在构建的实际应用程序中正确打开深层链接,并且按照他们的建议进行了完全正确的编码,因此很可能是在其他地方引起了此问题。

我会尝试更改您的代码,使其首先与他们的文档保持一致,如果这对这篇文章无效,请告诉我,当我弄清楚它为我的应用找到了什么解决方案。