- 需求的场景描述(希望解决的问题)
根据uuid获取附近的beacon设备信息
调用wx.getBeacons接口后获取到beacon设备的uuid、major、minor、proximity、rssi、accuracy,但没有beacon设备的MAC地址和广播数据,因此又调用wx.getBluetoothDevices蓝牙接口获取到蓝牙列表,判断设备的localname是否是beacon设置的name,从而取得deviceID、serviceData信息,但是没有uuid字段。
那么问题来了,如何把俩个接口获取到的信息整合在一块呢
wx.getBeacons接口得到beacon设备列表
[{
uuid:1,
major:1,
minor:1,
proximity:1,
rssi:1,
accuracy:1
},
{
uuid:2,
major:2,
minor:2,
proximity:2,
rssi:2,
accuracy:2
}
]
wx.getBluetoothDevices接口通过过滤得到beacon设备列表
[{
localName:"设备1",
searviceData:1,
deviceId:1,
advertisServiceUUIDs:1
},
{
localName:"设备2",
searviceData:2,
deviceId:2,
advertisServiceUUIDs:2
}
]
如何将俩个接口获取到的设备信息一一对应呢,如何整合在一块呢
不对啊,我已经在ios设备上获取到了mac地址,是从蓝牙接口中的serviceData字段。
这里不理解为什么要整合,小程序接口层无法提供这种能力的。
beacon 设备本身就是用 beaconUUID、majorID、minorID 来标识自身的,开发者只需要关注这三个字段来标识特定的某个 beacon 设备,系统的 beacon 接口是无法获取到 beacon 设备的 deviceId 的。
beaconUUID、majorID、minorID不都是可以自定义么,怎么用来标识,我的想法是利用mac地址判断
设备的配置权限一般都在开发者手上啊,肯定可以用来标识单一设备的呀,一般 beacon 就是用这三个字段来标识的。
比如说一个恶意的用户,也有一个beacon设备,他也修改为和我的beacon设备相同的uuid、major、minior,然后打开app连接自己的beacon设备进行领券之类的交易,我的程序怎么区分,难道只要这三个的值有效,我就信任吗
我明白你的意思了,我能想到的有这些:
iBeacon 作为开放协议,设备是可能被竞争企业或者恶意开发者伪造的。这里你也可以搜索一下,业界也出了一些解决方案,但是没有从根本上解决这个问题。
beacon 用处是室内定位,你也可以用 wx.getLocation 获取用户定位,协助你的 beacon 信息大致确定 beacon 的可信度,如果开发者的 beacon 部署在你的 beacon 的旁边,那他的 beacon 和你的 beacon 有什么区别呢?
beacon 设备本身是 BLE 设备,的确按你的想法,如果能根据 iBeacon 协议对设备的广播段数据做解析,是可以将 beacon 三字段(beaconUUID,major,minor)与 deviceId 做映射的,但这里有个无法解决的问题,iOS 系统无法获取到设备真实 Mac 地址,所以是无法提前做出有效的映射关系的。
不对啊,我已经在ios设备上获取到了mac地址,是从蓝牙接口中的serviceData字段。
var str = ab2hex(res.devices[0].serviceData[res.devices[0].advertisServiceUUIDs[0]]),
mac = str.substring(str.length- 12);