RN navigation(三)

上文提到过的path参数用来做deeplink使用的 ,本文就来讲解一下具体的操作方式
先贴代码:
const App = StackNavigator({
ReactNavigation:{screen:ReactNavigation,navigationOptions:{header:null}},
Main: {
screen: MainScreen,
path:'kingdom/:DeepLinkUser'
},
Profile: {screen: ProfileScreen},
},
{
initialRouteName:'ReactNavigation',
initialRouteParams :{
AppName:'KingdomYrt'
},
headerMode:'screen',
transitionConfig: (() => ({
screenInterpolator: CardStackStyleInterpolator.forHorizontal,
}))
});

const MainApp = () => <App
//设置 URL's Schema,和 Host
uriPrefix={'kingdomYrt://kingdomYrt/'}
onNavigationStateChange={(preState, newState, action) => {
console.log('preState:' + JSON.stringify(preState)
+ ',newState:' + JSON.stringify(newState) + ',action:' + JSON.stringify(action));
}}/>
然后在AndroidMainfest中设置
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="kingdomYrt"
android:host="kingdomYrt" />
</intent-filter>
</activity>
我们设置是 <data android:scheme="kingdomYrt" android:host="kingdomYrt" />,这句代码
解释一下几个关键点
1.要在Android mainfest中设置scheme和host
2.要在StackNavigator生成变量App中设置属性uriPrefix,这是最新的处理方式,不再支持以前直接在StackNavigator中设置,语法:uriPrefix={'host://scheme/'}
3.在对应的screen中设置path,比如: path:'kingdom/:DeepLinkUser',这里指的是kingdom是这个screen的唯一标识,后面可以传入参数Deep Link User。
4.在控制台输入:adb shell am start -W -a android.intent.action.VIEW -d "kingdomYrt://kingdomYrt/kingdom/linjian" com.reactnavigation,就可以看到不管是有没有启动App都可以直接到达kingdom为唯一识别的Screen(Main)页面。
以上是Android的设置方式
iOS方式后续再行补充。

test.gif
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容