基于 Bluetooth 技术的Beacon,最简单的理解就是一个小型的信息基站,可以应用在室内导航、移动支付、店内导购、人流分析、物品跟踪等等所有与人在室内流动相关的活动之中。随着时代的发展,现代人对移动设备越来越依赖,也有越来越多的活动在室内进行,而GPS这样的室外导航在室内中有些死角及易受建筑物的干扰,且从精准度和耗电量上不能满足室内定位的需求。因此,基于蓝牙技术的Beacon应运而生,成为理想的室内数据解决方案。Beacon技术做到的是通过Bluetooth Smart向通信覆盖范围内的移动设备捕捉和推送信息。2014年已经有许多机构开展了一些实验性项目,并有预测指出,2015年Beacon将在全球范围内将得到大力部署、并带来更多新型服务。ABI Research预测到2019年市场上的Beacon设备总数将达到六千万台,市场规模之大,可见一斑。
根据位置信息规划Beacon广告数据包中的Beacon ID,是Beacon实现诸多应用的重要前提。Beacon ID 数据可以通过设备上安装的APP在本地进行设置,也可发送至云端或网络以便远程操作。本地数据存储的好处在于它便于访问,而且没有网络也照样能够运行。而远程数据存储的情况下,用户使用的数据是相同的,但网络访问难免更耗时,因此要加倍注意确保用户体验不受影响。有时最佳的解决方案是采用“混搭”的方式,即将本地数据及时进行远程同步、并存储在APP的本地数据库中。这样,在没有网络的情况下,APP也能够使用最新的数据了。
对于首次建立应用程序类别的开发者,以下几点需要注意:首先,用AltBeacon API BeaconManager将APP与后台运行的AltBeacon库中的服务绑定。另外,要着手设定一个或多个“区域”。这里所说的“区域”是指一个或一组Beacon,由AltBeacon Beacon ID 域值来规定。Beacon ID域将20个八位字节的标识域分成1个16字节的主ID、1个2字节的二级ID、1个2字节的三级ID。在我的这个APP中,主Beacon是我所关注的,因此只设定了主ID,因此我将二级和三级ID设为空值。
我们还必须对应用程序类别执行的RangeNotifier接口中的单实例对象方法“didRangeBeaconsInRegion(Collection[B] beacons, Region region)”进行编码。AltBeacon库的后台蓝牙扫描进程能够发现附近的Beacon,而“didRangeBeaconsInRegion”每秒钟调用一次,并提供当次扫描到的Beacon列表。APP绝大多数功能都在此基础上实现。
Beacon分类则代表物理意义上的Beacon, 它有着一系列属性,包括:Beacon类型标示、蓝牙MAC地址和名称、接收信号强度指示器RSSI(Received Signal Strength Indicator)、(制造过程中设定的)校准传输的Beacon发射功率、与Beacon相对距离的估算值(以米为单位计量、通过RSSI和Beacon发射功率计算得出)。
广播数据包中可能包含的字段称为广播数据类型(ADV data types),蓝牙核心规格附录的A部分(数据类型规格)对其有明确定义。广播数据类型的标准结构,包括一个单一字节长度字段 (它的值不包括长度字段本身占有的字节)、一个单一字节数据类型字段。GAP编号文档中定义了数据类型值。
下面是初始过程的首部分代码: