【发布时间】:2017-08-01 11:45:48
【问题描述】:
这里是全新的。
Tl;dr:iOS 设备能否发布可供其他 iOS 设备扫描的 CB 广告(CBAdvertisementDataServiceUUIDsKey 和/或 CBAdvertisementDataLocalNameKey)?
我相信我的问题是新的,基于 iOS 更高版本中对 CoreBluetooth 和 CoreLocation 的弃用和更改。另外,目前,我仅指“前台”操作。
根据我的阅读和测试,外围设备可以使用 CL 传输信标区域(唯一的邻近 UUID,主要和次要(但特别是没有“标识符”))。借助 CB,外围设备还可以“宣传”两个额外的少量数据中的任何一个:CBAdvertisementDataServiceUUIDsKey 和 CBAdvertisementDataLocalNameKey。
我无法实现的是让设备(例如 iPhone)使用 CB 扫描这些附加键中的任何一个,也没有提到使用 CL 或 CB 的可选“标识符”。
指定扫描的唯一选项需要 CBUUID,但未发现的 iOS 外围设备在技术上无法宣传:
central.scanForPeripherals(withServices: [CBUUID]?, options: [String : Any]?)
以下方法似乎可行,但 adsData 似乎不包含上面的键,即使是 [String : Any]:
func centralManager(_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String : Any],
rssi RSSI: NSNumber){
//code
}
这里的任何帮助/答案将不胜感激。谢谢!
【问题讨论】:
-
您混淆了一些事情。应用程序可以作为 iBeacon 做广告,也可以扫描 iBeacon;这是核心位置功能。应用程序可以使用 Core Bluetooth 发布 GATT 服务,也可以扫描 BLE gatt 服务。如果您知道正在通告的服务的 UUID,则效率更高,但您也可以指定
nil作为扫描参数以发现所有外围设备。对于至少 3 个版本的 ios,这些都没有改变 -
在您开始扫描后,您将获得对与您的扫描匹配的每个外围设备显示的委托方法的调用。
标签: ios swift bluetooth-lowenergy ibeacon