我知道 CFUUID 是从 MAC 地址和其他一些东西生成的。那么有没有办法从 CFUUID 取回 MAC 地址?
我们有一些蓝牙设备,用户只知道写在设备上的 MAC 地址的最后 3 部分。所以我们想给用户和选项来选择正确的设备。在 iOS 端,看起来我们只有 CFUUID。那么有没有办法将 UUID 转换回 mac 地址?
或者更好的是,如果有办法直接获取外围设备的 MAC 地址而不是 UUID,但似乎不可能
谢谢
我知道 CFUUID 是从 MAC 地址和其他一些东西生成的。那么有没有办法从 CFUUID 取回 MAC 地址?
我们有一些蓝牙设备,用户只知道写在设备上的 MAC 地址的最后 3 部分。所以我们想给用户和选项来选择正确的设备。在 iOS 端,看起来我们只有 CFUUID。那么有没有办法将 UUID 转换回 mac 地址?
或者更好的是,如果有办法直接获取外围设备的 MAC 地址而不是 UUID,但似乎不可能
谢谢
好吧,正如您可能从对问题的评论中了解到的那样,答案很明显:不。(实际上)不可能获得生成特定 UUID 的种子。假设实际上生成你的 UUID 的算法确实使用了你设备的 MAC 地址来生成它,我猜你不能保证你使用的 UUID 生成器就是这种情况,除非你可以访问 UUID 生成器代码或算法(可能是 UUID 版本 1?)并且它对您来说不是一个不透明的操作(立即破坏了 uuid 生成算法的目的)。
当您说 UUID 的生成可能使用设备的 MAC 地址时,您显然是在做某事,其他组件,如时间戳、散列、UDID(iOS 设备)等。事实是 MAC 地址可能只是用于生成 UUID 的众多因素之一,因此如果您要花费大量计算能力尝试从同一系统下生成的大量 UUID 样本中解构它相同的条件;我们可能会谈论一台浪费计算能力的量子计算机,试图探索与可观察宇宙中的粒子一样多的组合,因此您可以获得一个 MAC 地址,如果您愿意,您也可以从蓝牙外围设备中获得一个特性,并顺便击败再次拥有 UUID 的目的。
另一方面,除了有人对您的问题发表的评论之外:您发现 UUID 如此无聊的原因是建立在上一段的想法之上,这样您就可以避免冲突:生成重复项不仅仅是来自您的计算机生成的重复项但是从一天中的每一个时刻由每个设备生成的所有其他的(验证请求,在数据库中创建字符串索引键,或识别服务和特征),所以你很酷的服务或特征命名为:
AAAAAAAA-BBBB-CCCC-DDDD-EEEEFFFF6666
不会与具有相同 UUID 的另一个很酷的 foo 服务或特性混淆。
一般来说,有关更多信息,请查看维基百科或核心蓝牙编程指南,形成开发人员门户。它仍处于 NDA 之下,因此您必须是注册的 iOS 开发者并拥有有效的开发者计划凭证才能阅读它。
我一直在寻找一种方法来部署与平台无关的 BLE 设备静态配置。我越来越气馁(Apple 的 UUID 是 +/- 无意义的,并且无法从 CoreBluetooth 访问可以在大多数/所有其他平台上获得的 MAC/BDADDR)。幸运的是,我注意到“设备信息服务”配置文件 (0x180A) 包含一个“系统 ID”属性 (0x2A23),它对设备的唯一 MAC/BDADDR 地址进行编码。但是,我不知道 BLE 设备是否必须公开此服务。
有一种方法可以获取 ios 设备的 mac 地址。但仅适用于 ios8 及更高版本。没有私有 api。https://github.com/Baoge2012/MacAddressLibDemo