iOS和CBAdvertisementDataLocalNameKey大小上的BLE广告

iOS和CBAdvertisementDataLocalNameKey大小上的BLE广告,ios,bluetooth-lowenergy,core-bluetooth,Ios,Bluetooth Lowenergy,Core Bluetooth,在iOS上使用蓝牙低能耗广告时,作为CBAdvertisementDataLocalNameKey广告的数据的最大大小是多少?在进行一些测试时,我使用了以下代码进行BLE广告: var manager: CBPeripheralManager! //... let customData = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" manager.startAdvertising([CBAdvertisementDataServiceUUI

在iOS上使用蓝牙低能耗广告时,作为CBAdvertisementDataLocalNameKey广告的数据的最大大小是多少?在进行一些测试时,我使用了以下代码进行BLE广告:

var manager: CBPeripheralManager!
//...
let customData = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
manager.startAdvertising([CBAdvertisementDataServiceUUIDsKey:[serviceCBUUID], CBAdvertisementDataLocalNameKey: customData])

我注意到,在检测到外围设备时调用的委托方法中的第二个设备上(
func centralManager(ucentral:CBCentralManager,didDiscover peripal:cbperipal,advisementdata:[String:Any],rssi rssi:NSNumber)
)我的自定义数据被剪切为以下字符串:“01234567”,因此它只有8个字节。StartAvertising函数的文档中提到了一些关于“支持的广告数据键的任何组合的初始广告数据中最多28字节的空间”。有人能解释为什么在我的例子中只有8个字节吗?实际上,iOS上的CBAdvertisementDataLocalNameKey总是8个字节,还是这个数字可以更改?如何计算广告包中成功发送的字节数(在我的情况下为8字节)?在iOS上使用BLE时,有没有办法公布超过8字节的数据?同时广告服务的数量是否有限制?例如,是否可以同时播发10个不同的uuid,每个uuid有8个字节,总共允许同时播发80个字节?

与大多数可扩展的东西一样,这取决于。但通常情况下,广告数据包的大小为31字节,除非您有扩展广告(有时在较新的手机和较新版本的iOS上可以使用,详情如下)。完整的广告区域是37字节减去6个MAC必须的字节。这包括所有内容:长度、标签和发送的每件物品的价值(LTV)

首先,有标志,它是三个字节(长度、标记、值)。现在我们在28个字节处

所以你想发送一些服务uud。我假设serviceCBUUID是一个128位的即席UID,而不是一个16位分配的UUID。这是一个2字节的头(长度,128位服务UUID的完整列表),加上16字节的数据

现在是10字节

您的名称不能容纳10个字节,因此我假设它将发送“缩短的本地名称”标记,以及将容纳的8个字节(包括一个长度字节)

如果要发送更长的名称,则需要缩短有效负载中的其他内容

在您的情况下,您可能只想删除CBAdvertisementDataServiceUUIDsKey。如果有空间的话,苹果通常会帮你解决这个问题。如果没有空间,那么苹果有一个聪明的专有技巧,将数据散列到溢出区域。只要你只需要被其他苹果设备扫描,这项功能就非常有效,你可以不用为你的全方位UUID做广告就可以脱身。但是,如果你需要被苹果设备以外的东西扫描,它就不起作用了

如果您确实需要宣传您的服务UUID,并且您还希望为您的本地名称提供更多的空间,那么您将需要这样做。这些花费2500美元,是16位而不是128位,这将为您的本地名称返回14个字节

关于你关于“10个不同的UUID,每个都有8个字节”的问题,我不确定你从哪里得到这些数字。可扩展UUID为16字节(128位)或2字节(16位)。但是,如果您尝试公布10个16字节UUID,则会溢出。iOS可能会发布尽可能多的广告,然后将其余的散列到溢出区域(如上所述)。服务UUID的完整列表在连接时仍然可用,即使它们没有公布

如果您有10个16位UUID,那么将需要22个字节,这将非常适合广告包(没有本地名称)。要获得两个以上的16位UUID,您需要至少是Bluetooth SIG的一员。根据贵公司的规模,每年的费用为7500美元或35000美元。采用者(免费层)只能注册其中两个,每个2500美元

现在,如果这只适用于运行全新版本iOS(我相信是12+)的全新iPhone(我相信是8+),那么还有扩展广告,它允许高达124字节的有效负载。有关详细信息,请参见WWDC 2019。扫描设备还需要支持扩展扫描才能工作