相信大家开发小程序的时候都遇到过:
{errMsg: "requestSubscribeMessage:fail can only be invoked by user TAP gesture."}
意思就是需要「用户触发」,是用户自发、主动的行为才能正常调用,很多 API 都用此限制,比如 wx.navigateToMiniprogram()
、wx.openSetting()
等。官方甩锅说开发者滥用接口,其实都是产品经理需求上的滥用。他们限制不了产品经理,就只能搞开发者了。
诸如此类的问题,在微信开放社区一搜一堆,然后官方万能回复模板是:「请具体描述问题出现的流程,并提供能复现问题的简单代码片段」。
原因可能会有这些,自行排查一下:
- 只能在
bindtap/catchtap
绑定的方法内调用wx.requestSubscribeMessage()
。- 只能在所绑定的方法内直接调用,不允许在回调函数中调用。
- 在执行
wx.requestSubscribeMessage()
前,不能有await xxx
等异步操作。看到一个更离谱的是前面有console.log()
也失败了,移步这里。
关于能不能在回调函数里使用,有些人在 wx.request()
、wx.showToast()
等回调里是成功的,总之很诡异~
解决方法是,将其他逻辑后置,首先调用 wx.requestSubscribeMessage()
接口。
相关链接:
网友评论