原先场景能力是由千牛客户端把event参数和对应的业务参数传参到启动参数里,由isv在启动时读取后再自主跳转;
这种方案优势是isv比较灵活,在读取到场景值后可以跳转二级页也可以切换tab;劣势需要执行isv逻辑,导致额外的页面渲染,增加渲染打开时长;
优化方案只建议isv在直接跳二级页的场景下使用,此方案下,从二级页点击返回,直接回到千牛页面,不回到小程序首页。
ISV通过在app.json中 window字段下,增加pageAliasMapping字段来指定跳转目标路径;业务参数仍然有目标路径页面去启动参数里读取。
{ "pages": [ "pages/index/index", "pages/detail/detail" ], "window": { "defaultTitle": "My App", "navigationBarForceEnable": true, "pageAliasMapping": { "tradeDetail": "pages/tradeDetail/tradeDetail", "tradeList": "pages/tradeList/tradeList" } } }
旧版千牛不会根据pageAliasMapping配置更新启动路径,所以isv需要保留原有的onLaunch的判断逻辑。但是需要增加判断是否启动路径已经是被映射过了,如果被映射过,则不需要再做跳转。一个典型的兼容代码如下。
onLaunch(options) { var query = options['query']; var event = query["event"]; if (event == 'tradeList' || event == 'event_tradeList') { var startPage = options['path'] if (startPage == 'pages/myTradeList/myTradeList') { //已经在目标页面了,无需跳转 } else { //延续原先跳转逻辑 my.redirectTo({ url: '/pages/myTradeList/myTradeList' }) } } },
ISV在开发过程中,可以通过mock url的方式并生成二维码,扫码打开,让开发中的小程序有获得对应的场景参数, 生成mock url的形式如下,$miniAppUrl代表自己的小程序URL,可以来自IDE生成的二维码,{$miniAppUrl}&query=event%3DitemList%26itemStatus%3Donsale, 由于在千牛上是通过openPlugin过程中自动添加别名参数来实现,在测试过程中ISV可以自行在小程序url后增加pageAlias参数模拟直达。 例如,https://m.duanqu.com?_ariver_appid=3000000002058512&nbsv=0.1.1911251952.12&nbsource=debug&nbsn=DEBUG&query=event%3DitemList%26itemStatus%3Donsale&pageAlias=tradeList, 生成对应的二维码
两端支持版本都是 8.4.0及以上。