收藏
回答

onShow中或者wx.onAppShow中调用NFC会一直死循环地执行

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug wx.startHCE和wx.getHCEState 客户端 6.5.3 2.4.2

- 当前 Bug 的表现(可附上截图)

在页面onShow中或者wx.onAppShow中调用NFC会一直死循环地执行,这是怎么回事?难道判断NFC状态是跳到其他软件去判断的吗


- 预期表现


- 复现路径


- 提供一个最简复现 Demo



回答关注问题邀请回答
收藏

3 个回答

  • 社区技术运营专员-娇华
    社区技术运营专员-娇华
    2019-05-22

    你好,麻烦提供出现问题的具体机型、微信版本号、系统版本号,以及能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)

    2019-05-22
    有用
    回复 5
    • 清晨一盏灯
      清晨一盏灯
      2019-05-22

      机型:任何的安卓手机都能复现

      onShow: function() {

      wx.getHCEState({

            success(res) {

              console.log("NFC状态=" + res.errCode);

              if (res.errCode == "0") {

                wx.startHCE({

                  aid_list: ['F222222222'],

                  success(res) {

                    console.log("NFC开启成功");

                  },

                  fail(err) {

                    console.log("NFC开启失败=" + JSON.stringify(err));

                  }

                })

              } else {

              }

            },

            fail(err) {

              console.log("获取NFC状态失败=" + JSON.stringify(err));

            }

          });


      }



      2019-05-22
      回复
    • 社区技术运营专员-娇华
      社区技术运营专员-娇华
      2019-05-22回复清晨一盏灯

      按照上面的要求一一补全信息哈,thanks

      2019-05-22
      回复
    • 思渊
      思渊
      2020-12-28
      别找了 我一看就知道是啥问题
      场景:授权后=》人脸识别
      1.从主小程序=》官方小程序授权,授权成功返回设置onAppShow
              wx.onAppShow(({ referrerInfo }) => {
                console.log(referrerInfo)
                if(referrerInfo && referrerInfo.appId) {
                  let { appId, extraData } = referrerInfo;
                  if(appId === "wx308bd2aeb83d3345") {
                    self.verifyInit(extraData.code.auth_code)
                  }
                }
              })
      2.  verifyInit(code) {
          wx.onAppShow(null);
          let { name, idcard, realFlag} = this.data;
          http('/z/wx/machineBindCheck', {
            cardNo: idcard, staffName: name, code
          },'POST').then(({ msg, obj}) => {
            let { certifyId } = obj;
            wx.startFacialRecognitionVerify({
              name: name,
              idCardNumber: idcard,
              success({ verifyResult }) {
                http("/z/wx/identityCheck",{certifyId, verifyResult, realMode: 1}, "POST").then(({success}) => {
                  success&&wx.navigateTo({ url: realFlag===3?'/pages/identify/success':'/pages/identify/phone' })
                })
              },
              fail(res) {
                console.log(res)
              }
            })
          })
        }
      3.wx.startFacialRecognitionVerify再次跳出小程序返回后referrerInfo跟前一次的数据一模一样,导致重复触发onAppShow里的逻辑。
      这种逻辑bug任何机型都能复现,根本原因就是referrerInfo不准确根本不能用来做判定依据。
      垃圾小程序毁我青春!
      2020-12-28
      回复
    • 思渊
      思渊
      2020-12-28
      19年的提的21年都没修复  九折水平~
      2020-12-28
      回复
    • 思渊
      思渊
      2020-12-28
      不如让我奶奶来修吧
      2020-12-28
      1
      回复
  • angentle
    angentle
    2020-04-01

    确实会出现死循环 回调多次的情况

    目前的解决方法是设置防抖。

    我是用taro, 在这个生命周期里 加个定时器,销毁时清除定时器

    2020-04-01
    有用
    回复
  • Z.Y
    Z.Y
    2020-02-03
    分享不了
    2020-02-03
    有用
    回复
登录 后发表内容