【技術】微信小程序開發之訂閱消息

1.簡介

做過微信小程序開發的小夥伴應該都有被微信小程序的消息下發機制困擾過,在此之前小程序僅能通過模板消息的形式向用戶推送消息通知,而模板消息下發有諸多的限制,僅能通過表單提交或微信支付的形式獲得模板消息推送的能力,且該能力的有效期僅爲7天。

2019年10月微信團隊針對小程序消息推送問題推出了訂閱消息功能。「 請注意,小程序原有的模板消息接口將於2020年1月10日下線,開發者屆時可使用 訂閱消息功能 替代 」

現在這個困擾微信小程序開發者的問題,通過微信訂閱消息的形式基本可以解決,雖不是小程序消息推送最佳的解決的方案,但相比之前的方式已有了很不錯的改善。

說了這麼多,訂閱消息究竟是個神馬玩意?如何使用呢? 客官莫急,現在就爲大家詳細介紹。

2.訂閱消息

消息能力是小程序衆多能力中的重要組成部分,訂閱消息推出的目的即是方便開發者實現服務的閉環和更優的體驗。

訂閱消息推送位置:服務通知
訂閱消息下發條件:用戶自主訂閱
訂閱消息卡片跳轉能力:點擊查看詳情可跳轉至該小程序的頁面

訂閱消息分類

1、一次性訂閱消息
用戶訂閱一次後,開發者可下發一條消息,不限時間,若用戶勾選了“總是保持以上選擇,不再詢問”且點擊了允許,那麼以後都默認同意訂閱這條消息,用戶不用再做多次選擇,開發者也避免了更繁瑣的提醒。

2、長期性訂閱消息
用戶訂閱一次後,可長期下發多條消息,目前長期性訂閱消息僅向 政務、醫療、交通、金融、教育 等線下公共服務開放,後續將綜合評估行業需求和用戶體驗持續完善(長期訂閱消息只針對特定行業開放,且非全量開放,所以普通開發者暫時無法使用)。

訂閱消息與模板消息的區別

1、將選擇權迴歸到用戶手中,在小程序中,跟用戶信息授權一樣,訂閱消息也需要用戶主動點擊授權之後,小程序才能向其推送服務通知,當然,用戶也可以隨時拒收該小程序的服務通知,而模板消息用戶只能被動地接收消息。

2、有效時長不受限制,訂閱消息取消了模板消息7天內推送消息的時間限制,只要用戶沒有主動拒收消息推送(可在小程序右上角設置中配置),開發者就可以隨時向已授權的用戶推送服務通知,對於服務週期超過7天的小程序而言,這無疑解決了之前讓人苦惱的問題。

使用說明

步驟一:獲取模板 ID
在微信公衆平臺手動配置獲取模板 ID:
登錄 https://mp.weixin.qq.com 獲取模板,如果沒有合適的模板,可以申請添加新模板,審覈通過後可使用。

步驟二:獲取下發權限
詳見小程序端消息訂閱接口 wx.requestSubscribeMessage
示例代碼:

let tmpIds = [
"dkP5gIBOedafCVvzPkK4de2Rllr1fFpw2A",
"dkP5gIBOghdafCVvzPkK4dRllr1fFpwOPK"
];
wx.requestSubscribeMessage({
  tmplIds: tmpIds,
  success (res) {
   let acceptTmpList = [];
   for(let i = 0; i < tmpIds.length; i++ )
   {
      let tmpId = tmpIds[i];
      if(res[tmpId] == "accept")
      {
        acceptTmpList.push(tmpId);
      }
    }
    /** 
    將收集到的用戶授權的模板數組提交到後臺即可
    注意:7.0.5 微信版本開始,用戶發生點擊行爲或者發起支付回調  
    後,纔可以調起訂閱消息界面,同一授權請求的模板ID數超過3個
    以上會出現不能彈出授權彈框的問題;且會報錯Templates count 
    out of max bounds。
    **/ 
   }
  });

步驟三:調用接口下發訂閱消息
詳見服務端消息發送接口 subscribeMessage.send

3.常見問題

1、wx.requestSubscribeMessage 提示 is not a function

出現這種問題一般是基礎庫版本太低,在微信開發者工具中將調試基礎庫版本設置爲大於 2.8.2 即可。

2、wx.requestSubscribeMessage 不彈出授權窗體

在基礎庫版本大於2.8.2的前提下,此問題是由於tmplIds 數量超過3個導致的(試過一次性訂閱消息,長期訂閱消息未試過),將授權請求的模板ID數組調至不超過3個即可。

3、requestSubscribeMessage:fail can only be invoked by user TAP gesture.

此報錯是因爲在非bindtap事件(包括form submit事件)中調用了requestSubscribeMessage 方法。如果要在form submit事件中執行requestSubscribeMessage方法,可以加入wx.showModal()在showModal的回調事件中執行,親測可行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章