ios - 在 Mavericks OSX 下生成的 iBeacons 可以工作,但与 iOS 有一些不同的字节

标签 ios iphone macos core-bluetooth ibeacon

我遵循这个示例项目 BeaconEmitter在 OSX 下生成用于在 iPhone 上开发应用程序的示例 iBeacons。 BeaconEmitter 应用程序基于 Matthew Robinson 中的教程,直到 Apple 决定在 OSX 的 Core Location 上引入 iBeacon 支持,生成 iBeacon 的唯一机会是使用 IO Bluetooth Framework 从头开始​​构建广告数据包。

但是......那是行不通的!

我当然也尝试了 Apple 在 iOS 上的 AirLocate 教程代码,是的,在运行良好的 iOS 设备之间。但是,如果您尝试使用 OSX (BeaconEmitter) 生成 iBeacon 并使用不起作用的 iOS 设备 (AirLocate) 接收它。

我有一个基于 CC2540 TI 芯片的 BLE RF 嗅探器,并在 Windows 上安装了 TI 嗅探器软件。所以我观察到从 AirLocate 和 BeaconEmitter 生成的 iBeacons 数据包有点不同。

这是用 AirLocate 生成的 iBeacon: enter image description here

Thah 是用 BeaconEmitter 生成的 ibeacon: enter image description here

按照 this post 中的逆向工程师进行操作(因为Apple还没有发布iBeacons Specifications),从两种情况可以看出Adv PDU Header是不一样的。 在 OSX 中,Type = 2 和 TxAdd = 0,在 iOS 中,Type = 0 和 TxAdd = 1。

为什么会有这种差异?

可以强制 OSX 发送与 iOS 相同的 Adv PDU header 吗?

似乎在 AdvData 的前 5 个字节中,两个数据包也不相等:

OSX:02 01 06 1A FF

iOS:02 01 1A 1A FF

AdvData 有效负载的其余部分与上面链接的逆向工程师帖子一致。

同样,为什么这个字节不同?

我没有从 OSX 示例中的哪部分代码中找到它所依赖的。

更新:它有效

BeaconEmitter 生成的 iBeacon 没有被 AirLocate 识别的主要原因是我的错。我不明白 Air​​Locate 过滤了 UUID 的一些特定示例,即:E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 或 5A4BCFCE-174E-4BAC-A814-092E77F6B7E5 或 74278BDA-B644-4520-8F0C-720EAF059935 值。不是每个 UUID 值。 >

因此 BeaconEmitter 生成的随机 UUID 肯定与 AirLocate 中预先写入的 UUID 不匹配。

如果您可以“强制”来自 BeaconEmitter 的具有良好值的 UUID,AirLocate 可以识别它:

BeaconEmitter

所以这是 iOS AirLocate 示例应用程序中的成功测试:

AirLocate

仍然是上述相同字节的差异...只有嗅探器才能看到:)。

最佳答案

您似乎说的是 2 个具体设备之间的蓝牙链接 ID。它不是随机的,因为它对于每对设备总是相同的。

不同的设备对会有所不同。

无论如何,如果你在使用信标时遇到一些问题,你可以使用核心蓝牙,它更复杂,但也足够旧,并且得到更多设备和操作系统的支持

关于ios - 在 Mavericks OSX 下生成的 iBeacons 可以工作,但与 iOS 有一些不同的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20951692/

相关文章:

ios - 从 4 版本打开 xib 或 Storyboard 时,Xcode 5 崩溃

ios - UINavigationController pushViewController 推送 Controller 然后 "automatically"关闭它

ios - HealthKit 授权状态始终为 1

某些用户的 iOS 应用程序崩溃

iphone - 发布新版本时更改已发布应用程序的包 ID

c - OpenGL 广告牌插值问题

macos - 通过 MAC 上的 VMWare Fusion 在 Windows 上运行 XAMPP,如何配置 apache 以使用我的共享文件夹 (Z :) as the web root?

ios - 如何在过渡中使 ECSlidingViewController View Controller 变暗?

iphone - 如何以编程方式在 Xcode 4x 中定位构建的产品(应用程序)

macos - 由于明显的 VirtualBox 正在运行,重新安装 Boot2Docker 失败 - 如何关闭它们?