在 iOS 的广告中发送蓝牙 LE 数据
Sending bluetooth LE data in advertisement on iOS
我的应用程序 运行 作为蓝牙 LE 外围设备,我试图在广告中发送几个字节的自定义数据。
func btStartBroadcasting(peripheral: CBPeripheralManager!) {
// create an array of bytes to send
var byteArray = [UInt8]()
byteArray.append(0b11011110); // 'DE'
byteArray.append(0b10101101); // 'AD'
// convert that array into an NSData object
var manufacturerData = NSData(bytes: byteArray,length: byteArray.count)
// define a UIUD for the service
let theUUid = CBUUID(NSUUID: uuid)
// build the bundle of data
let dataToBeAdvertised:[String: AnyObject!] = [
CBAdvertisementDataLocalNameKey : "I wish this worked",
CBAdvertisementDataManufacturerDataKey : manufacturerData,
CBAdvertisementDataServiceUUIDsKey : [theUUid],
]
peripheral.startAdvertising(dataToBeAdvertised)
}
但看起来 CBAdvertisementDataManufacturerDataKey 中的数据集被剥离了,没有通过无线电发送出去。我已经阅读了在 Apple 的文档和在线上可以找到的所有关于此的小文章。共识似乎是 Core Bluetooth 忽略数据,因为仅支持 CBAdvertisementDataLocalNameKey 和 CBAdvertisementDataServiceUUIDsKey。上面的编译和运行正常,我可以 "I wish this worked" 在我的 BT 扫描仪应用程序中,但是我的两位自定义数据似乎不起作用。
有什么办法可以规避这个问题吗?任何可以接受的 CoreBluetooth 替代品或我遗漏的任何完全愚蠢的东西?
谢谢,
段
问题可能是您发送的字节太多。
广告包数据长度被规范限制为31字节。
从你的例子来看,字符串已经有 18 个字节,而 UUID 有 16 个字节,所以已经太多了。
问题是 CBPeripheralManager
不支持发送键 CBAdvertisementDataManufacturerDataKey
的自定义值。
从 iOS 12 开始,当您设置 CBAdvertisementDataManufacturerDataKey
并开始广告时,您甚至会在控制台中收到错误消息。
我的应用程序 运行 作为蓝牙 LE 外围设备,我试图在广告中发送几个字节的自定义数据。
func btStartBroadcasting(peripheral: CBPeripheralManager!) {
// create an array of bytes to send
var byteArray = [UInt8]()
byteArray.append(0b11011110); // 'DE'
byteArray.append(0b10101101); // 'AD'
// convert that array into an NSData object
var manufacturerData = NSData(bytes: byteArray,length: byteArray.count)
// define a UIUD for the service
let theUUid = CBUUID(NSUUID: uuid)
// build the bundle of data
let dataToBeAdvertised:[String: AnyObject!] = [
CBAdvertisementDataLocalNameKey : "I wish this worked",
CBAdvertisementDataManufacturerDataKey : manufacturerData,
CBAdvertisementDataServiceUUIDsKey : [theUUid],
]
peripheral.startAdvertising(dataToBeAdvertised)
}
但看起来 CBAdvertisementDataManufacturerDataKey 中的数据集被剥离了,没有通过无线电发送出去。我已经阅读了在 Apple 的文档和在线上可以找到的所有关于此的小文章。共识似乎是 Core Bluetooth 忽略数据,因为仅支持 CBAdvertisementDataLocalNameKey 和 CBAdvertisementDataServiceUUIDsKey。上面的编译和运行正常,我可以 "I wish this worked" 在我的 BT 扫描仪应用程序中,但是我的两位自定义数据似乎不起作用。
有什么办法可以规避这个问题吗?任何可以接受的 CoreBluetooth 替代品或我遗漏的任何完全愚蠢的东西?
谢谢,
段
问题可能是您发送的字节太多。
广告包数据长度被规范限制为31字节。 从你的例子来看,字符串已经有 18 个字节,而 UUID 有 16 个字节,所以已经太多了。
问题是 CBPeripheralManager
不支持发送键 CBAdvertisementDataManufacturerDataKey
的自定义值。
从 iOS 12 开始,当您设置 CBAdvertisementDataManufacturerDataKey
并开始广告时,您甚至会在控制台中收到错误消息。