1. 扫码获取不到url参数
需求背景:
支付宝上我们开发的某xxx小程序中会有一个推广码,这个推广码是一个带参数的url转成的二维码,另一个用户用支付宝的扫一扫打开后,会进入该小程序的指定页面
问题:
新用户通过扫码进入该指定页面时获取不到url上的参数
解决:
- 一开始以为直接从url上获取就可以,直接 qs.parse(window.location.search),但是失败了
-
最后发现是从app启动时获取的,在src的目录下有一个app.tsx,里面是一个App组件,return一个 children,我们需要在这里加个useLaunch的生命周期,并且自带options参数,这个参数里才有我们需要的url
image.png - useLaunch里的options参数实际上是这样的(如下所示),这个query里面的qrCode是我们配置的完整链接,我们在useLaunch里能获取到,此时把这些参数存到Taro的全局变量taroGlobalData中去
interface LaunchOptions {
path: string; // 打开的页面路径
query: {
qrCode: string; // 支付宝扫码唤起的小程序链接
}
}
-
这个App肯定是先于你的页面先启动的,也就是说,你在这里存到全局变量了,后面打开的页面直接取就行了,在render里面直接取也能取到,所以在页面组件上直接取
Taro.getApp().taroGlobalData.query.qrCode
即可,取到了后再qs.parse(split("?")[1])
,就能拿到序列化的queryjson了 -
如果觉得在初始化useLaunch里获取再传值麻烦,可以试一下在页面组件上用Taro.getLaunchOptionsSync(),没试过,应该是可以达到一样的效果
2. 扫一扫拉起的是线上小程序
能配置扫一扫功能,必定是先发第一版正式的小程序,再去支付宝小程序后台配置,二维码url,但是配置完成后,扫一扫唤起的却是线上正式版的小程序
在测试,联调阶段,我们需要唤起的是体验版或者开发版小程序
解决:
先打开一版开发版的小程序,(用支付宝开发者工具的预览码即可),小程序右上角有一个定位图标,点开
image.png
点开后底下有一个联调设置
image.png
把这个给勾上
image.png
后续扫码打开的就是这个开发版的小程序了,如果后续代码改动了,可能要重新进入一次,重新勾选这个联调扫码版本的checkbox
网友评论