Taro中支付宝小程序扫码拉起坑点

1. 扫码获取不到url参数

需求背景:

支付宝上我们开发的某xxx小程序中会有一个推广码,这个推广码是一个带参数的url转成的二维码,另一个用户用支付宝的扫一扫打开后,会进入该小程序的指定页面

问题:

新用户通过扫码进入该指定页面时获取不到url上的参数,直接使用qs.parse(window.location.search)获取不到启动参数

解决:

1. 冷启动获取

冷启动会触发小程序的onLaunch,需要在@/app.tsx的useLaunch里面回调参数里拿到,这里是options,然后存到taroGlobalData里了
只能在app.tsx里面拿


image.png

这个options的结构大概是这样


image.png

App一定是先于页面启动,此时存入后,用到的页面直接取options.query.qrCode即可
然后手动parse一下获取到?后面的参数

可以尝试Taro.getLaunchOptionsSync()方法取获取,应该是和useLaunch获取到的一致,没试过

2. 热启动获取

热启动时,不会触发onLaunch方法,也就无法从useLaunch里获取到,需要在onShow里面获取


image.png

参考: https://opendocs.alipay.com/mini/framework/page-faq#Q%EF%BC%9A%E7%AC%AC%E4%B8%80%E6%AC%A1%E6%89%AB%E7%A0%81%E8%BF%9B%E5%85%A5%E5%B0%8F%E7%A8%8B%E5%BA%8F%EF%BC%8C%E5%88%87%E5%85%A5%E5%90%8E%E5%8F%B0%E3%80%82%E7%AC%AC%E4%BA%8C%E6%AC%A1%E6%89%AB%E7%A0%81%E8%BF%9B%E5%85%A5%E5%90%8E%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88%E5%9C%A8%20onLaunch%20%E5%87%BD%E6%95%B0%E4%B8%AD%E8%8E%B7%E5%8F%96%E4%B8%8D%E5%88%B0%E5%8F%82%E6%95%B0%EF%BC%9F

3. 获取本次启动参数
// 本次启动参数(热启动+冷启动+安卓某些机型最小化到后台另开支付宝扫码)
const options = Taro.getEnterOptionsSync();

该方法能获取冷启动+热启动+安卓骚操作唤起的落地页参数,目前没遇到问题,推荐直接用这个

针对某些页面,既可以通过扫码唤起,又可以通过支付宝分享唤起,又可以通过正常途径进入,所以封装了一个hook,useRouter,全部获取到

import qs from 'qs';
import Taro from '@tarojs/taro';
import { useState } from 'react';
// import { isEmpty } from '@/utils/common';

const useRouter = () => {
  const [routerParams] = useState<Record<string, any>>(() => {
    let params = {};
    try {
      // // 本次启动参数(热启动+冷启动+安卓某些机型最小化到后台另开支付宝扫码)
      const options = Taro.getEnterOptionsSync();

      const url = options?.query?.qrCode || '';

      const qrCodeUrlparams = qs.parse(url.split('?')[1]);

      // 当前页面url参数
      const urlParams = qs.parse(window.location.search, { ignoreQueryPrefix: true });
      console.log(qrCodeUrlparams, 'qrCodeUrlparams');
      console.log(urlParams, 'urlParams');
      // 把二维码扫码的url参数和当前url参数合并
      params = {
        ...qrCodeUrlparams,
        // 优先用页面url参数覆盖同名qrCode参数
        ...urlParams,
      };
    } catch (error) {
      params = {};
    }
    return params || {};
  });

  return { params: routerParams };
};

export default useRouter;

2. 扫一扫拉起的是线上小程序

能配置扫一扫功能,必定是先发第一版正式的小程序,再去支付宝小程序后台配置,二维码url,但是配置完成后,扫一扫唤起的却是线上正式版的小程序

在测试,联调阶段,我们需要唤起的是体验版或者开发版小程序

解决:

先打开一版开发版的小程序,(用支付宝开发者工具的预览码即可),小程序右上角有一个定位图标,点开


image.png

点开后底下有一个联调设置


image.png

把这个给勾上


image.png

后续扫码打开的就是这个开发版的小程序了,如果后续代码改动了,可能要重新进入一次,重新勾选这个联调扫码版本的checkbox

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容