微信官方爲提高小程序模板消息的使用體驗,調整了模板消息的下發條件。原有的模板消息將升級爲「訂閱消息」,而模板消息接口於2020 年 4 月 10 日下線(在 2020 年 1 月 10 日之後新發布的小程序只能使用訂閱消息),屆時將沒法再使用原接口推送模板消息,所以須要開發者及時進行調整。html
△ 微信官方最新消息node
不管是模板消息,仍是如今新的訂閱消息,發送小程序消息都是經過三步完成:小程序
從步驟來看,只有「獲取下發的權限」這一步是有變化的,其他都是相同的。segmentfault
當用戶在小程序內完成特定的交互行爲(支付或提交表單行爲)來收集 formid,後續利用該 formid 能夠在 7 天內任意時間給該用戶推送模板消息。微信小程序
當用戶在小程序內點擊特定按鈕後會彈出申請訂閱彈窗,贊成後小程序可在後續任意時間給該用戶推送服務通知。api
以前的「模板消息」下發是不須要用戶受權的,理論上能夠設計成用戶點擊一次就得到一次權限,這個過程當中用戶是無感知的,只要有了 formid,在公共模板庫裏有的都能下發,且數據類型沒有限制,用戶收到什麼消息徹底取決於開發者。數組
如今的「訂閱消息」更像是一個開關,須要用戶主動點擊受權以後才能獲取下發消息權限,用戶接不接收消息,接收什麼訂閱消息,決定權在用戶手裏。另外訂閱消息還嚴格控制了數據類型和長度,不符合要求的將沒法下發。(血淚教訓啊,而且你只有在添加模板以後才能知道這個字段是屬於什麼類型,對於帶變量的模板消息千萬要注意變量是否符合字段要求)。微信
「模板消息」與「訂閱消息」雖然都是爲了召回用戶以及推送消息提醒,但因爲模板消息推送的時間限制過於嚴格,相對於一些服務週期較長的小程序來講,7 天的限制不能提供完整的服務。app
例如機票類的小程序,用戶從訂票到出行,這間隔很大多是超過 7 天的,若是想給用戶發送「航班延誤提醒」等消息,頗有多是沒法實現的。所以,對於低頻、長線服務的小程序來講,「訂閱消息」是很是重要的。函數
另外,有少許的小程序會把「模板消息」當成營銷工具,用來推送廣告,誘導用戶點擊,這極大影響用戶的使用體驗。「訂閱消息」的上線完美的彌補了這兩個問題。
與「模板消息」不一樣,如今是須要用戶受權訂閱後才能下發消息,對於剛需的服務場景,例如外賣小程序的「外賣派送消息」以及電商小程序的「到貨通知」等場景,訂閱率都是比較高的。
而非剛需的服務場景,則能夠對用戶進行「引導訂閱」,因此首先要讓用戶主動觸發訂閱。例如,對電商小程序來講,能夠引導用戶訂閱心儀商品的「降價通知」;而內容類小程序,能夠引導用戶訂閱其感興趣的話題等。
觸發用戶訂閱,微信小程序提供的 api 是:wx.requestSubscribeMessage,觸發條件必須是用戶點擊行爲(bindtap 事件)或發起支付回調後才能調起訂閱消息界面。像 form 表單的 bindsubmit 事件就不行,若是原先在 form 表單中獲取 formid 要升級成訂閱消息,這裏提供兩個思路參考:
當用戶點擊按鈕觸發訂閱彈窗的時候,同時跳轉頁面的話,在安卓上是能正常在已跳轉的頁面顯示訂閱彈窗,在 iOS 上則不會正常顯示,而是在上一個頁面顯示彈窗。因此從用戶體驗角度以及爲了能正常收集到訂閱記錄,必須等完成訂閱後才進行跳轉。
當用戶勾選了「老是保持以上選擇,再也不詢問」時,那麼將不再會喚起這個彈窗。同時,若是選擇「取消」,那麼之後每次調用這個 api 的時候,都會自動拒絕;若是選擇「容許」,則每次都會自動容許受權。
目前,可使用 wx.getSetting() 來獲取用戶訂閱消息的訂閱狀態,詳情可查看官方文檔。所需基礎版本庫爲 2.10.0 ,即微信版本 7.0.9 及以上。
在一些特定元素觸發申請訂閱權限的條件下(好比上述經過 wx.showModal 來喚起訂閱界面),能夠根據訂閱狀態來判斷是否觸發。使用 wx.getSetting() ,能夠獲取用戶是否有勾選「老是保持以上選擇,再也不詢問」以及對該條訂閱消息的訂閱狀態。當 wx.getSetting() 返回用戶拒絕訂閱該條訂閱消息就不顯示 wx.showModal 的引導訂閱彈窗。
wx.requestSubscribeMessage 一次調用最多可訂閱 3 條消息,即 tmplIds 最多爲 3 個。iOS 客戶端 7.0.6 版本、Android 客戶端 7.0.7 版本以後的一次性訂閱/長期訂閱才支持多個模板消息,iOS 客戶端 7.0.5 版本、Android 客戶端 7.0.6 版本以前的一次訂閱只支持一個模板消息。詳情可看官方文檔。
發送訂閱消息必須嚴格按照「訂閱消息參數值內容限制說明」來進行填寫。
建立模板的時候,根據選擇的關鍵字不一樣,在發送訂閱消息的時候,需按照上述表格的說明進行填寫內容,如不符合參數限制的,則會發送失敗。例如,圖上的 name.DATA 是10 個之內的純漢字或 20 個之內的純字母或符號,若是參數值是 知曉雲 2020 則會報 data.name1.value invalid 錯誤;phrase.DATA 的參數值若是超過 5 個漢字一樣是報錯。
經過以上的防坑指南,可讓小程序開發者少走些彎路,在 deadline 的最後一刻,也能輕鬆快速完成升級。接下來將經過知曉雲的「知曉推送」,手把手教你如何接入訂閱消息。
「 知曉推送打通不一樣平臺間的消息推送障礙,運營者能夠同時將通知推送至微信小程序、QQ 小程序、支付寶小程序、Android、iOS 等多個平臺。無需編碼,開箱即用,一站式完成用戶觸達。輕鬆完成消息推送、用戶轉化、數據分析等多個層面的工做。」
開發者能夠在知曉推送頁面進入訂閱消息接入嚮導:
前三步與接入微信相似,詳情可查看微信小程序接入,在「接入 SDK」處須要填入 AppScret,AppSecret 用於開通模板消息服務,在小程序後臺「設置 - 開發設置」中查看。
根據引導進行上報訂閱消息。
經過校驗後即完成接入。
在模板庫中搜索合適的模板,點擊選用,選擇須要的關鍵詞後提交便可完成模板建立。
在「個人模板」能夠查看、添加和刪除模板,在這裏獲取模板 ID。
微信小程序提供了 wx.requestSubscribeMessage 接口來發起申請訂閱權限界面。
知曉雲提供了 wx.BaaS.subscribeMessage(options) SDK 來進行收集訂閱狀態。
Subscription
用戶發生點擊行爲或者發起支付回調後,調起訂閱消息界面,經過 SDK 上報訂閱狀態。
在函數內咱們會調用微信 API wx.requestSubscribeMessage 申請發送訂閱權限,彈窗出來後,咱們會收到 success 回調,當用戶在彈窗贊成訂閱後,即上報訂閱結果爲 accept ,將訂閱的 template_id (模板 ID)和 subscription_type(訂閱類型)存入 subscription 數組中,最後在調用 SDK 進行上報便可。
在「訂閱記錄」查看和操做收集到的訂閱記錄。
經過在「訂閱消息」給用戶在線發送訂閱消息。填入所需的內容,能夠選擇當即發送或定時發送。
在篩選目標用戶時,建議開發者使用智能過濾服務,以保證模板消息的觸達率和轉化率。
點擊「引擎」-「觸發器」便可建立新的觸發器。
觸發類型:即觸發源,每一個觸發器都只能選定一種觸發類型,不一樣的觸發類型可執行的動做選項也不同。
當選定觸發類型後,開發者須要指定觸發條件來觸發後續動做的執行,觸發條件與觸發類型一一相關,當知足觸發條件的時候便可觸發該觸發器。
動做類型選擇「發送訂閱消息」,與在線發送相似,填入相關內容,經過模板校驗後便可完成觸發器建立。若是所示,updated_at 存的是字符串,可使用 {{updated_at | date:"Y年m月d日 H:i"}} 這種 filter 形式進行轉換。另外能夠點擊「添加動做」繼續設置動做。
更多內容可查看知曉雲-觸發器教程
經過「引擎」-「雲函數」-「添加」便可完成雲函數的建立。
編寫完雲函數後點擊保存即完成雲函數的修改。
當須要發送的訂閱消息邏輯較爲複雜時,能夠經過編寫雲函數進行觸發。
詳情可參考開發文檔中的章節《使用雲函數發送訂閱消息》。
發送訂閱消息必須嚴格按照「訂閱消息參數值內容限制說明」來進行填寫,「在線發送」以及「觸發器」設置動做中已有模板對應的參數值限制。如參數值錯誤,將致使發送失敗,發送詳情可在「知曉推送」-「日誌」處查看。
訪問「知曉雲」,讓你的小程序開發快人一步
掃描下方二維碼,關注知曉雲公衆號,回覆「學技術」,便可得到更多小程序開發教程。