我在iOS设备上对iBeacons和CoreBluetooth进行了大量研究。你的帖子和研究都很棒。我学到了很多东西。不幸的是,我陷入了死胡同,因为它与我真正想做的事情有关。
我正在阅读这篇文章:http://developer.radiusnetworks.com/2013/10/21/corebluetooth-doesnt-let-you-see-ibeacons.html ....
...并且它指出,如果没有proximityUUID,你无法在CoreBluetooth上做很多事情。那就是说,如果我真的有它呢?
我想要做的是将iBeacons放在指定位置。我将使用didEnterRegion
CLLocationManager委托方法来了解我们何时进入该区域。我想用它来触发信标的一些CoreBluetooth监控,以便可以在后台完成。我只需要RSSI和一个唯一的标识符(我现在可以不使用Major和Minor),这是我能够在前台获得的,但不是在后台。
我的印象是,如果我的应用程序设置了“bluetooth-central”(现在“App Communicates using CoreBluetooth”),我仍然可以在后台获取这些基本数据。
你能说清楚我正在做什么吗?目前,似乎并没有其他人尝试过这种做法,我很乐意让它继续下去并分享它,因为如果我能够克服这个障碍,它似乎是一种可行的解决方案。
思想?
答案 0 :(得分:4)
正如所建议的那样,不可能,但几乎所有像Kontakt.io或Estimote 这样的大型制造商都会使用特殊的UUID服务作为标识符,电池和其他东西。
您可以编写自己的框架,使用 CoreBluetooth 识别这种iBeacon,请记住,服务UUID数据不是主要的,次要的,uuid等...但只是一个标识符设备,你绝对应该创建一个数据库或plist,其中包含服务数据的id和UUID,iBeacon的主要和次要的匹配。
通过这种方式,您可以从iBeacon获取每个数据包并使用它完成您的工作。
答案 1 :(得分:3)
正如博客文章中所提到的,您无法从CoreBluetooth API中获取任何iBeacon标识符,因为iOS无法访问封装这些标识符的原始广告数据。
您可以进行相关操作。如果只有一个BluetoothLE设备可见,并且您刚刚看到使用CoreLocation API的iBeacon,您可以继续使用CoreBluetooth跟踪信标,按照您的建议读取RSSI。
当可以看到多个BluetoothLE设备时出现问题。如果无法访问CoreBluetooth中的iBeacon标识符,您如何知道您在CoreBluetooth中看到的哪个设备与您在CoreLocation中看到的哪些iBeacon一致?不幸的是,我认为没有办法匹配它们。