本文僅介紹微信硬件藍牙開發(fā)前端部分基本流程和可能遇到的坑
所需材料:
- 基本的前端三件套(
HTML
,CSS
,JS
) - js-sdk
配置:
wx.config({
beta: true, //必須配置這個為true,才能調(diào)用微信的硬件API
debug: true, //是否開啟調(diào)試模式粘勒,會自動彈一些消息框顯示微信返回的數(shù)據(jù)
appId: 公眾號的唯一標識, //后臺給的
timestamp: 時間戳, //后臺給的
nonceStr: 隨機字符串, //后臺給的
signature: 證書, //后臺給的
jsApiList: [ //所有需要調(diào)用的接口
"openWXDeviceLib", //初始化設備庫(只支持藍牙設備)
"closeWXDeviceLib", //關(guān)閉設備庫(只支持藍牙設備)
"getWXDeviceInfos", //獲取當前用戶已綁定的藍牙設備列表
"sendDataToWXDevice", //發(fā)送數(shù)據(jù)給設備
"startScanWXDevice", //掃描設備(無論綁定還是未被綁定的設備都會掃描到)
"stopScanWXDevice", //停止掃描設備
"connectWXDevice", //連接設備
"disconnectWXDevice", //斷開設備連接
"getWXDeviceTicket", //獲取綁定或解綁硬件的操作憑證
//如果需要其他js api可繼續(xù)添加
//監(jiān)聽事件:
"onWXDeviceBindStateChange", //監(jiān)聽硬件設備綁定狀態(tài)
"onWXDeviceStateChange", //監(jiān)聽連接狀態(tài)蜒谤,可以監(jiān)聽連接中、已連接晶渠、連接斷開
"onReceiveDataFromWXDevice", //監(jiān)聽接收來自硬件設備的數(shù)據(jù)
"onScanWXDeviceResult", //監(jiān)聽掃描到的設備
"onWXDeviceBluetoothStateChange", //監(jiān)聽手機藍牙打開或關(guān)閉
]
});
最基本的調(diào)用:
wx.ready(() => {
// config配置成功后調(diào)用罕伯,所有微信api操作都應在config配置成功后進行曲伊。
wx.invoke('openWXDeviceLib', { //初始化硬件設備庫
'brandUserName': 'gh_xxxxxxxxxx' //必須加上這個公眾號原始ID,否則部分機型無法初始化
}, (res) => {
//res結(jié)果可參考文章底部的微信硬件平臺說明文檔追他,或者自己試著輸出看看
});
});
wx.error((res) => {
// config配置失敗調(diào)用坟募。
});
調(diào)用方法和監(jiān)聽的基本形式:
wx.invoke(jsApiName, params, callback); //方法,所有方法的參數(shù)params都含有默認的'connType': 'blue'字段邑狸,此字段可寫可不寫
wx.on(listenName, callback); //監(jiān)聽
坑:即使不想寫
params
參數(shù)懈糯,也要加個空對象{}
傳參
例子(更多方法和事件可查閱微信硬件平臺說明文檔):
wx.on('onReceiveDataFromWXDevice', (res) => {
console.log(Base64.decode(res.base64Data)); //發(fā)送數(shù)據(jù)和接收數(shù)據(jù)都需要base64編碼和解碼,下載一個Base64.js即可
});
wx.invoke('sendDataToWXDevice', {
'deviceId': deviceId,
'connType': 'blue',
'base64Data': Base64.encode(data)
}, (res) => {
//用于發(fā)送數(shù)據(jù)(指令)給設備
});
注意事項:
- 流程(在回調(diào)中執(zhí)行下一步):初始化 -> 掃描設備 -> 綁定設備(通過
getWXDeviceTicket
方法獲取ticket
单雾,并發(fā)送給后臺進行綁定昂利,在監(jiān)聽綁定狀態(tài)事件中獲知是否綁定成功) -> 連接設備(在監(jiān)聽綁定狀態(tài)事件中獲知是否連接成功) -> 發(fā)送數(shù)據(jù)(數(shù)據(jù)都需要經(jīng)過Base64
編碼和解碼,在監(jiān)聽接收設備數(shù)據(jù)中獲取設備發(fā)送的數(shù)據(jù)) - 在掃描設備時铁坎,已被連接或者已被綁定的設備可能無法被掃描到。
- 停止掃描沒有效果的解決辦法:直接使用
closeWXDeviceLib
關(guān)閉設備犁苏,下次掃描再重新打開硬萍。 - 掃描一次后,刷新頁面或者跳轉(zhuǎn)頁面再回來無法再掃描到任何設備解決辦法:每次掃描前使用
closeWXDeviceLib
關(guān)閉設備再openWXDeviceLib
重新打開围详,然后再進行掃描操作朴乖。 - 在綁定設備時,如果已被綁定過助赞,則無法通過監(jiān)聽獲知是否綁定成功买羞,只能通過獲取設備信息(
getWXDeviceInfos
),并遍歷結(jié)果獲知設備是否綁定雹食,因此綁定成功回調(diào)方法應同時寫在監(jiān)聽事件中和獲取設備信息中畜普。 - 一些設備在綁定成功后自動連接,同理第5點群叶,連接成功回調(diào)方法應同時寫在監(jiān)聽事件中和獲取設備信息中吃挑。
- 為解決第5弓摘、6點存在的問題籽慢,建議進入頁面時先獲取設備信息并保存下來,在綁定和連接操作的時候即時更新設備信息长赞,在后續(xù)方法中可減少操作赎离。
- 使用微信web開發(fā)者工具移動端調(diào)試時逛犹,不會有報錯信息!!虽画!代碼中斷了代表你寫錯了舞蔽,不用懷疑。(使用X5 Blink內(nèi)核調(diào)試除外)
- 只能掃描到關(guān)注了的公眾號綁定的硬件狸捕,同一硬件不可被多個公眾號綁定使用喷鸽。
- 如果發(fā)送命令后沒有返回數(shù)據(jù),可嘗試多次重發(fā)灸拍。
- 在項目上做祝,極有可能流程卡在一些綁定、連接鸡岗、發(fā)送數(shù)據(jù)操作上混槐,重試和無回應或錯誤提示是有必要的。