小程序消息推送,訂閱消息的實(shí)現(xiàn),借助云開(kāi)發(fā)云函數(shù)實(shí)現(xiàn)定時(shí)推送訂閱消息功能
我在云開(kāi)發(fā)基礎(chǔ)課程里給大家講過(guò)小程序消息推送功能的實(shí)現(xiàn),等下會(huì)給大家回顧下。但是有時(shí)候我們?nèi)绻雽?shí)現(xiàn)定時(shí)推送的功能該怎么做呢
一,普通訂閱消息的發(fā)送
我們先來(lái)看下訂閱消息的官方簡(jiǎn)介。

接下來(lái)我們就來(lái)借助云開(kāi)發(fā),來(lái)快速實(shí)現(xiàn)小程序消息推送的功能。
1-1,獲取模板 ID
這一步和我們之前的模板消息推送是一樣的,也是先添加模板,然后拿到模板id

首先是開(kāi)通訂閱消息功能,很簡(jiǎn)單,如下圖


由于長(zhǎng)期性訂閱消息,目前僅向政務(wù)民生、醫(yī)療、交通、金融、教育等線下公共服務(wù)開(kāi)放,后期將逐步支持到其他線下公共服務(wù)業(yè)務(wù)。僅就線下公共服務(wù)這一點(diǎn),長(zhǎng)期性訂閱消息就和大部分開(kāi)發(fā)者無(wú)緣了。
所以我們這里只能以使用一次性訂閱消息為例。

如上圖,我們從公共模板庫(kù)里選擇一個(gè)一次性訂閱的模板。然后編輯模板如下圖

下圖就是我們添加好的模板,下圖的模板id就是我們需要的。

1-2,請(qǐng)求用戶授權(quán)
我們做訂閱消息授權(quán)時(shí),只能是用戶點(diǎn)擊或者支付完成后才可以調(diào)起來(lái)授權(quán)彈窗,官方是這么要求的:

我們這里用到了wx.requestSubscribeMessage這個(gè)方法,來(lái)獲取用戶的授權(quán)。
1,編寫(xiě)index.wxml代碼

2,編寫(xiě)index.js代碼,實(shí)現(xiàn)點(diǎn)擊獲取授權(quán)

這一步tmplIds里的一串字符,就是我們自己添加的模板id

3,點(diǎn)擊按鈕運(yùn)行效果如下
開(kāi)發(fā)者工具模擬器上點(diǎn)擊授權(quán)彈窗是這樣的:

手機(jī)上的授權(quán)彈窗是這樣的:

可以看到,這里顯示的就是我們添加的 ‘上課提醒’的模板。
細(xì)心的同學(xué)可以看到, 真機(jī)上多了一個(gè) ‘總是保持以上選擇,不再詢問(wèn)’
其實(shí),你自己仔細(xì)多品一些。也能明白,我們正常訂閱消息授權(quán)時(shí),用戶允許的話,你只能推送一次消息。也就是用戶允許一次,我們就可以推送一條消息給用戶,并且這個(gè)允許不存在過(guò)期。所以我們可以讓用戶盡量多的點(diǎn)擊允許,這樣我們就可以盡量多的給用戶發(fā)送消息了。
這里用戶允許后,我們就可以給用戶推送消息了,接下來(lái)我們來(lái)借助云開(kāi)發(fā)的云函數(shù)來(lái)實(shí)現(xiàn)消息推送功能。
1-3,獲取用戶的opneid
先來(lái)看官方爸爸是怎么說(shuō)的。

可以看出官方提供了兩種方式,我們這里使用云調(diào)用。說(shuō)白了就是在云函數(shù)里調(diào)用推送功能。
推送所需參數(shù)

可以看到我這里用來(lái)openapi功能,并且需要用到用戶的opneid,關(guān)于openid的獲取,我之前有寫(xiě)過(guò)文章,也錄過(guò)視頻的。文章的話,大家去翻下我歷史的文章,視頻的話,點(diǎn)擊這個(gè)即可:《借助云函數(shù)獲取用戶openid》
這里的openid的獲取我就不再詳細(xì)講解了,把對(duì)應(yīng)云函數(shù)的代碼給大家貼出來(lái)。

在使用云開(kāi)發(fā)時(shí),有幾點(diǎn)需要注意的1,需要在project.config.json里創(chuàng)建云函數(shù)目錄如下圖

2,需要在app.js里初始化云開(kāi)發(fā)環(huán)境

