廢話不多比比,在開發微信小程序進行消息推送時遇到了麻煩 耽擱了一下午 ,所以把這些麻煩都記錄一下 希望對你也有用
根據微信小程序官方文檔的提示我們的模板消息在2020 年 1 月 10 號全面下架,所以要實現功能我們就要開通訂閱消息
踩坑一設置服務類目
在我第一次進入訂閱消息模塊時,讓我點擊開通訂閱消息 當我點擊開通按鈕 提示讓我微信後臺設置服務類目
點擊設置中 完善小程序信息後 可查看自己的服務條目是否有 有的話再次進入訂閱消息中即可開通使用
ps:訂閱消息模塊中可以自定義消息模板 但是需要審覈3-7天 建議在公共模板庫中查詢自己想要的模板點擊選用 可以我就不詳細使用過程了 很簡單 類似之前我們的模板消息
踩坑二wx.requestSubscribeMessage使用失敗,一直不彈框?
檢查你的基礎庫版本 一定要設置爲高版本 低版本的有點在多條權限時只顯示一條 有的直接導致不彈窗 這裏建議設置爲最新的
踩坑三 多個權限申請 彈窗只顯示單條記錄 且彈窗體於小程序開發文檔不一致
我設置好的彈窗體:
微信開發文檔的彈窗體:
請檢查你的真機調試的版本是否爲最新版本 我的不是 當我更新好之後就顯示成功了
最最重要的代碼實現來了
//權限彈窗代碼
const tmplId = 'rV_13VS_fEQONMZ01D4YOTKDnM8SpQiEFYYqFM-RA1s'
wx.requestSubscribeMessage({
tmplIds: [tmplId],//tmplIds爲我們訂閱消息模塊中申請的模板id
success(res) {
if (res[tmplId]=='accept'){
wx.showToast({
title: '授權成功',
})
}
}
})
以及我們點擊授權過後打印的res中的數據(下圖爲申請2個訂閱消息時都允許和只允許一次的結果)
完整代碼:
雲函數index.js的代碼
// 雲函數入口文件
const cloud = require('wx-server-sdk')
cloud.init()
// 雲函數入口函數
exports.main = async (event, context) => {
try{
//templateId 訂閱消息模塊id
const templateId = 'rV_13VS_fEQONMZ01D4YOTKDnM8SpQiEFYYqFM-RA1s'
const wxContext = cloud.getWXContext()
const result = await cloud.openapi.subscribeMessage.send({
touser: wxContext.OPENID,
page: `/pages/blog-comment/blog-comment?blogId=${event.blogId}`,//查看的頁面
data: {
//這裏的參數時我們訂閱消息模塊中要顯示的數據 也可以在小程序中通過傳參的方式進行動態賦值 我這裏寫死了
//參數名稱詳情看下圖
phrase1: {
value: '評價成功'
},
thing2: {
value: '弟弟救我啊'
}
},
templateId: templateId,
})
console.log(result)
return result
}catch(err){
console.log(err)
return err
}
}
這裏根據你選擇的詳細內容名稱
config.json
{
"permissions": {
"openapi": [
"subscribeMessage.send"
]
}
}
小程序中頁面的調用
onSend(){
if(this.data.content.trim()==''){
wx.showModal({
title: '評論內容不能爲空',
content: '',
})
return
}
const tmplId = 'rV_13VS_fEQONMZ01D4YOTKDnM8SpQiEFYYqFM-RA1s'
wx.requestSubscribeMessage({
tmplIds: [tmplId],
success(res) {
if (res[tmplId]=='accept'){
wx.cloud.callFunction({//調用雲函數
name: 'messageSend',//你的雲函數名稱
}).then((res) => {
wx.showToast({
title: '完成',
})
})
}
}
})
}
ok這就完成了訂閱消息的集成
以及如果你的微信小程序之前使用過模板消息集成推送 如果運行還是報 模板消息在2020 年 1 月 10 號全面下架請移步微信官方文檔等錯誤時 請檢查你的wxml代碼 將你的form標籤還原到之前的標籤就可以了