【问题标题】:Deep Linking with react-navigation does not work使用 react-navigation 进行深度链接不起作用
【发布时间】:2019-08-27 20:38:43
【问题描述】:

实际上,我正在使用 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 添加到我的代码中

【问题讨论】:

  • 我认为您还需要设置 AppStack 和 Main 的路径,因为您将屏幕嵌套在其中;并将宠物的路径更改为仅“terque/pets”;删除方案路径。 *** 建议 *** 先尝试一个简单的路径,不要嵌套,直到你得到深度链接。更多信息:reactnavigation.org/docs/en/deep-linking.html
  • 如何设置 Main 的路径?并且... AppStack 路径定义为:'',如果我从 Pets 中删除,我会在其中设置架构。你能提供一个更明确的例子吗?
  • @TranQuan 我只尝试了一层深度但仍然无法正常工作

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


【解决方案1】:

您应该将 URL 的基本部分指定为您导出的 createAppContainer 组件中标记为 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} />;

尝试一下,看看它是否有效,因为他们的文档表明应该这样做。

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

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

我会先尝试更改您的代码以匹配他们的文档,如果这不起作用,请对这篇文章发表评论,当我弄清楚时,我会告诉您我为我的应用找到的解决方案。

【讨论】:

【解决方案2】:

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

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

Chrome 已将其行为更改为 deeplink

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

【讨论】:

  • 如果您阅读了我的问题,我说该链接已经打开了我的应用程序。链接很好用,没有问题,通过链接打开应用时需要导航到特定路线
  • 嗯...奇怪,有时间我会尝试设置与您相同的路线。但如果你有一个模拟项目,那就更好了
  • 在 AndroidManifest.xml 的第二个意图中,您添加了这样的注释。 这个 URL 模式对吗?
猜你喜欢
  • 2021-08-10
  • 2023-02-18
  • 1970-01-01
  • 2019-09-13
  • 2017-09-18
  • 1970-01-01
  • 2023-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多