小程序云開發(fā) · 消息推送功能

參考官方文檔:小程序訂閱消息

首先看一下效果圖:


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ù)文件夾上右鍵,上傳并部署


上傳并部署

七竟终、完成?

點擊按鈕后微信就收到消息推送啦


收到消息推送
幾種報錯情況:
  1. 錯誤信息為“……h(huán)as no permission……”蝠猬,缺少權限,檢查config.json文件中是否配置了全部用到的api统捶。
  2. 推送消息時錯誤代碼為47003的榆芦,檢查模板消息的參數(shù)是否傳遞正確,格式喘鸟、字符串長度都可能出現(xiàn)問題匆绣,具體參考訂閱消息參數(shù)值內容限制說明
  3. wx.requestSubscribeMessage調起失敗什黑,錯誤信息 {errCode: 20004, errMsg: "requestSubscribeMessage:fail the main switch is switched off"}崎淳,原因為用戶關閉了設置頁面中消息訂閱的總開關,做一下錯誤兼容即可愕把。
  4. “錯誤碼:20001拣凹,No template data return,vertify the template id exist”:模版ID錯誤恨豁,檢查當前appId和templateId是否相對應嚣镜。
  5. 云函數(shù)調用失敗,走到fail里的情況橘蜜,檢查云函數(shù)初始化時環(huán)境是否正確
wx.cloud.init({
  env: 'some-env-id' // 你自己的云開發(fā)環(huán)境
})
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末菊匿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌跌捆,老刑警劉巖徽职,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異佩厚,居然都是意外死亡姆钉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門可款,熙熙樓的掌柜王于貴愁眉苦臉地迎上來育韩,“玉大人克蚂,你說我怎么就攤上這事闺鲸。” “怎么了埃叭?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵摸恍,是天一觀的道長。 經(jīng)常有香客問我赤屋,道長立镶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任类早,我火速辦了婚禮媚媒,結果婚禮上,老公的妹妹穿的比我還像新娘涩僻。我一直安慰自己缭召,他們只是感情好,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布逆日。 她就那樣靜靜地躺著嵌巷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪室抽。 梳的紋絲不亂的頭發(fā)上搪哪,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機與錄音坪圾,去河邊找鬼晓折。 笑死,一個胖子當著我的面吹牛兽泄,可吹牛的內容都是我干的漓概。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼已日,長吁一口氣:“原來是場噩夢啊……” “哼垛耳!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤堂鲜,失蹤者是張志新(化名)和其女友劉穎栈雳,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缔莲,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡哥纫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了痴奏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛀骇。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖读拆,靈堂內的尸體忽然破棺而出擅憔,到底是詐尸還是另有隱情,我是刑警寧澤檐晕,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布暑诸,位于F島的核電站,受9級特大地震影響辟灰,放射性物質發(fā)生泄漏个榕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一芥喇、第九天 我趴在偏房一處隱蔽的房頂上張望西采。 院中可真熱鬧,春花似錦继控、人聲如沸械馆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狱杰。三九已至,卻和暖如春厅须,著一層夾襖步出監(jiān)牢的瞬間仿畸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工朗和, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留错沽,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓眶拉,卻偏偏與公主長得像千埃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子忆植,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355