toFrankie / blog

种一棵树,最好的时间是十年前。其次,是现在。
22 stars 1 forks source link

关于 fail can only be invoked by user TAP gesture 的记录 #155

Open toFrankie opened 1 year ago

toFrankie commented 1 year ago

配图源自 Freepik

相信大家开发小程序的时候都遇到过:

{errMsg: "requestSubscribeMessage:fail can only be invoked by user TAP gesture."}

意思就是需要「用户触发」,是用户自发、主动的行为才能正常调用,很多 API 都用此限制,比如 wx.navigateToMiniprogram()wx.openSetting() 等。官方甩锅说开发者滥用接口,其实都是产品经理需求上的滥用。他们限制不了产品经理,就只能搞开发者了。

诸如此类的问题,在微信开放社区一搜一堆,然后官方万能回复模板是:「请具体描述问题出现的流程,并提供能复现问题的简单代码片段」。

原因可能会有这些,自行排查一下:

  1. 只能在 bindtap/catchtap 绑定的方法内调用 wx.requestSubscribeMessage()
  2. 只能在所绑定的方法内直接调用,不允许在回调函数中调用。
  3. 在执行 wx.requestSubscribeMessage() 前,不能有 await xxx 等异步操作。看到一个更离谱的是前面有 console.log() 也失败了,移步这里

关于能不能在回调函数里使用,有些人在 wx.request()wx.showToast() 等回调里是成功的,总之很诡异~

解决方法是,将其他逻辑后置,首先调用 wx.requestSubscribeMessage() 接口。

相关链接: