iBeacon — 是苹果为Bluetooth Low Energy信标提供的专有协议,允许iOS设备在建筑物内部以公分级精度确定其位置。该协议的基础是广播含有唯一标识符(包含UUID、Major和Minor值)的BLE数据包。根据Apple iBeacon Design Guidelines(2025),该技术用于商场、博物馆、机场和体育场的导航,支持无需活跃设备匹配的被动检测。
主要要点
iBeacon — 是苹果开发并在WWDC 2013上引入的室内定位技术。与在建筑物内无法工作的GPS不同,iBeacon使用Bluetooth Low Energy信标——电池供电的小型设备,发送固定的识别数据包。iOS和Android设备接收这些数据包,并根据信号强度(RSSI)计算到信标的近似距离。
iBeacon协议成为了第一个大规模BLE信标标准,由苹果于2013年在iOS 7中推出。最初,该技术用于零售业:Apple Store店铺实施iBeacon来通知顾客进入特定区域时的优惠信息。到2025年,iBeacon基础设施在全球拥有数百万个安装的信标,尽管已出现了替代协议——谷歌的Eddystone和开源AltBeacon。
iBeacon用于五种主要场景:室内导航(商场、机场、博物馆)、上下文通知(进入商店时的优惠)、工作流程自动化(签到)、物流和仓储管理,以及接近物体时自动播放内容的旅游导览。根据ABI Research(2025),BLE信标市场估计为32亿台设备在运营中。
iBeacon数据包 — 是在BLE广告信道上以2402、2426和2480 MHz频率传输的Advertising PDU(协议数据单元)。数据包格式是固定的,由四个字段组成:Apple iBeacon前缀(0x4C000215)、16字节UUID、2字节Major和2字节Minor值,以及用于距离校准的1字节TX Power。总数据大小为30字节,可容纳在一个BLE Advertising PDU中。
| 字段 | 大小 | 说明 |
|---|---|---|
| Apple前缀 | 9字节 | Company ID (0x004C) + iBeacon type (0x0215) |
| UUID | 16字节 | 组织或应用程序的唯一标识符 |
| Major | 2字节 | 区域标识符(0-65535),如商店编号 |
| Minor | 2字节 | 点标识符(0-65535),如货架编号 |
| TX Power | 1字节 | 1米距离的校准信号强度(dBm) |
iBeacon标识符形成一个三级层级结构。UUID分配给组织(如链锁商店),Major分配给具体商店或楼层,Minor分配给区域内的具体点(收银区、商品部门)。这种层级结构允许应用程序灵活地应对不同上下文层级:进入商店时(UUID + Major)应用程序可加载楼层地图,接近具体部门时(Minor)显示产品信息。
TX Power字段——是信标1米距离处信号强度(RSSI)的参考值。接收到数据包后,设备记录实际RSSI并根据公式计算距离:distance = 10^((TX_Power - RSSI) / (10 * n)),其中n是环境衰减系数(通常为2-4)。正确的TX Power校准对定位精度至关重要:1 dBm的误差在5米距离处产生高达30%的偏差。
iOS根据计算的到信标的距离确定三个近距离区域:Immediate(小于0.5米)、Near(0.5到3米)和Far(3到30-50米,取决于条件)。不报告精确距离——只报告类别。这是故意的:RSSI受干扰、信号反射和人体影响,因此类别提供更稳定的位置确定。
Immediate——直接接触区域,设备距离信标几厘米。用于需要最大精度的场景:终端支付、打开数字锁、过关站验证。在Immediate区域中,RSSI通常为-30到-60 dBm。
Near区域——iBeacon的主要工作区域,覆盖0.5到3米。用于室内导航——例如,接近展示柜时,应用程序显示详细信息。在Near区域中,RSSI在TX Power = -59 dBm校准下为-60到-80 dBm。
Far——信标信号的最大检测区域。用于监控进入区域(如进入商场)。在Far距离上,RSSI通常低于-80 dBm,距离确定精度显著下降。进入监控使用系统的region monitoring API,而非精确区域确定。
iBeacon区域——由UUID(可选的Major + Minor)定义的虚拟区域。iOS允许通过CLLocationManager同时监控最多20个区域。进入区域时,系统会唤醒应用程序(即使在后台或终止状态),并通过代理locationManager:didEnterRegion发送通知。离开区域时,会调用locationManager:didExitRegion。
import CoreLocation
let locationManager = CLLocationManager()
let region = CLBeaconRegion(
uuid: UUID(uuidString: "E2C56DB5-DFFB-48D2-B060-D0F5A71096E0")!,
identifier: "myBeaconRegion"
)
locationManager.delegate = self
locationManager.requestAlwaysAuthorization()
locationManager.startMonitoring(for: region)
For determining zone (Immediate, Near, Far)使用ranging——实时扫描信标。与监控不同,ranging仅在应用程序活跃模式下工作,并需要位置访问权限。locationManager:didRangeBeacons:inRegion方法返回一个CLBeacon数组,包含proximity(CLProximity.immediate, .near, .far, .unknown)、accuracy(校准距离,以米为单位)和rssi字段。
func locationManager(
_ manager: CLLocationManager,
didRangeBeacons beacons: [CLBeacon],
in region: CLBeaconRegion
) {
for beacon in beacons {
switch beacon.proximity {
case .immediate:
print("立即靠近")
case .near:
print("附近靠近")
case .far:
print("远距离靠近")
default:
print("未知靠近")
}
}
}
Android没有内置对iBeacon的支持,因为该协议是苹果的专有解决方案。但通过第三方库(如Radius Networks的AltBeacon,现为Open Beacon组织的一部分),开发人员可以将iBeacon集成到Android应用程序中。AltBeacon库实现了BLE数据包扫描、iBeacon格式解析以及ranging和区域监控的模拟,类似iOS API。
val beaconManager = BeaconManager.getInstanceForApplication(context)
beaconManager.beaconParsers.add(
BeaconParser().setBeaconLayout(
"m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"
)
)
beaconManager.backgroundBetweenScanPeriod = 5000
beaconManager.foregroundScanPeriod = 1100
beaconManager.bind(this)
AltBeacon库中解析iBeacon的格式由layout字符串定义:“m:2-3=0215”——检查iBeacon标记的两个字节,“i:4-19”——16字节UUID,“i:20-21”——Major,“i:22-23”——Minor,“p:24-24”——TX Power。同样的格式也支持Eddystone和其他协议,使AltBeacon成为在Android上处理BLE信标的通用库。
在Android上,使用iBeacon有三个主要局限:后台扫描受制于制造商(Xiaomi、Huawei、Samsung经常终止后台进程),RSSI精度因BLE栈差异而低于iOS,且从Android 6.0开始需要ACCESS_FINE_LOCATION权限,从Android 12开始需要BLUETOOTH_SCAN权限。
Eddystone——谷歌开发的开放BLE信标协议,于2015年推出。与iBeacon不同,Eddystone支持四种类型的数据包:Eddystone-UID(固定标识符)、Eddystone-URL(为Physical Web传输URL)、Eddystone-TLM(信标远程测量——电池电量、温度)和Eddystone-EID(加密标识符,用于防止克隆)。尽管谷歌于2022年停止了Physical Web的开发,Eddystone协议仍在企业解决方案中使用。
| 参数 | iBeacon | Eddystone |
|---|---|---|
| 所有者 | Apple | 谷歌(开放) |
| 数据包类型 | 1(UID) | 4(UID, URL, TLM, EID) |
| 数据 | UUID+Major+Minor | ID/URL + 远程测量 |
| iOS原生支持 | 是(CoreLocation) | 否(通过CoreBluetooth) |
| Physical Web | 否 | 是(Eddystone-URL) |
| 安全性 | 无加密 | 带密钥轮换的EID |
在iBeacon和Eddystone之间的选择取决于目标平台和使用场景。iBeacon由于与CoreLocation的原生集成和后台区域监控,更适合iOS应用程序。Eddystone更适合面向Android的项目和Physical Web场景,其中信标无需安装应用程序即可传输URL。对于跨平台项目,通常使用AltBeacon,它支持两种协议。
在实施iBeacon时,开发人员会遇到一系列局限性,这些需要在架构设计阶段考虑。不正确考虑这些因素会导致导航不稳定、虚假触发以及信标电池比预计更快耗尽。
信号强度RSSI受到墙壁反射、金属结构、人员存在以及2.4 GHz频段中其他无线设备的显著影响而产生大幅波动。在室内,单个信标的RSSI分散可达每分钟10-15 dBm,这使得不使用滤波器(滑动平均平滑、卡尔曼滤波)时距离计算不精确。
iOS支持单个应用程序同时监控最多20个区域。对于需要覆盖大面积区域的项目(机场、体育场),这是不够的。解决方案——动态区域切换:进入一个区域时,相邻区域被激活,远程区域被停用。
从进入区域到接收到通知的延迟可能从1到30秒,取决于条件。iOS为了节省电池会定期扫描信标,因此不能期望立即响应。对于时间关键场景(接近时开门),建议使用Immediate ranging,但这只在应用程序活跃模式下工作。
常见问题
iBeacon——是苹果为Bluetooth Low Energy信标提供的协议,允许iOS和Android设备根据接收到的BLE数据包的信号强度(RSSI)分析,在建筑物内部以公分级精度确定其位置。
Bluetooth——是设备之间传输数据的通用无线通信协议,需要匹配。iBeacon——是基于BLE的专用协议,专门用于无需建立连接的标识符广播。iBeacon信标不传输数据——它们只宣告自己的存在。
iBeacon在Advertising模式下工作——信标持续发送含有ID信息的BLE广播数据包。设备接收数据包,但不连接到信标。这节省了信标电池(一节CR2032可工作2-3年),并允许无需主动扫描即可被动检测信标。
不可以,iBeacon不是为寻找设备设计的。iBeacon信标是固定发射器,iPhone作为接收器。iPhone不发送iBeacon信号(除非是Find My功能,它使用另一种基于BLE的协议)。寻找电话使用其他技术(Find My网络、UWB)。
iBeacon的范围取决于信标设置和环境条件。典型范围:Immediate——达到0.5米,Near——达到3米,Far——达到30-50米。使用信号放大器的信标在开放空间中,范围可达到70米,但在这种距离上距离确定精度极低。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。