You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BLE外设广播传递自定义字符串遇CBUUID无效错误的解决指南

解决BLE外设广播自定义普通字符串的问题

咱们先搞懂为啥你之前的代码会触发_C.CBUUID.CreationError.invalidString错误——CBUUID是专门用来表示BLE服务/特征的UUID的,它要求字符串必须符合标准UUID格式(比如16位如"FFF0"、32位简化版,或者完整的128位UUID格式),而你用的"ttfgpV5hm8Z4mMlD"是普通随机字符串,完全不符合UUID的格式规范,所以直接塞给.servicesUUIDs肯定会报错。

那要广播这种自定义普通字符串,咱们得用BLE广播里的「厂商自定义数据」字段来实现,下面是具体的操作指引:

外设端:正确广播自定义字符串

在CoreBluetooth中,我们可以通过advertisementData里的.manufacturerData来携带自定义字符串。你需要把字符串转换成Data类型,同时指定一个厂商ID(可以用测试用的0xFFFE,正式产品建议用官方注册的厂商ID):

// 自定义要广播的字符串
let customString = "ttfgpV5hm8Z4mMlD"
// 将字符串转成Data(用UTF-8编码,确保两端编码一致)
guard let customData = customString.data(using: .utf8) else {
    print("字符串转Data失败")
    return
}
// 配置外设广播数据:本地名称 + 厂商自定义数据(厂商ID + 自定义字符串数据)
let advertisementData: [String: Any] = [
    CBAdvertisementDataLocalNameKey: "Test",
    CBAdvertisementDataManufacturerDataKey: Data([0xFF, 0xFE]) + customData // 0xFFFE是测试用厂商ID,两个字节小端序
]
// 初始化外设
let peripheral = Peripheral(configuration: configuration, advertisementData: advertisementData)

中心端:扫描并识别自定义字符串

中心端扫描时,需要在发现外设的代理方法里解析广播数据中的厂商自定义字段,把Data转回字符串后判断是否匹配目标内容:

// 中心管理器的扫描代理方法
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
    // 提取厂商自定义数据
    guard let manufacturerData = advertisementData[CBAdvertisementDataManufacturerDataKey] as? Data else {
        return
    }
    // 跳过前两个字节的厂商ID(对应外设端的0xFFFE)
    guard manufacturerData.count > 2 else {
        return
    }
    let customData = manufacturerData.subdata(in: 2..<manufacturerData.count)
    // 将Data转回字符串(编码和外设端保持一致)
    guard let customString = String(data: customData, encoding: .utf8) else {
        return
    }
    // 判断是否是目标字符串
    if customString == "ttfgpV5hm8Z4mMlD" {
        print("发现目标外设:\(peripheral.name ?? "未知设备")")
        // 这里可以发起连接等后续操作
        central.connect(peripheral)
    }
}

额外注意事项

  1. BLE广播包总长度有限制(最大一般为31字节),所以自定义字符串不能太长,要确保加上本地名称、厂商ID等内容后不超过这个上限。
  2. 厂商ID是BLE规范要求的字段,测试阶段用0xFFFE没问题,正式上线建议向蓝牙技术联盟申请专属厂商ID。

内容的提问来源于stack exchange,提问作者denish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:06:06