天天看點

微信小程式訂閱消息說明

最近一段時間剛好接觸到微信小程式的訂閱消息,摸索了好久終于搞清楚它到底是怎麼樣的一個機制了,特此發表本文以幫助大家去了解和內建小程式訂閱消息

1、關于訂閱消息的官方文檔連結:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/subscribe-message/wx.requestSubscribeMessage.html

2、當需要使用小程式的訂閱消息的時候,需要先前往小程式管理背景去新增你的模闆,所提供的公共模闆是根據小程式在注冊的時候所選的行業而來的,為滿足使用者自定義的需求,微信官方提供了“申請模闆”的功能(在申請前最好先确認下公共模闆庫中是否已經有了對應的模闆,如果存在的話,則無法稽核通過),如下圖所示

微信小程式訂閱消息說明
微信小程式訂閱消息說明

3、添加完成後,在我的模闆可以看到各模闆的id,這些id就是在使用者訂閱的時候需要作為參數傳遞進去的。具體如上圖馬賽克部分所示

4、當選擇好對應的模闆消息之後,可調用”wx.requestSubscribeMessage(Object object)”方法對需要對應的消息進行訂閱操作,如下圖所示可一次訂閱多條消息,官方的限制是3條。為了解決這個限制,可以如下圖将每一條區分開來,同時也讓使用者能夠更清晰的了解自己到底要訂閱什麼消息

微信小程式訂閱消息說明
微信小程式訂閱消息說明

5、接下來對上圖做一個說明: 訂閱消息的意思:使用者訂閱了某條消息,伺服器才可以針對這條消息進行推送。具體的訂閱如下圖所示

微信小程式訂閱消息說明

當使用者點選某個訂閱按鈕,實際是調用”wx.requestSubscribeMessage(Object object)”方法,就會出現如上圖所示彈窗。當使用者勾選了“總是保持以上選擇,不再詢問”的時候或者在設定訂閱消息的頁面關閉了通知,則不會出現該彈窗,如下圖未選中的狀态所示:

微信小程式訂閱消息說明

6、此時問題就出現了,如下圖瑞幸咖啡小程式所示:

微信小程式訂閱消息說明
微信小程式訂閱消息說明

其實當使用者勾選了“總是保持以上選擇,不再詢問”并不是就可以一直通知使用者了,而是不再彈窗罷了。

7、此時另外一個問題來了,在使用者點選訂閱按鈕并同意之後,小程式并不會告訴你使用者究竟訂閱(點選)了多少次,需要這個次數得我們自己進行維護。

8、然後針對訂閱消息,在頂部有一個總開關,可以控制全部訂閱消息的通知與否。當使用者關閉的時候就不會收到通知了。此處還有另外一個問題就是總開關在開啟的情況下,使用者是可以針對某一條訂閱消息進行關閉的,如下圖中未選中的“稽核結果通知”所示,此時就算使用者開啟了總開關,但單條訂閱消息未開啟的情況下,針對該條訂閱消息的通知也是沒辦法收到的。是以這個狀态也是需要我們進行維護的。

微信小程式訂閱消息說明

9、此處還有一點比較坑,那就是使用者針對某一條訂閱消息開啟了通知并且訂閱(點選)了很多次,然後在設定頁面将該條消息關閉了,然後再次重新開啟的時候,之前訂閱的次數将會變為0,也就是說使用者之前辛苦訂閱的次數将會消失,是以需要特别提醒使用者。

10、然後針對每個小程式賬号,可以發送訂閱消息的次數是有限的,詳情如下圖所示: 

微信小程式訂閱消息說明

是以說我們更應該自己來控制使用者針對訂閱消息的開關狀态了,如果使用者明明未開啟通知,你還進行通知的話,小程式接口不僅會報錯,還會浪費通知次數(此處待驗證,因為給的額度實在有點高)

11、針對以上問題以及參考網友的文章https://developers.weixin.qq.com/community/develop/article/doc/0008802e8381e0eeabb92c9975b013 我做了如下的界面及提升

微信小程式訂閱消息說明
  • 通過接口擷取我在資料庫配置的全部的訂閱消息
  • 針對每一條消息追加一個訂閱+1的按鈕,每當點選一次且使用者同意的時候我将該條記錄推送到伺服器将使用者的訂閱次數+1
  • 然後當使用者進入到設定頁面操作了總開關(開啟或關閉)以及針對特定訂閱消息進行了操作的時候(開啟或關閉),都推送到伺服器儲存到資料庫,然後在需要推送的時候查詢下使用者是否開啟了總開關以及針對特定消息是否開啟了開關(對應訂閱此時是否為0),如果都開啟了則在推送成功之後将對應的次數進行減1一操作
  • 若使用者針對特定訂閱消息訂閱了多次,然後關閉後再次開啟訂閱消息的時候,我會調用伺服器将對應的訂閱次數置為0,因為此時調用推送的話也是不會成功的

  最終結論: 依據你的業務場景,如果你的某個訂閱消息(如新訂單)需要多次的進行推送,此時就需要使用者進行多次的訂閱,當訂閱次數用完使用者沒有繼續訂閱的話,則新的訂閱消息是會發送失敗的(也就是在使用者小程式端是沒有任何通知的)。 若你的業務場景下某個訂閱消息隻需要推送一次,那麼讓使用者點選一次就可以了。 如果使用者開啟了訂閱消息的總開關,但是針對某條資訊進行了關閉,此時該條消息也是收不到的 還有一種場景:使用者針對A訂閱消息訂閱了10次,此時使用者去到設定頁面針對A訂閱消息進行了關閉,然後再開啟的情況下,使用者之前的訂閱(10次)将失效,也就是需要使用者重新訂閱  

小程式前端頁面代碼已上傳至碼雲,歡迎各位下載下傳使用。(其中網絡請求部分需要各位進行補充,含對應資料庫檔案):https://gitee.com/hppwz/wechat_program_subscription_message  

B站教程: https://space.bilibili.com/317440371/channel/detail?cid=113755  

注意:

  1. 其中的網絡請求部分已被我删除,需自行編寫對應的網絡請求
  2. 為了保證效果,我的代碼還是修改為了使用者點選一次請求一次網絡。否則,當使用者長時間停留在訂閱消息設定頁面的時候,此處伺服器端發送了很多的訂閱消息給該使用者,當該使用者傳回的時候直接将目前頁面各個消息的訂閱次數更新到了伺服器,就會導緻于實際不符。
  3. 在訂閱消息總開關開啟的情況下,使用者也是可以針對某一條訂閱資訊進行關閉操作,是以需要将每一條訂閱消息的開關狀态上傳到伺服器