參考官方文檔:小程序訂閱消息
首先看一下效果圖:
image.png
一似舵、選擇合適的模板消息
在小程序管理后臺功能-訂閱消息-公共模板庫選擇自己需要的模板消息绅喉。目前小程序支持一次性訂閱和長期訂閱贸弥,一次性訂閱是指用戶訂閱一次下硕,可以為其推送一次消息线梗;長期訂閱則是可以發(fā)送多次消息缚俏,目前向政務惊搏、醫(yī)療、交通忧换、金融恬惯、教育等線下公共服務開放,如果有需要可以在社區(qū)發(fā)帖申請亚茬,符合要求應該會給開放(這個我沒申請過通過率不確定哈)酪耳。
選擇模板
二、獲取下發(fā)權限
wx.requestSubscribeMessage調起客戶端小程序訂閱消息界面,返回用戶訂閱消息的操作結果碗暗。具體代碼如下:(這里對于用戶拒絕授權和關閉了設置中消息訂閱主開關兩種情況加了彈窗提示并直接跳轉設置頁)
// 訂閱消息
subscribeMsg() {
let that = this
let tmplId = '你的模版ID'
wx.requestSubscribeMessage({
tmplIds: [tmplId],
success(res) {
if (res[tmplId] == 'accept') {
that.cloudSendMsg();
} else if (res[tmplId] == 'reject') { // 用戶拒絕授權
wx.showModal({
title: '溫馨提示',
content: "您已關閉消息推送颈将,如需要消息推送服務,請點擊確定跳轉設置頁面打開授權后再次嘗試言疗。",
success: function(modal) {
if (modal.confirm) { // 點擊確定
wx.openSetting({ withSubscriptions: true })
}
}
})
}
},
fail(err) {
if (err.errCode == '20004') {
wx.showModal({
title: '溫馨提示',
content: "您的消息訂閱主開關已關閉晴圾,如需要消息推送服務,請點擊確定跳轉設置頁面打開授權后再次嘗試噪奄。",
success: function(modal) {
if (modal.confirm) { // 點擊確定
wx.openSetting({ withSubscriptions: true })
}
}
})
}
}
})
},
// 云函數(shù)-消息推送
cloudSendMsg() {
let that = this
wx.cloud.callFunction({
name: 'sendMsg',
data: {
// 要傳的數(shù)據(jù)
}
}).then(res => {
console.log('cloud res:', res)
}).catch(err => {
console.log('err:', err)
})
},
三死姚、新建云函數(shù)
新建Node.js云函數(shù),自動生成index.js和package.json勤篮,config.json文件如果沒有自動生成就自己新建一個都毒。如果沒有安裝wx-server-sdk依賴的,先執(zhí)行 npm install --save wx-server-sdk@latest 安裝碰缔。
新建云函數(shù)
四账劲、config.json權限配置
在 config.json 中配置 openapi.subscribeMessage.send API 的權限
{
"permissions": {
"openapi": [
"subscribeMessage.send"
]
}
}
五、云函數(shù)調用消息推送
完整代碼如下:
// 云函數(shù)入口文件
const cloud = require('wx-server-sdk');
cloud.init();
// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
console.log(event); // 云函數(shù)中的console在云開發(fā)控制臺-日志中查看
return sendTemplateMessage(event);
}
//小程序模版消息推送
async function sendTemplateMessage(event) {
const {OPENID} = cloud.getWXContext(); // 用戶的openId
const templateId = '你的模板ID';
const data = { // 這里根據(jù)自己實際訂閱的消息模板來寫
'date1': {
value: event.date,
},
'phrase2': {
value: event.location,
},
'phrase3': {
value: event.cond_txt,
},
'character_string4': {
value: event.tmp,
},
'thing5': {
value: event.tip,
},
};
const sendResult = await cloud.openapi.subscribeMessage.send({
touser: OPENID,
templateId: templateId,
page: 'pages/index/index', // 點擊消息跳轉的小程序頁面金抡,非必填
data: data,
miniprogramState: 'developer' // 開發(fā)版/體驗版/正式版
})
return sendResult;
}
六瀑焦、上傳并部署
在云函數(shù)文件夾上右鍵,上傳并部署
上傳并部署
七竟终、完成?
點擊按鈕后微信就收到消息推送啦
收到消息推送
幾種報錯情況:
- 錯誤信息為“……h(huán)as no permission……”蝠猬,缺少權限,檢查config.json文件中是否配置了全部用到的api统捶。
- 推送消息時錯誤代碼為47003的榆芦,檢查模板消息的參數(shù)是否傳遞正確,格式喘鸟、字符串長度都可能出現(xiàn)問題匆绣,具體參考訂閱消息參數(shù)值內容限制說明。
- wx.requestSubscribeMessage調起失敗什黑,錯誤信息 {errCode: 20004, errMsg: "requestSubscribeMessage:fail the main switch is switched off"}崎淳,原因為用戶關閉了設置頁面中消息訂閱的總開關,做一下錯誤兼容即可愕把。
- “錯誤碼:20001拣凹,No template data return,vertify the template id exist”:模版ID錯誤恨豁,檢查當前appId和templateId是否相對應嚣镜。
- 云函數(shù)調用失敗,走到fail里的情況橘蜜,檢查云函數(shù)初始化時環(huán)境是否正確
wx.cloud.init({
env: 'some-env-id' // 你自己的云開發(fā)環(huán)境
})