iOS-蓝牙设备的唯一标识问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS-蓝牙设备的唯一标识问题相关的知识,希望对你有一定的参考价值。

参考技术A 当我们使用中心设备进行扫描的时候,即在

方法中,我们就可以通过扫描到的蓝牙外设的名字(peripheral.name)来进行针对性的操作。

有一些公司的外部设备的名字都是一样的,但是进行连接或者其他操作的时候,没必要知道具体的是哪一台设备,那么就可以使用蓝牙外设的UUIDString(即peripheral.identifier.UUIDString)来作为唯一标识。但是,需要注意的一点:不同的中心设备(也可以说是不同的手机)对于同一台蓝牙设备,获取到的UUIDString是不一样的。

举例说明一下:对于同一台蓝牙设备,我的手机进行扫描,然后读取它的UUIDString,和你的手机进行扫描,获取到的UUIDString是不同的。

针对这种情况,我们只能获取蓝牙设备的mac地址来作为唯一标识。但是,苹果公司也许是出于安全考虑,并没有对我们开放获取蓝牙设备的mac地址的接口(安卓开发是可以获取的)。那么我们只能自己通过某种手段来获取mac地址,有两种方法可以让我们获取到mac地址:

第一种:将mac地址放在蓝牙设备的广播数据之中,然后在广播的时候,将mac地址以广播的形式发送出来以供我们获取。

第二种:将mac地址写在某一个特征通道中,当我们连接蓝牙设备之后,通过某一个特征通道来获取mac地址。

原文

如何在 iOS 中使用 Core Bluetooth 获取蓝牙设备的唯一 ID

【中文标题】如何在 iOS 中使用 Core Bluetooth 获取蓝牙设备的唯一 ID【英文标题】:How to get unique ID of Bluetooth Device using Core Bluetooth in iOS 【发布时间】:2020-12-29 21:13:27 【问题描述】:

我正在开发一个应用程序,它需要 ios 设备提供蓝牙 UUID(从扫描/连接的设备获取蓝牙 UUID),然后将其发送到服务器以进行进一步开发。我在互联网上找不到任何答案。

我正在使用核心蓝牙扫描和连接设备并发送设备信息名称和 uuid,但 uuid 每 15-20 分钟更改一次。如何识别之前连接的设备以​​及如何获得唯一的 BLE 设备 UUID 以便我可以将标识符与之前添加的设备列表匹配。 请帮忙...

【问题讨论】:

【参考方案1】:

您可以获取发现的CBPeripheralidentifier 属性并连接到该属性。如果您连接,那么该设备的标识符在很长一段时间内都不会改变(实际上我认为它永远不会改变,但理论上它可以)。

一旦您有了外设标识符,您就可以保存该值,然后通过retrievePeripherals 而不是扫描来获取外设。

您将面临的问题是identifier 特定于发现外围设备的 iOS 设备。另一台 iOS 设备将获得相同外围设备的不同标识符。

如果您需要一个可跨 iOS 设备传输的外围设备的唯一标识符,那么您需要通过外围设备本身的特性公开这样的值,并让您的应用在连接后读取该特性值。

【讨论】:

好的@Paulw11 谢谢。我已将 BLE 标识符保存到后端数据库,并且可以使用 retrievePeripherals 搜索 BLE 设备,但是当我尝试连接它时,出现错误名称为“API MISUSE:取消未使用外围设备的连接 ,您是否忘记保留对它的引用?" 正如错误所说,您需要保持对 CBPeripheral 实例的强引用;即在一个属性中,而不仅仅是一个局部变量。 让 getData = self.centralManager.retrievePeripherals(withIdentifiers: ids) if getData.count > 0 if getData[0].identifier.uuidString == self.carsList[i].bluetooth_identifier getData[ 0].delegate = self // self.centralManager.cancelPeripheralConnection(getData[0]) self.centralManager.connect(getData[0], options: nil) 当我评论 self.centralManager.cancelPeripheralConnection 行时它没有给出任何错误。但没有调用 didConnect 外围函数。 getData 是一个局部变量。一旦该闭包或函数退出,它将被释放,这就是警告告诉你的。您需要在属性中保持对外围设备的强引用。 你能指导我如何做到这一点。

以上是关于iOS-蓝牙设备的唯一标识问题的主要内容,如果未能解决你的问题,请参考以下文章

是否可以从移动设备获取唯一标识号?

[转]iOS设备唯一标识探讨

在 64 位 iOS 设备上更改唯一标识符

2020-09-07 手机设备唯一标识

iOS开发:设备唯一标识与全局变量

ios的唯一设备标识