[英]iBeacon iOS 10: Can device scan for and receive advertisements from other peripheral devices?
这里是全新的。
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]?)
似乎下面的方法可以工作,但advertData似乎不包含上述键,即使[String:Any]也是如此:
func centralManager(_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String : Any],
rssi RSSI: NSNumber){
//code
}
这里的任何帮助/答案将不胜感激。 谢谢!
不幸的是, iOS在这里毫无帮助。 苹果通过多种方式锁定CoreBluetooth。
发送/接收广告的三种基本方式:
iBeacon显示
您可以在前台和后台使用CoreLocation扫描iBeacon广告,并具有快速响应,但是数据字段仅限于ProximityUUID(主要和次要)。
您只能在前台使用CoreBluetooth传输iBeacon广告。
蓝牙LE服务广告
您可以使用CoreBluetooth在前台(但不能在后台)传输这些文件,但不能附加任意数据。 但是,您可以发送16字节的任意服务UUID。
您可以在前台和后台使用CoreBluetooth扫描服务广告,并读取具有快速前台响应和慢速后台响应的服务UUID。 如果使用16位服务UUID,则还可以从这些广告中读取最多18个字节的附件数据。 涡流以这种方式工作。
蓝牙LE制造商广告
除了如上所述的特殊iBeacon广告,您根本无法在iOS上使用CoreBluetooth来广告制造商广告。
您可以使用CoreBluetooth扫描制造商的广告,并且可以读取最多23个字节的附件数据。 您根本无法在后台进行检测,但是前景检测很快。
底线:如果要将广告数据从一台iOS设备发送到前台或后台的另一台设备,则只有iBeacon。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.