先上效果圖:
第一步:根據(jù)官方文來(lái),先在微信公眾平臺(tái)登錄小程序后臺(tái)配置模板,獲取模板id:,這塊的模版可以在公共模版庫(kù)里選。也可以新申請(qǐng),但是需要3-7天才能出審核結(jié)果。
下面是模版生成的效果圖。
第二步,獲取下發(fā)權(quán)限
在獲取下發(fā)權(quán)限之前,需要先獲取小程序code和訂閱消息的模板id給服務(wù)端,以便后臺(tái)人員進(jìn)行服務(wù)端配置
// 這里是獲取下發(fā)權(quán)限地方,根據(jù)官方文檔,可以根據(jù) wx.getSetting() 的 withSubscriptions 這個(gè)參數(shù)獲取用戶是否打開訂閱消息總開關(guān)。后面我們需要獲取用戶是否同意總是同意消息推送。所以這里要給它設(shè)置為true 。
wx.getSetting({
withSubscriptions: true, // 這里設(shè)置為true,下面才會(huì)返回mainSwitch
success: function(res){
// 調(diào)起授權(quán)界面彈窗
if (res.subscriptionsSetting.mainSwitch) { // 用戶打開了訂閱消息總開關(guān)
if (res.subscriptionsSetting.itemSettings != null) { // 用戶同意總是保持是否推送消息的選擇, 這里表示以后不會(huì)再拉起推送消息的授權(quán)
let moIdState = res.subscriptionsSetting.itemSettings[tmplIds]; // 用戶同意的消息模板id
if(moIdState === 'accept'){
console.log('接受了消息推送');
}else if(moIdState === 'reject'){
console.log("拒絕消息推送");
}else if(moIdState === 'ban'){
console.log("已被后臺(tái)封禁");
}
}else {
// 當(dāng)用戶沒(méi)有點(diǎn)擊 ’總是保持以上選擇,不再詢問(wèn)' 按鈕。那每次執(zhí)到這都會(huì)拉起授權(quán)彈窗
wx.showModal({
title: '提示',
content:'請(qǐng)授權(quán)開通服務(wù)通知',
showCancel: true,
success: function (ress) {
if (ress.confirm) {
wx.requestSubscribeMessage({ // 調(diào)起消息訂閱界面
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);
},
})
到這里小程序端的代碼就完了,第三步就是服務(wù)端要做的事情了。
這里說(shuō)下需要注意的點(diǎn):在加上一個(gè)需要特別特別重要的問(wèn)題:授權(quán)彈窗上的總是保持以上選擇,意思是不再調(diào)起授權(quán)彈窗。但是下次推送消息還是需要用戶點(diǎn)擊授權(quán)的。這塊訂閱消息的邏輯是矛盾的。因?yàn)辄c(diǎn)了總是,那么授權(quán)彈窗是無(wú)法再次調(diào)起的,那用戶也就沒(méi)有授權(quán)入口。又怎么授權(quán)呢。官方解釋可以在小程序右上角設(shè)置里面打開權(quán)限。但up主親測(cè),當(dāng)后臺(tái)推送消息拒絕時(shí),小程序設(shè)置訂閱消息開啟無(wú)效。依然接收不到。
可以參考這個(gè):https://developers.weixin.qq.com/community/develop/doc/00002cae8c0c90766f8ab3a0451000?highLine=43101%2520%25E6%2580%25BB%25E6%2598%25AF
https://developers.weixin.qq.com/community/develop/article/doc/0006ac060e4e80183bc9654b856013(
微信官方解釋:https://developers.weixin.qq.com/community/develop/doc/00008a8a7d8310b6bf4975b635a401
2021.12.29 更新
上面遺留的問(wèn)題,點(diǎn)擊總是之后,無(wú)法進(jìn)行再次訂閱,評(píng)論區(qū)有童鞋提出了解決方案。
這里更新下:
點(diǎn)擊按鈕直接調(diào)wx.requestSubscribeMessage
即可,不做用戶是否打開訂閱消息的判斷,這樣在點(diǎn)擊總是...
之后,雖然沒(méi)有詢問(wèn)框,依然可以訂閱(已親測(cè),在此感謝小糖同學(xué)~??)
wx.requestSubscribeMessage({
tmplIds: tempId,
success: res => {
console.log('調(diào)起成功');
if (res[tempId[0]] === 'accept') {
console.log('允許')
}
if (res[tempId[0]] === 'reject') {
console.log('拒絕')
}
},
fail: err => {
if (err.errCode == 20004) {
console.log('關(guān)閉小程序主開關(guān)')
} else {
console.log('訂閱失敗')
}
}
});
聯(lián)系客服