【发布时间】:2018-02-04 09:18:25
【问题描述】:
我得到了这个不宣传其服务的 Nordic nRF52 BLE 外围设备。我可以连接到它,但无法在 iOS 上发现服务。由于我知道服务 UUID,因此我尝试将它们传递给 discoverServices 函数。但这不起作用。
大约 30 秒后,它终于断开连接。
在外围设备上,GAP 广告标志设置为General Discoverable。使用 LightBlue 或 nRF Connect 之类的应用程序,我看到外围设备的名称和 UUID,但没有服务。与 LightBlue 应用程序连接时,几秒钟后会显示错误 (Timeout interrogating the peripheral)。
在 Android 上发现未公布的服务可以正常工作。
截至Core Bluetooth Programming Guide,它应该基本上可以工作:
与外围设备建立连接后,您可以探索其数据。探索外设必须提供什么的第一步是发现其可用服务。由于外围设备可以通告的数据量存在大小限制,因此您可能会发现外围设备的服务比它所通告的(在其通告数据包中)要多。您可以通过调用外设的 discoverServices: 方法来发现外设提供的所有服务,如下所示:
[peripheral discoverServices:nil];
有谁知道 SDK 的区别是什么,以及是否有可能像 Android 一样在 iOS 上发现未经宣传的服务?
我了解到,当外围设备被缓存时,iOS 能够直接连接,跳过发现过程。但是缓存了外围设备,它需要配对一次。有没有办法手动设置缓存?
感谢任何帮助,谢谢!
【问题讨论】:
-
“我可以连接到它,但在 iOS 上找不到服务。”:你能展示一下你的代码吗?你设置代理了吗?您是否在
CBPeripheral上保留了强引用(这通常是 CoreBluetooth 上的常见错误。框架倾向于不保留强引用,并且由于委托调用是“异步”的,它会忘记外围设备的存在)。?跨度> -
事实并非如此。此行为发生在 Appstore 中的多个应用程序中。正如@jens-meder 指出的那样,可能是固件问题。
-
嘿@jim 我可以看到您找到了解决问题的方法,请您稍微扩展一下。我有同样的问题,除了它只发生在我们用户的一台 iPad 上(所有其他设备都可以正常工作)
-
嗨,西蒙。由于这只发生在一台设备上,我认为这是一个不同的问题。服务 UUID 是否更改?是否可以与 LightBlue 连接?您是否尝试过 Jens 回答中的第 1 点?
标签: ios bluetooth-lowenergy gatt