使用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
相关产品推荐
相关产品推荐

