我正在开发具有BLE装置作为中央和iPhone4S的外围iOS应用系统(TI CC2540)。 从中央侧白名单(过滤)广告装置:除1个功能我所需要的一切工作正常。
据我所知,iOS设备使用随机可分解的MAC地址,所以我们不能应用基于MAC地址白名单。
因此,我的当前方法是:把“本地名称”字段的ID上iOS应用的广告数据(iOS设备充当外围设备),中央设备将基于检索到的广告数据扫描和过滤器。 这工作,除非应用程序是在后台。
当我的应用程序被置于后台,广告数据将被截断,我的“本地名”不会出现在空中。 从corebluetooth的头文件,我看到有只“溢出区”的数据可以在广告数据时,应用程序在后台,但只有iOS设备可以读取该区域。
因此,可以在这里任何人轻我如何自定义的数据添加到广播数据包,即使在后台模式,或任何其他解决方案有这样的过滤功能。
任何意见将帮助我非常多。
我知道这是一个老帖子,但对于任何人好奇的,有因为当应用程序是在后台CBAdvertisementDataLocalNameKey不会传送到完成这个没有可靠的方法。
此外,OS忽略CBCentralManagerScanOptionAllowDuplicatesKey,所以你会得到一个确切回调didDiscoverPeripheral对发现的每一个新的设备。
如果你是好奇,为什么,请记住,在硬件层面,只有一个是通过使用BLE的所有应用程序共享的蓝牙无线电和广播数据包的所有的应用程序,广告之间共享。
溢出区域包含所有服务UUID是你的设备做广告。 我猜想,这个领域是小,系统可能不得不发出几个数据包通过UUID的循环做广告所有这些,如果你有很多。
此外,这里是一个大原因广播数据包是把所需的应用程序信息的非最佳位置。 假设你有依赖于广告数据服务UUID A.然后一个应用程序,该应用程序变得转到后台运行,并且用户打开了一个使用服务的UUID B.广告数据另一个应用程序
由于该设备现在广告的UUID A和UUID乙服务,任何接收设备将得到一个回调于任何集中寻找一个A或B.但是,CBAdvertisementDataLocalNameKey将只包含数据的B,因为它是在前景上发送装置,这意味着你装置仅对于A期望的数据可以处理该错误的数据。
如果你想获得什么广告数据实际传输更清晰,有在App Store极好的iOS应用程序称为LightBlue会告诉你这个数据,并允许您连接到设备,看看它的所有服务,特点和描述符。
我有同样的问题所困扰。 对于我的项目,我需要从树莓派背景来读取iPhone的至少CBAdvertisementDataLocalNameKey。 我仍然无法得到溢出区域的任何信息。
但是我发现,可以解决我们的问题,一个有趣的事情。 有一些的BLE扫描是能够读取的localName而附近的iOS设备在后台Android应用程序。 一个例子是这样一个。 这是引用的应用程序的显示正确CBAdvertisementDataLocalNameKey而附近的iPhone是在后台的屏幕截图。
在Android的扫描实验中,树莓是无法读取除了制造商的数据块的东西。 一种可能的解决方案是使用一个蓝牙数据包嗅探器来了解哪个是正确扫描请求以获得含有溢出区域在扫描响应消息。 这不幸的是需要特定的硬件,如Ubertooth一个。