草庐IT

ios - iBeacon iOS 10 : Can device scan for and receive advertisements from other peripheral devices?

coder 2023-09-14 原文

这里是全新的。

Tl;dr:一个 iOS 设备可以发布一个 CB 广告(CBAdvertisementDataServiceUUIDsKey 和/或 CBAdvertisementDataLocalNameKey),另一个 iOS 设备可以扫描它吗?

我相信我的问题是基于 iOS 的更高版本中对 CoreBluetooth 和 CoreLocation 的弃用和更改而提出的。另外,目前,我仅指“前台”操作。

根据我阅读和测试的内容,外围设备可以使用 CL 传输信标区域(唯一的邻近 UUID、主要和次要(但值得注意的是没有“标识符”))。使用 CB,外围设备还可以“通告”两个少量的额外数据中的任何一个:CBAdvertisementDataServiceUUIDsKey 和 CBAdvertisementDataLocalNameKey。

我无法实现的是让设备(例如 iPhone)使用 CB 扫描这些附加键中的任何一个,也没有像我提到的使用 CL 或 CB 的可选“标识符”。

指定扫描的唯一选项需要 CBUUID,但未被发现的 iOS 外围设备不能在技术上宣传:

central.scanForPeripherals(withServices: [CBUUID]?, options: [String : Any]?)

似乎以下内容会起作用,但广告数据似乎不包含上面的键,即使 [String : Any]:

func centralManager(_ central: CBCentralManager,
                             didDiscover peripheral: CBPeripheral,
                             advertisementData: [String : Any],
                             rssi RSSI: NSNumber){
//code
}

如有任何帮助/回答,我们将不胜感激。谢谢!

最佳答案

不幸的是,iOS 在这方面毫无帮助。 Apple 以多种方式锁定 CoreBluetooth。

发送/接收广告的三种基本方式:

iBeacon

  • 您可以在前台和后台使用 CoreLocation 扫描 iBeacon 广告,响应速度很快,但数据字段仅限于 ProximityUUID,major 和 minor。

  • 您只能在前台使用 CoreBluetooth 传输 iBeacon 广告。

蓝牙 LE 服务广告

  • 您可以使用 CoreBluetooth 在前台(但不能在后台)传输这些,但您不能附加任意数据。但是,您可以发送 16 字节的任意服务 UUID。

  • 您可以在前台和后台使用 CoreBluetooth 扫描服务广告,并读取前台响应快、后台响应慢的服务 UUID。如果使用 16 位服务 UUID,您还可以从这些广告中读取最多 18 个字节的附加数据。 Eddystone 以这种方式工作。

蓝牙 LE 制造商广告

  • 您不能在 iOS 上使用 CoreBluetooth 做制造商广告,除了如上所述的特殊 iBeacon 广告。

  • 您可以使用 CoreBluetooth 扫描制造商广告,并且可以读取最多 23 个字节的附加数据。您根本无法在背景中检测到,但前景检测很快。

底线:如果您想在前台或后台将广告数据从一台 iOS 设备发送到另一台,iBeacon 是唯一的方法。

关于ios - iBeacon iOS 10 : Can device scan for and receive advertisements from other peripheral devices?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42730106/

有关ios - iBeacon iOS 10 : Can device scan for and receive advertisements from other peripheral devices?的更多相关文章

随机推荐