在集成 "iBeacon + BLE Peripheral Scanning iOS Background mode" 功能方面需要帮助
Need help in integrating "iBeacon + BLE Peripheral Scanning iOS Background mode" feature
有一个要求,当应用程序被用户杀死或OS(可能强制或可能不强制)时,我需要允许iOS应用程序与BLE硬件通信。
此硬件同时用作 iBeacon 和 BLE 外设!
我们所做的是:
- 应用首次启动 --> 然后请求 AlwaysUsage 权限
- 仅使用 UUID(uuidString: "{Provided UUID}") 开始扫描 iBeacon 区域(次要值会有所不同)
- 当收到
func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in the region: CLBeaconRegion)
回调时,我们从检测到的信标中提取 Major & Minor 值,并根据该值准备服务 UUID 字符串,例如如果 Major 值为:00 & Minor value 为“11”,则将其连接为“0011”并将此最终连接值添加为设备服务 UUID 的前缀,例如“0011-12345-12345-123452”开始扫描 BLE 外围设备。
所以我的 BLECentralManager 对象将开始扫描
self?.bleCentralManager.scanForPeripherals(withServices: "0011-12345-12345-123452", options: [CBCentralManagerScanOptionAllowDuplicatesKey: false])
一旦检测到外围设备,其余的 BLE 操作将在此外围设备上执行(即建立连接、将数据发送到特定特征,最后断开连接)。这在前台模式下效果很好。
现在,我需要在后台实现相同的机制(即 App 不是 运行 状态)。我怎样才能实现它?
注意:
- 对 iBeacon 区域的监控从未停止。所以即使我的应用程序没有启动,我也能唤醒它。
- 但我的问题是,如何开始为后台检测到的 Beacon 准备 Major + Minor 值字符串
iOS 将在检测到信标时启动您的应用程序,您将收到 didEnter(region:)
回调。此时,您可以立即启动 locationManager.startRangingBeacons(...)
的信标测距,您将收到 didRangeBeacons(...)
几秒钟的回调 - 足够长的时间来读取 major/minor 标识符并完成您需要的工作。
有一个要求,当应用程序被用户杀死或OS(可能强制或可能不强制)时,我需要允许iOS应用程序与BLE硬件通信。
此硬件同时用作 iBeacon 和 BLE 外设!
我们所做的是:
- 应用首次启动 --> 然后请求 AlwaysUsage 权限
- 仅使用 UUID(uuidString: "{Provided UUID}") 开始扫描 iBeacon 区域(次要值会有所不同)
- 当收到
func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in the region: CLBeaconRegion)
回调时,我们从检测到的信标中提取 Major & Minor 值,并根据该值准备服务 UUID 字符串,例如如果 Major 值为:00 & Minor value 为“11”,则将其连接为“0011”并将此最终连接值添加为设备服务 UUID 的前缀,例如“0011-12345-12345-123452”开始扫描 BLE 外围设备。
所以我的 BLECentralManager 对象将开始扫描
self?.bleCentralManager.scanForPeripherals(withServices: "0011-12345-12345-123452", options: [CBCentralManagerScanOptionAllowDuplicatesKey: false])
一旦检测到外围设备,其余的 BLE 操作将在此外围设备上执行(即建立连接、将数据发送到特定特征,最后断开连接)。这在前台模式下效果很好。
现在,我需要在后台实现相同的机制(即 App 不是 运行 状态)。我怎样才能实现它?
注意:
- 对 iBeacon 区域的监控从未停止。所以即使我的应用程序没有启动,我也能唤醒它。
- 但我的问题是,如何开始为后台检测到的 Beacon 准备 Major + Minor 值字符串
iOS 将在检测到信标时启动您的应用程序,您将收到 didEnter(region:)
回调。此时,您可以立即启动 locationManager.startRangingBeacons(...)
的信标测距,您将收到 didRangeBeacons(...)
几秒钟的回调 - 足够长的时间来读取 major/minor 标识符并完成您需要的工作。