gpt4 book ai didi

ios - iOS 上的 BLE 广告和 CBAdvertisementDataLocalNameKey 大小

转载 作者:行者123 更新时间:2023-12-01 19:30:05 25 4
gpt4 key购买 nike

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

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

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

最佳答案

与大多数 BLE 事物一样,这取决于情况。但通常广告数据包的大小为 31 字节,除非您有扩展广告(有时在较新的手机和较新版本的 iOS 上可用,更多信息见下文)。完整的广告区域为 37 字节减去 MAC 的 6 个强制字节。其中包括所有内容:您发送的每件内容的长度、标签和值(value) (LTV)。

首先,会有标志,它是三个字节(长度、标签、值)。所以现在我们处于记录的 28 字节。

所以您想发送一些服务 UUD。我假设 serviceCBUUID 是 128 位临时 UIUD,而不是 16 位分配的 UUID。这是一个 2 字节 header (长度、128 位服务 UUID 的完整列表),加上 16 字节数据。

现在我们有 10 个字节。

您的名字无法容纳 10 个字节,因此我假设它正在发送“缩短的本地名称”标签,以及适合的 8 个字节(包括一个长度字节)。

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

就您而言,您可能只想删除 CBAdvertisementDataServiceUUIDsKey。如果有空间,Apple 通常会为您管理。如果没有空间,那么苹果公司有一个聪明的专有技巧,可以将数据哈希到溢出区域。只要您只想被其他 Apple 设备扫描,这种方式就非常有效,您无需花费广告您的完整服务 UUID 的费用即可摆脱困境。不过,如果您需要使用 Apple 设备以外的设备进行扫描,则它不起作用。

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

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

如果您有 10 个 16 位 UUID,则需要 22 个字节,这可以轻松放入广告数据包(没有本地名称)。要获得两个以上的 16 位 UUID,您至少需要是 Associate Member蓝牙 SIG 的成员。每年的费用为 7,500 美元或 35,000 美元,具体取决于您公司的规模。采用者(免费层)只能以每人 2,500 美元的价格注册其中两个。

现在,如果这只适用于运行相当新版本的 iOS(我认为是 12+)的相当新的 iPhone(我认为是 8+),那么就会有扩展的广告,最多允许 124 字节的有效负载。请参阅"What's New in Core Bluetooth"详情请参阅 WWDC 2019。扫描设备还需要支持扩展扫描才能发挥作用。

关于ios - iOS 上的 BLE 广告和 CBAdvertisementDataLocalNameKey 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63382273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com