小程序官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/subscribe-message.html
uniapp文档:https://uniapp.dcloud.io/api/other/requestSubscribeMessage
示例:
一、后端
二、小程序调用
uni.requestSubscribeMessage({
tmplIds: tmplIds,//数组(后台获取的)
success:(res)=>{
console.log(res[tmplIds[0]]);//值包括'accept':同意、'reject':拒绝、'ban':后台禁用
},
fail:(err)=>{
}
})
三、遇到的一些问题
调用失败fail返回提示及解决方式:
1.errMsg:"requestSubscribeMessage:fail can only be invoked by user TAP gesture."
解决:bindtap点击才行、不能延迟调用
2.errMsg:"requestSubscribeMessage:fail 开发者工具暂时不支持此 API 调试,请使用真机进行开发"
解决:真机调试才行
3.errMsg:"requestSubscribeMessage:fail:No template data return, verify the template id exist"
errorCode:20001
解决:确认模板ID是订阅消息的模板ID且正确。
4.errMsg:"requestSubscribeMessage:fail:Templates count out of max bounds"
errCode:20003
解决:模版数量超出,最多3个
5.requestSubscribeMessage:fail last call has not ended
解决:如果申请的是“一次性订阅”,一次触发只有一次推送消息机会,所以我们会在其他页面点击事件去调用requestSubscribeMessage,获取更多次的推送消息机会。但是每个手机获取是有上限的,大概几十个吧。然后只有用掉推送消息次数,才能重新成功调用,否则会出现以上问题。
注意-坑:
1.bindtap点击才可以调起
2.真机调试才行(--2020/01/03:貌似微信开发者工具也可以调用了)
3.不能延迟去调用wx.requestSubscribeMessage,如先调用其他接口请求成功再去它、使用定时器延迟调用
4.目前长期性订阅消息仅向政务民生、医疗、交通、金融、教育等线下公共服务开放,后期将逐步支持到其他线下公共服务业务