登录 / 注册
微信小程序如何检测接收iBeacon信号
发布时间:2017-09-27 11:34:49 查看:2514

前话

微信小程序开发带着许多坑,最近就遇到了个需求,检测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

宁夏银川舜新艺软件开发
ShunXinyi Soft develop
主要经营
软件开发,网站制作,网页设计,移动应用(安卓、苹果),微信,微网站,
FLASH动画,电子商务,计算机软硬件及网络设备等。
电话:18695132945 QQ:23923027
舜新艺软件开发 宁ICP备16001093号-1 宁公网安备 64010602000809号