微信小程序的订阅消息接口 wx.requestSubscribeMessage,只能是用户发生点击行为或者发起支付回调后,才可以调起订阅消息界面。

除去支付回调这种情况,你必须给页面某个元素绑定 tap 事件,把这个 API 放到 tap 事件里,当用户去点击这个元素时才能调起订阅消息界面,且不能通过 setTimeout 延迟执行。

有一种特殊情况,wx.showModal 模态窗口的 success 回调可以调起订阅消息界面,举例如下:

wx.showModal({
    showCancel: false,
    content: '操作成功',
    success: res => {
        wx.requestSubscribeMessage({
            tmplIds: [''],
            success: res => { }
        })
    }
})