1.功能
- 訂閱消息推送位置:服務通知
- 訂閱消息下發條件:用戶自主訂閱
- 訂閱消息卡片跳轉能力:點擊查看詳情可跳轉至該小程序的頁面
2.訂閱流程
步驟一:獲取模板 ID
在微信公眾平台手動配置獲取模板 ID:
登錄 https://mp.weixin.qq.com 獲取模板,如果沒有合適的模板,可以申請添加新模板,審核通過后可使用。
步驟二:獲取下發權限
詳見小程序端消息訂閱接口 wx.requestSubscribeMessage
步驟三:調用接口下發訂閱消息
詳見服務端消息發送接口 subscribeMessage.send
注意事項
- 用戶勾選 “總是保持以上選擇,不再詢問” 之后,下次訂閱調用 wx.requestSubscribeMessage 不會彈窗,保持之前的選擇,修改選擇需要打開小程序設置進行修改。
3.用戶點擊案例分析
3.1.用戶取消訂閱
用戶點擊“取消”按鈕,回調結果
第二次點擊會重新彈窗授權
3.2.多個訂閱消息只訂閱了其中一個訂閱
比如,現在有兩個訂閱消息,第一個你勾選了,第二個沒勾選。然后點擊“允許”按鈕
回調結果中顯示允許了一個訂閱內容,‘accept’表示同意,‘reject’表示拒絕
第二次點擊不會重新彈窗授權的,回調直接顯示如上相同內容。
3.3.全部允許訂閱
勾選所有訂閱消息,並點擊“允許”按鈕。回調結果
第二次點擊不會重新彈窗授權的
3.4.拒絕不再詢問
點擊最下方“拒絕不再詢問”按鈕
第二次點擊不會重新彈窗授權的
3.5.用戶手動關閉訂閱按鈕
用戶再次請求不會重新彈窗授權,提示按鈕是關閉狀態
4.獲取用戶訂閱通知權限記錄
為了獲取具體訂閱消息結果,我們需要傳遞參數withSubscriptions,微信文檔描述如下:
5.點擊查看詳情可跳轉至該小程序的頁面
當用戶訂閱消息后,服務端可以通過接口發送訂閱消息,用戶微信客戶端接收到訂閱消息后,點擊可跳轉至小程序內頁面。
5.1后端發送訂閱消息卡片示例
5.2發送訂閱消息接口參數
send接口配置跳轉小程序頁面參數如下:
page取值
eg:
若 page = "page/index2/index2?a=1&b=2"。
表示用戶收到服務端推送的訂閱消息后,點擊訂閱消息卡片后,將會直接跳轉至小程序路由"page/index2/index2"所對應的頁面。"?"后面的內容表示跳轉頁面時所攜帶的query請求參數。
miniprogram_state在開發模式下,應該配置為'developer'值,選為體驗版本配置值為'trail',線上版本配置值為'formal'。配置不正確的話,微信上是收不到訂閱消息的。
5.3小程序頁面接收訂閱消息傳遞的參數
點擊卡片后,小程序跳轉頁面(如上描述的page/index2/index2頁面),在onLoad生命周期函數中將會可以接收到所攜帶的query請求參數。如下圖所示:
巨坑,不要在onLaunch中或者用"wx.getLaunchOptionsSync()"接收訂閱消息參數(雖然也能收到),因為和小程序冷啟動有關,每次取得數據都將會是第一次啟動時的參數。
6.問題總結
- ①,wx.requestSubscribeMessage請求訂閱消息權限api只能在點擊按鈕的時候,同步請求該api,若在異步操作后請求訂閱消息權限,則會報錯提示“需要用戶手勢點擊操作”
- ②,若用戶拒絕過(1,對於多選的訂閱,若有一條沒有被允許,就相當於有一條被拒絕;2,點擊拒絕不再訪問),第二次請求將不再彈窗授權。
處理:wx.openSetting() 打開設置界面,用戶手動開啟訂閱開關,從而開啟授權。當然用戶全部允許訂閱之后,也是不會重新彈窗授權的。
- ③,wx.openSetting() 的回調中,沒有訂閱消息的相關授權數據,做法可以在回調函數中,主動wx.getSetting()獲取訂閱消息授權數據。參考④
- ④,wx.getSetting() 獲取訂閱消息授權記錄需要額外參數 withSubscriptions:true .
7.待解決問題
7.1.已接收訂閱消息會顯示已經拒絕標志
7.2.用戶授權過,不能清除授權記錄
若用戶點擊過訂閱消息的允許或者拒絕,目前還沒有找到方法可以清除用戶訂閱消息授權記錄。(卸載小程序也不行)
以下截圖為小程序官網對授權有效期的描述內容,但是對於訂閱消息的授權,卸載小程序發現不可清除授權記錄。(實測無效)以下為微信小程序官網對授權有效期的描述。
7.3.用戶主動開啟或者關閉訂閱消息的授權
用戶主動在設置界面開啟或者關閉訂閱消息的授權,小程序界面沒有提供監聽回調方法,需要主動查詢授權信息(wx.getSetting())