原本以為這個功能節省了我要在 button 上做手腳的時間,沒想到真的是坑好多
一、開發者工具調用 wx.requestSubscribeMessage 報錯
一開始開發者工具調用這個 wx.requestSubscribeMessage 這個方法就報錯,之后才發現是版本庫的問題,基礎庫 2.8.2 開始支持

解決方法:
需要在這個修改到 2.8.2 以上

二、手機端調用 wx.requestSubscribeMessage 報錯
開發者工具使用正常,手機真機調試報錯,又去仔細看了看文檔,是手機端基礎庫版本不夠的原因,也就是微信版本太低

又去查文檔,關於基礎庫版本和微信版本關系,發現其實文檔也說明這一點了,是我沒get到這個點
基礎庫版本官方文檔:https://developers.weixin.qq.com/miniprogram/dev/framework/client-lib/version.html


解決方法:
我的辦法是先用wx.getSystemInfo 方法獲取到手機信息,在直接對比基礎庫版本,官方有比較版本的方法
// 獲取手機微信版本
wx.getSystemInfo({
success: function(res) {
// 返回手機型號、微信版本、基礎庫版本等信息
// 判斷基礎庫版本是否到 2.8.2
if (res.errMsg == "getSystemInfo:ok" && that.compareVersion(res.SDKVersion, '2.8.2') >= 0) {
// 支持訂閱消息授權
// 執行你的功能
console.log('支持')
} else {
// 不支持訂閱消息授權
console.log('不支持')
wx.showModal({
title: '提示',
content: '當前微信版本過低,無法使用該功能,請升級到最新微信版本后重試。'
})
}
}
})
比較版本方法
compareVersion(v1, v2) {
// 比較微信版本
v1 = v1.split('.')
v2 = v2.split('.')
var len = Math.max(v1.length, v2.length)
while (v1.length < len) {
v1.push('0')
}
while (v2.length < len) {
v2.push('0')
}
for (var i = 0; i < len; i++) {
var num1 = parseInt(v1[i])
var num2 = parseInt(v2[i])
if (num1 > num2) {
// v1 版本大於 v2
return 1
} else if (num1 < num2) {
// v1 版本小於 v2
return -1
}
}
// v1 版本等於 v2
return 0
},
官方文檔:https://developers.weixin.qq.com/miniprogram/dev/framework/compatibility.html
三、一次性訂閱消息,每授權一次只能接收一條
這個真的是整個流程走完了才發現,一次性訂閱它真的就是一次性!!如果用戶沒有勾選 【總是保持以上選擇,不在詢問】 那么就算是授權也只能收到一條消息,但是長期訂閱消息只針對特定行業開放(目前長期性訂閱消息向政務、醫療、交通、金融、教育等線下公共服務開放),所以普通開發者要想其他的辦法了

解決方法:
可以引導用戶關注公眾號,在公眾號發送通知
以上是我開發時候遇到的問題和解決辦法,希望給大家做個參考,有問題歡迎給我留言哦~
