Skip to content

iBeacons是iOS7的新增的功能,可用于室内近场定位。iOS设备可以检测到附近的iBeacons兼容设备,在当前版本中甚至可以在应用后台运行的情况下获得回调。

iBeacons设备往往都是低功耗的,用Bluetooth Low Energy低功耗蓝牙实现,设计良好的iBeacons设备在一节CR2032纽扣电池支持下应能支持一年以上的使用时间。

iBeacons还有一个有用的特性是可以距离感应,当你的iOS设备检测到了一个iBeacons设备,那么app即可通过CoreLocation监测设备的距离,通过回调的形式通知距离变化。

i

常见应用场景

可以有不少有趣的应用场景,随便列举一些。

  • 商场购物时,靠近某些商品时,提示用户正在打折,或者查看商品的具体信息以及评价。靠近交费区域时,使用某一信用卡支付可以获得优惠。
  • 室内导航,例如机场登机口指示
  • 各种大会入场checkin,免去繁琐的签到流程
  • 各种展览场所,当用户靠近某些展品时,就可以获得相应的介绍信息

什么时候应该使用iBeacons

  • 同时需要检测多个区域
  • 被检测区域可以是一个移动的区域,例如汽车,列车。。
  • 检测区域范围有限的情况(一般不会大于100m)
  • 每个区域需要一些标识做区分的情况
  • 每个区域可以在室内,同一建筑物内,可以有重合
  • 用户愿意开启低功耗蓝牙来检测区域

如何把iOS设备变成一个iBeacon

所有支持低功耗蓝牙技术的iOS设备都可以变成一个iBeacon设备,被其它iOS设备检测到。例如iPhone 4s, iPod Touch5, iPad3及之后的设备,都支持低功耗蓝牙技术。

定义你的iBeacon

首先需要了解4个属性

  • proximity UUID , 是一个iBeacon或一组iBeacons设备的唯一标识,标明它的类型,你可以用osx下的 uuidgen 命令生成
  • 一个内部identifier ,你在app中自定义的标识
  • 一个 major identifier, 可用于区分一组拥有相同proximity UUID的设备
  • 一个 minor identifier, 可用于区分一组拥有相同proximity UUID和相同major identifier的设备

创建并广播一个iBeacon区域

首先需要定义一个CLBeaconRegion来实现iBeacon,如下

NSUUID *myProximityUUID = [[NSUUID alloc]
    initWithUUIDString:@"566C5595-6EC7-4F08-909F-C954BDCA6CD3"];
NSNumber *branchNumber = @42;
NSNumber *tillNumber = @3;
CLBeaconRegion *region = [[CLBeaconRegion alloc]
    initWithProximityUUID:myProximityUUID
    major:[branchNumber unsignedShortValue]
    minor:[tillNumber unsignedShortValue]
    identifier:@"com.mycompany.store"];

然后把这些信息交由CBPeripheralManager进行广播

 `NSDictionary *peripheralData =
    [region peripheralDataWithMeasuredPower:nil];
CBPeripheralManager *myPeripheralManager =
    [[CBPeripheralManager alloc] initWithDelegate:self queue:nil];
[myPeripheralManager startAdvertising:peripheralData];`

于是一个iOS设备就变成了一个iBeacon了

兼容的iBeacon设备

目前Apple并未公布iBeacons的具体技术细节,但是仍然有不少第三方通过蓝牙嗅探工具反向工程实现了iBeacons兼容设备。在国外已经有一些成品上市,例如

  • estimote
  • sticknfind
  • paypal,它甚至将iBeacons融入了它的支付技术

本人也利用TI公司的CC2541实现了一个简单的iBeacons兼容模块,为了未来可能的变化,做了预留的空中升级接口,现在某宝尝试性的对外出售,适用于有一定电子技术动手能力的爱好者测试。

参考链接