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

使用CoreBluetooth开发蓝牙聊天App:如何获取iPhone有效UUID?

解决CoreBluetooth中UUID无效的问题

首先得明确:你混淆了设备UDID和CoreBluetooth所需的UUID——这俩完全不是一回事,而且你用的字符串格式也不符合CBUUID的要求,这就是报错的核心原因。

为什么你的代码报错?

CBUUID只接受三种合法格式的字符串:

  • 16位十六进制字符串(比如"FFF0",对应蓝牙SIG的标准基础UUID扩展)
  • 32位十六进制字符串(比如"FFF0FFF1")
  • 标准128位UUID格式(带连字符的8-4-4-4-12结构,比如"E67E26AF-6A59-1F11-D3FF-186ACD1765B2")

你用的字符串e67e26af6a591f11d3ff186acd1765b2373a2131不仅是和蓝牙无关的UDID,还长度超标、不符合标准UUID的结构,所以CBUUID初始化直接失败。

如何获取你需要的有效UUID?

分两种场景来看:

场景1:获取iPhone作为蓝牙外设的UUID

当你通过CBCentralManager发现周边蓝牙设备(CBPeripheral)后,每个设备都有一个系统分配的唯一identifier属性,这就是你要的蓝牙设备UUID:

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
    // 获取设备的蓝牙UUID字符串
    let bluetoothDeviceUUID = peripheral.identifier.uuidString
    print("设备蓝牙UUID:\(bluetoothDeviceUUID)")
    
    // 直接用这个字符串初始化CBUUID就是有效的
    let validCBUUID = CBUUID(string: bluetoothDeviceUUID)
}

场景2:自定义蓝牙服务/特征的UUID

如果你是要创建自定义的特征或服务UUID,需要把你的字符串修正为标准128位格式(去掉多余字符,加上连字符):

// 修正后的标准128位UUID格式
let WR_UUID = CBUUID(string: "E67E26AF-6A59-1F11-D3FF-186ACD1765B2")
let WR_PROPERTIES: CBCharacteristicProperties = .write
let WR_PERMISSIONS: CBAttributePermissions = .writeable

额外提醒

UDID是苹果早已禁止iOS应用获取的设备硬件标识,和CoreBluetooth开发完全不相关,以后别再把这俩混在一起啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:50:48