先上效果圖:
最近做了一個小程序的服務通知,雖然做好了,但過程還是比較坎坷,記錄下,希望能給需要的伙伴一個參考
先上文檔:小程序服務通知訂閱消息開發文檔
第一步:根據官方文來,先在微信公眾平台登錄小程序后台配置模板,獲取模板id:,這塊的模版可以在公共模版庫里選。也可以新申請,但是需要3-7天才能出審核結果。
下面是模版生成的效果圖。
第二步,獲取下發權限
在獲取下發權限之前,需要先獲取小程序code和訂閱消息的模板id給服務端,以便后台人員進行服務端配置
// 這里是獲取下發權限地方,根據官方文檔,可以根據 wx.getSetting() 的 withSubscriptions 這個參數獲取用戶是否打開訂閱消息總開關。后面我們需要獲取用戶是否同意總是同意消息推送。所以這里要給它設置為true 。 wx.getSetting({ withSubscriptions: true, // 這里設置為true,下面才會返回mainSwitch success: function(res){ // 調起授權界面彈窗 if (res.subscriptionsSetting.mainSwitch) { // 用戶打開了訂閱消息總開關 if (res.subscriptionsSetting.itemSettings != null) { // 用戶同意總是保持是否推送消息的選擇, 這里表示以后不會再拉起推送消息的授權 let moIdState = res.subscriptionsSetting.itemSettings[tmplIds]; // 用戶同意的消息模板id if(moIdState === 'accept'){ console.log('接受了消息推送'); }else if(moIdState === 'reject'){ console.log("拒絕消息推送"); }else if(moIdState === 'ban'){ console.log("已被后台封禁"); } }else { // 當用戶沒有點擊 ’總是保持以上選擇,不再詢問‘ 按鈕。那每次執到這都會拉起授權彈窗 wx.showModal({ title: '提示', content:'請授權開通服務通知', showCancel: true, success: function (ress) { if (ress.confirm) { wx.requestSubscribeMessage({ // 調起消息訂閱界面 tmplIds: [tmplIds], success (res) { console.log('訂閱消息 成功 '); console.log(res); }, fail (er){ console.log("訂閱消息 失敗 "); console.log(er); } }) } } }) } }else { console.log('訂閱消息未開啟') } }, fail: function(error){ console.log(error); }, })
到這里小程序端的代碼就完了,第三步就是服務端要做的事情了。
這里說下需要注意的點:1.配置模板獲取模板id,是在小程序后台,而不是關聯的公眾號后台!!!
2. 授權彈窗需要用戶點擊才能拉起,比如直接在 onload 方法中是無法調起的,可以在需要拉起的地方做一個彈窗詢問,引導用戶點擊拉起授權
3.授權彈窗上的,總是保持以上選擇,不再詢問 這個選項,只有真機上有,模擬器上只有是否同意消息推送彈窗。建議測試直接上真機
4.后端 subscribeMessage.send 接口的請求參數 page , 配置路徑為 pages/index/index
5.在小程序的社區發現有小伙伴說,真機測試不敢點 總是詢問 的按鈕。怕點了,后面就再也沒辦法拉起授權測試了。其實開發人員一般都是用自己的微信測試的,微信開發工具上的清緩存菜單里面就有清除授權的選項,直接在開發工具里清掉,就相當於清掉了手機的授權。重新編譯預覽就能看見效果。 還是放一下圖吧: