2013-03-18 78 views
9

我正在开发一个系统,它具有作为中央设备的BLE设备(TI CC2540)和作为外设的iPhone4S上的iOS应用程序。一切工作正常,除了我需要的功能:从中央侧白名单(过滤)广告设备。iOS背景模式下的BLE外围设备/广告数据

据我所知,iOS设备使用随机可分解的MAC地址,所以我们不能应用基于MAC地址白名单。

因此,我的当前方法是:把一个ID上iOS应用的广告数据(iOS设备充当外围设备)“本地名称”字段中,中央设备将扫描并基于检索到的广告数据的过滤器。这工作除非应用程序在后台。

当我的应用程序被置于后台,广告数据将被截断,我的“本地名”不会出现在空中。从corebluetooth的头文件中,我看到app在后台只有“溢出区”数据可以在广告数据中,但只有iOS设备可以读取该区域。

所以可以在这里任何人轻我如何自定义的数据添加到广播数据包,即使在后台模式,或任何其他解决方案有这样的过滤功能。

任何评论将非常帮助我。

+0

你有没有找到一个解决方案/解决方法呢?同样的问题在这里。 – 2013-08-16 20:37:28

回答

0

我知道这是一个老帖子,但对于任何人好奇的,有因为当应用程序在后台CBAdvertisementDataLocalNameKey不会传输到做到这一点没有可靠的方法。

此外,操作系统忽略CBCentralManagerScanOptionAllowDuplicatesKey,因此您将为每个发现的新设备准确获取一个didDiscoverPeripheral回调。

如果您很好奇为什么,请记住,在硬件级别,只有一个蓝牙无线电由所有使用BLE的应用程序共享,并且广告数据包由所有广告应用程序共享。

溢出区域包含设备通告的所有服务UUID。我会想象这个领域很小,如果你有很多的话,那么系统可能需要发送几个通过UUID循环的数据包来宣传它们。

而且,这里是一个大原因广播数据包是把所需的应用程序信息的非最佳位置。假设您有一个应用程序依赖于服务UUID A的广告数据。然后,该应用程序变为后台,并且用户打开另一个使用广告数据进行服务UUID B的应用程序。

因为设备现在正在为UUID A和UUID B,任何接收设备都会在任何中央查找A或B时收到回叫。但是,由于CBAdvertisementDataLocalNameKey位于发送设备的前台,因此它只包含B的数据,这意味着您的设备只希望A的数据可能会处理错误的数据。

如果您想更清楚地了解广告数据实际传输的内容,App Store上有一款非常出色的iOS应用程序,称为LightBlue将向您显示此数据,并允许您连接到设备并查看所有它的服务,特点和描述。

0

我正在努力解决同样的问题。对于我的项目,我需要从Raspberry Pi的背景中至少读取iPhone的CBAdvertisementDataLocalNameKey。我仍然无法从溢出区域获取任何信息。

但是,我发现了一个有趣的事情,可以解决我们的问题。 有一些BLE扫描的Android应用程序可以在附近的iOS设备处于后台时读取LocalName。一个例子是this之一。 This是引用的应用程序的屏幕截图,显示了附近iPhone在后台时的正确CBAdvertisementDataLocalNameKey。

在Android扫描实验期间,树莓不能读取除制造商数据块以外的任何内容。 一个可能的解决方案是使用蓝牙包嗅探器来了解哪个是正确的扫描请求,以获取包含溢出区域的扫描响应消息。 这不幸的是需要像Ubertooth One这样的特定硬件。