我目前正在尝试习惯iOS 7上的CoreBluetooth和iBeacon。在搜索API时,我注意到有三种创建和使用iBeacons的方法,我并不是100%确定这些差异是什么何时使用哪个。我找到的方法是:
使用CBPeripheralManager
和CLLocationManager
以及CLBeaconRegion
的基于位置的方法。这样做的好处是它可以为我提供有关设备接近度的信息。但由于这是一种基于位置的方法,在我看来,我无法使用此传输数据,这是我需要的。
使用Multipeer Connectivity Framework类MCNearbyServiceBrowser
和MCNearbyServiceAdvertiser
。这很容易设置,允许我传输任意数据,但我没有得到关于两个设备的接近度的信息,这是我需要的。
我在Apple找到了example project,他们使用CBCentralManager
和CBPeripheral
。这允许我传输任意数据并获得有限的接近度信息(我得到RSSI但没有信号准确度),但看起来相当复杂,因为有很多回调,我必须自己处理流量控制等事情。
所以我想我的问题是:有一种首选方式吗?何时使用哪种方法?他们可以合并吗?例如,我是否可以使用基于位置的方法收听其他设备,然后使用Multipeer Framework连接到附近的设备?如果是这样,我怎么能确保我不会意外连接到错误的设备?
谢谢!
答案 0 :(得分:4)
iBeacon用于确定位置 - 想法是有关检测到的iBeacon的信息与某些其他数据库(例如通过Web服务)交叉引用,以确定物理位置 - 例如分支或商店位置。虽然iBeacon可以是另一个iOS设备,但它也可能是专用的,但非常简单,piece of hardware因此无法传输数据。
CoreBluetooth框架是关于服务和小数据传输的发现。它支持“众所周知”的服务类型(如心率监视器)和专有类型。可以读取和写入数据(“特征”),并使用订阅/通知模型 - 例如,在心率变化时通知。
Multipeer Connectivity Framework可以使用蓝牙或WiFi来宣传和定位服务,并支持更大的数据传输,包括流媒体。
您使用哪种技术或技术取决于您希望实现的目标。
答案 1 :(得分:1)
您首先必须决定是否要使用标准iBeacons。如果是这样,您就无法使用Multipeer Connectivity,因为标准iBeacons不支持。标准iBeacons是仅传输设备,不允许您直接进行双向数据传输。
您也无法使用CoreLocation
与CBCentralManager
和CBPeripheral
来查看iBeacons,因为API阻止了对iOS上的iBeacon标识符的访问。请参阅我的回答here。
如果您想使用标准iBeacons(允许使用现成的硬件和实用程序),您必须使用CoreLocation
API。这样,您可以轻松完成各种数据传输。