【问题标题】:iBeacon iOS 10: Can device scan for and receive advertisements from other peripheral devices?iBeacon iOS 10:设备可以扫描并接收来自其他外围设备的广告吗?
【发布时间】: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


【解决方案1】:

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

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

iBeacon

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

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

蓝牙 LE 服务广告

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

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

蓝牙 LE 制造商广告

  • 除了上述特殊的 iBeacon 广告外,您根本无法在 iOS 上使用 CoreBluetooth 为制造商做广告。

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

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

【讨论】:

猜你喜欢
  • 2019-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多