至于云開(kāi)發(fā)的環(huán)境id從哪里拿,我視頻里也講過(guò)很多遍了,直接去看我視頻或者翻看我歷史文章即可。
《零基礎(chǔ)入門(mén)云開(kāi)發(fā)視頻》
1-4,用云函數(shù)實(shí)現(xiàn)消息推送
我們只需要?jiǎng)?chuàng)建一個(gè)云函數(shù)如下,然后填入用戶的openid,要跳轉(zhuǎn)的小程序頁(yè)面鏈接,模板內(nèi)容,模板id即可。通常這些數(shù)據(jù)都應(yīng)該傳進(jìn)來(lái),簡(jiǎn)單起見(jiàn),我就把這里的模板內(nèi)容寫(xiě)成固定的。

注意:我在編寫(xiě)上面的代碼時(shí),推送內(nèi)容的key必須和小程序模板里的key保持一致,否則就會(huì)報(bào)如下錯(cuò)誤。

然后看下調(diào)用這個(gè)云函數(shù)的地方
如果用戶沒(méi)有授權(quán),我們推送會(huì)報(bào)如下錯(cuò)誤
如果用戶授權(quán)過(guò),我們就可以成功推送了,推送后的打印日志如下
還記得我們真機(jī)上的授權(quán)嗎,如果用戶只是點(diǎn)擊了允許,沒(méi)有選擇一直允許,那我我們?cè)谕扑统晒σ淮魏?,如果再次推送,就需要用戶重新授?quán)。否則,還是會(huì)報(bào)這個(gè)錯(cuò)誤的
所以我們用戶點(diǎn)擊一次允許,我們就可以推送一次消息,比如,我點(diǎn)擊了4次允許那么我就可以成功的推送4次
效果圖
可以看到,我們成功的收到 上課提醒的模板消息,點(diǎn)擊進(jìn)去,就是我們具體的推送內(nèi)容
其實(shí)我這是連續(xù)收到了4條消息,因?yàn)槲尹c(diǎn)擊了4次允許推送,所以就可以成功的推送4次。
后面我會(huì)分享更多小程序相關(guān)的知識(shí)出來(lái),請(qǐng)持續(xù)關(guān)注。
注意:授權(quán)一次,只能發(fā)送一條消息。
二,定時(shí)發(fā)送消息
我們上面用戶授權(quán)和發(fā)送消息都需要手動(dòng)點(diǎn)擊才可以實(shí)現(xiàn)發(fā)送。但是有時(shí)候我們需要定時(shí)提醒用戶,比如做的鬧鐘小程序,要定時(shí)提醒用戶,該怎么做呢,接下來(lái)我們就來(lái)實(shí)現(xiàn)定時(shí)發(fā)送消息的功能。
注意
當(dāng)然了這里還是要先授權(quán)才可以發(fā)送消息的,同樣也是授權(quán)一次可以發(fā)送一條消息,所以這里要盡量先多授權(quán)幾次
2-1,什么是定時(shí)觸發(fā)器
我們實(shí)現(xiàn)定時(shí)發(fā)送的功能就是要用到云函數(shù)里的定時(shí)觸發(fā)器,官方介紹如下。
大家有時(shí)間可以自己去仔細(xì)讀下
https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/functions/triggers.html
官方已經(jīng)教我們?cè)趺磳?xiě)定時(shí)觸發(fā)器了
2-2,定時(shí)觸發(fā)器時(shí)間設(shè)置規(guī)則
建議大家仔細(xì)去讀下官方文檔。
下面是官方給出的一些示例
我這里就取用每隔5秒通過(guò)該定時(shí)觸發(fā)器調(diào)用下我們的云函數(shù),實(shí)現(xiàn)訂閱消息的發(fā)送。
2-3,添加定時(shí)觸發(fā)器
添加步驟如下圖,我們需要新建一個(gè)云函數(shù)timer
我們要在timer云函數(shù)里調(diào)用我們的fasong云函數(shù)來(lái)實(shí)現(xiàn)發(fā)送功能
然后在timer文件夾下新建一個(gè)config.json文件


然后給config.json做如下配置

注意json里不能有注釋,配置好的觸發(fā)器如下

2-4,部署定時(shí)觸發(fā)器
添加好以后,記得部署觸發(fā)器

2-5,定時(shí)發(fā)送效果
首先看定時(shí)觸發(fā)器是不是每隔5秒執(zhí)行了一次

然后看手機(jī)是否接到了消息

可以看出我們手機(jī)上每隔5秒也接到了消息。這里還是要記得多授權(quán)才可以多接消息。
當(dāng)然了,我們不可能這樣每隔5秒給客戶發(fā)條消息,這樣騷擾到客戶,很容易被封的,所以可以停止觸發(fā)器
2-6,停止觸發(fā)器

到這里我們的定時(shí)發(fā)送消息功能也實(shí)現(xiàn)了,當(dāng)然了我們要發(fā)給指定用戶,就要先去獲取用戶openid,并且得讓用戶多授權(quán)。