如何自动连接 CBPeripheral(带有 iBeacon + 蓝牙芯片的 BLE 设备)并且应用程序未运行

Posted

技术标签:

【中文标题】如何自动连接 CBPeripheral(带有 iBeacon + 蓝牙芯片的 BLE 设备)并且应用程序未运行【英文标题】:How to auto connect with CBPeripheral (A BLE Device with iBeacon + Bluetooth Chip) and app is not running 【发布时间】:2021-01-15 07:40:46 【问题描述】:

我有一个智能门解锁硬件设备,它同时充当 iBeacon 和 CoreBluetooth 外设!

我的要求是当我的应用第一次启动时,应用将开始监控 iBeacon 区域,当用户的距离小于 10 米时,应用应该开始使用特定的 CBService 扫描 BLE Peripheral。

当用户进入 0.5 米距离内时,应用应自动连接扫描到的 CBPeripheral 设备并处理开门操作。

您可以想象,当您离建筑物入口更近(约 10 米远)并开始扫描最近的蓝牙硬件时,应用程序将被激活。当你到达入口时,通过蓝牙操作,门会自动打开。

谁能帮助我了解如何使用 CoreBluetooth 技术实现类似的行为?

这个应用程序也应该在后台模式下工作。

到目前为止我所做的是,开始了 iBeacon 区域监控和回调

func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion) 
        // I am using beacon's accuracy as distance calculation.
        // When accuracy is < 10 meter, I am starting Peripheral scanning using: centralManager.scanForPeripherals(withServices: [My Custom Service UUID], options: [CBCentralManagerScanOptionAllowDuplicatesKey: false])

我的蓝牙管理器收到一个回调

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) 

现在我如何使用我的 iBeacon 和 Discovered Peripheral 进行映射并在距离小于 0.5 米时与 Peripheral 建立自动连接。

简而言之,我的手机应该用作身份验证和考勤管理的 RFID 卡

我想实现与以下视频中显示的类似行为: https://www.youtube.com/watch?v=Y6XlVE7UKp0

【问题讨论】:

您可能并不真正需要 iBeacon 功能。只需降低锁内蓝牙芯片的发射功率,使其仅在距离它 ​​0.5m 时才被检测到 @Paulw11 但是如果没有 iBeacon 功能,当我不使用应用程序或用户/操作系统杀死它时,我的应用程序是否会被激活。我需要一些关于如何处理这些 iBeacon + BLE 场景的指导 可以使用CoreBluetooth后台模式和状态恢复。如果您的外围设备有待处理的connect,则 ios 将在后台传递连接事件(如果您的应用程序已暂停)或在后台启动它然后传递连接事件(如果您的应用程序被 iOS 终止) .如果应用程序被用户终止,那么它不会重新启动,但这是用户选择终止您的应用程序,如果他们终止了应用程序,他们不应该期望它能够工作。 即使您使用 iBeacon,您也需要一个待处理的 Core Bluetooth 连接,因为 iBeacon 和 CoreBluetooth 外围设备之间没有链接。使用 iBeacon 还意味着您需要请求(并接收)“始终”位置权限 @Paulw11 没错,如果有挂起的“连接”调用,它可以在后台模式下工作。但是,我将有多个设备(例如多个门),只要我在附近就可以打开。当有多个外围设备时,这种情况可能无法处理。这就是我们必须添加 iBeacon 芯片的原因。当用户在此芯片的范围内时,应用程序被激活,扫描最近的 BLE 外设 > 建立连接 > 执行 BLE 操作 > 最后,它断开连接。 【参考方案1】:

如果您有一个 iBeacon 并且基于唯一的主要/次要值,您正在搜索 BLE 外围设备,那么您将只扫描一个外围设备。这样 iBeacon 和 BLE 外设就会匹配。

当iBeacon委托didRangeBeacon响应距离为0.5米时,您可以管理检测到的外围设备的数组并建立连接(Beacon Accuracy的值以米为单位。您也可以使用)

【讨论】:

以上是关于如何自动连接 CBPeripheral(带有 iBeacon + 蓝牙芯片的 BLE 设备)并且应用程序未运行的主要内容,如果未能解决你的问题,请参考以下文章

iOS CBPeripheral 连接问题

在连接之前识别 CBPeripheral 的类型

如何在 UIBarButtonItem 中显示 UIButton? (带有 IB 设计元素)

是否可以使用 CBPeripheral 通过蓝牙从 iOS 连接到 macOS

带有自动布局的 uilabel 使用填充调整大小

为啥这个简单的自动布局在 IB 中崩溃了?