跨端iBeacon应用开发应选用MacAdress还是UUID作为数据库检索ID?
结论
做双端iBeacon设备匹配,绝对不要选MAC地址,直接用iBeacon协议自带的身份标识字段即可。
为什么不能用MAC地址
- iOS端根本拿不到有效MAC:系统的CoreLocation框架在扫描iBeacon时,会直接在系统层屏蔽MAC地址返回,应用层没有任何合规途径能拿到这个值,选MAC的话iOS端的匹配逻辑从根上就跑不通。
- Android端拿到的MAC大多是假的:从Android 6.0开始,系统对未连接的BLE设备默认开启MAC随机化,扫描返回的地址是设备临时生成的虚拟值,重启设备、重新开关蓝牙都可能变,根本当不了固定ID用。
- 没有长期稳定性:就算你靠一些偏门手段拿到了部分设备的真实MAC,后续系统更新、设备固件升级都可能直接把这些方案干废,线上维护成本高到离谱。
推荐的匹配方案
iBeacon协议从设计之初就留了专门做身份识别的字段,不管Android还是iOS都能稳定、合规拿到这几个值,不存在系统拦截的问题。标准的唯一标识是三个字段拼接的组合:
Proximity UUID:128位的UUID值,一般用来标识你自己的Beacon集群,比如你家品牌所有线下部署的Beacon可以共用同一个UUIDMajor:2字节的数字,一般用来做粗粒度分组,比如区分不同门店、不同楼层Minor:2字节的数字,一般用来标记分组下的具体单个Beacon设备
如果你部署的Beacon总量不大,也可以直接给每个Beacon烧录全局唯一的Proximity UUID,单字段就能完成匹配,不用额外拼接Major和Minor。
注意事项
别信网上所谓“iOS免越狱拿Beacon真实MAC”的方案,这类实现要么调用了私有API过不了App Store审核,要么在新系统版本上直接失效,完全没法用到正式上线的产品里。
内容的提问来源于stack exchange,提问作者flav1o
相关产品推荐
相关产品推荐

