原本以為這個功能節省了我要在 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
三、一次性訂閱消息,每授權一次只能接收一條
這個真的是整個流程走完了才發現,一次性訂閱它真的就是一次性!!如果用戶沒有勾選 【總是保持以上選擇,不在詢問】 那么就算是授權也只能收到一條消息,但是長期訂閱消息只針對特定行業開放(目前長期性訂閱消息向政務、醫療、交通、金融、教育等線下公共服務開放),所以普通開發者要想其他的辦法了
解決方法:
可以引導用戶關注公眾號,在公眾號發送通知
以上是我開發時候遇到的問題和解決辦法,希望給大家做個參考,有問題歡迎給我留言哦~