前話
微信小程序開發帶着許多坑,最近就遇到了個需求,檢測iBeacon來進行地點簽到。
(╯▔皿▔)╯
微信小程序對於iBeacon的文檔也寫的十分精簡,只簡單介紹了每個接口的作用,這就導致我以為簡單調用單個接口即可實現功能,因此我就寫出了這樣的錯誤代碼邏輯 :
(╯‵□′)╯︵┻━┻
wx.startBeaconDiscovery({
uuids: ['xxxxx'],
success(res){
console.log('簽到成功')
},
fail(err){
console.log('簽到失敗')
}
})
結果是,點擊簽到按鈕調用該接口的時候,幾乎都是簽到失敗
(╯‵□′)╯炸彈!•••*~●。
當然,最后還是谷歌解決了,因為前人也踩了這個坑,因此我還是搬運過來,讓后人少受熬夜之苦 (;´༎ຶД༎ຶ`)
正題
廢話不多說,如果你要檢測接收iBeacon信號,建議按照這樣的接口調用步驟:
wx.stopBeaconDiscovery # 停止掃描
↑
setTimeout # 超時設置
↑
開始 → wx.startBeaconDiscovery # 開始掃描
︱
︱―fail(err)→結束
︱
success(res)
↓
wx.onBeaconUpdate # 監聽iBeacon信號
︱
︱―fail(err)→結束
︱
success(res)
↓
TODO
最后,我的代碼如下:
var devices = [];
// 開始掃描
wx.startBeaconDiscovery({
uuids: uuidArray,
success: function () {
console.log("開始掃描設備...");
// 監聽iBeacon信號
wx.onBeaconUpdate(function (res) {
// 請注意,官方文檔此處又有BUG,是res.beacons,不是beacons。
if (res && res.beacons && res.beacons.length > 0) {
devices = res.beacons;
// 此處最好檢測rssi是否等於0,等於0的話信號強度等信息不准確。我是5秒內重復掃描排重。
}
});
}
});
// 超時停止掃描
setTimeout(function () {
wx.stopBeaconDiscovery({
success: function () {
console.log("停止設備掃描!");
console.log(devices);
}
});
}, 5 * 1000);
OK,問題似乎不經意間被完美解決了( •̀ ω •́ )y