微信小程序开发带着许多坑,最近就遇到了个需求,检测iBeacon来进行地点签到。小程序
(╯▔皿▔)╯微信小程序
微信小程序对于iBeacon的文档也写的十分精简,只简单介绍了每一个接口的做用,这就致使我觉得简单调用单个接口便可实现功能,所以我就写出了这样的错误代码逻辑 :微信
(╯‵□′)╯︵┻━┻ui
wx.startBeaconDiscovery({ uuids: ['xxxxx'], success(res){ console.log('签到成功') }, fail(err){ console.log('签到失败') } })
结果是,点击签到按钮调用该接口的时候,几乎都是签到失败
code
(╯‵□′)╯炸弹!•••*~●。接口
固然,最后仍是谷歌解决了,由于前人也踩了这个坑,所以我仍是搬运过来,让后人少受熬夜之苦 (;´༎ຶД༎ຶ`)开发
废话很少说,若是你要检测接收iBeacon信号,建议按照这样的接口调用步骤:文档
wx.stopBeaconDiscovery # 中止扫描 ↑ setTimeout # 超时设置 ↑ 开始 → wx.startBeaconDiscovery # 开始扫描 ︱ ︱―fail(err)→结束 ︱ success(res) ↓ wx.onBeaconUpdate # 监听iBeacon信号 ︱ ︱―fail(err)→结束 ︱ success(res) ↓ TODO
最后,个人代码以下:io
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,问题彷佛不经意间被完美解决了( •̀ ω •́ )yconsole