实际上,我正在使用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
答案 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} />;
尝试一下,看看它是否有效,因为那是他们的文档指示应完成的方式。
我已经在示例项目中以这种方式进行了编码,当我使用他们建议的命令行指令进行测试时,它可以正常工作。
我仍然遇到问题,无法在我正在构建的实际应用程序中正确打开深层链接,并且按照他们的建议进行了完全正确的编码,因此很可能是在其他地方引起了此问题。
我会尝试更改您的代码,使其首先与他们的文档保持一致,如果这对这篇文章无效,请告诉我,当我弄清楚它为我的应用找到了什么解决方案。