【问题标题】:iOS: resume BLE connection after ibeacon waking upiOS:ibeacon 唤醒后恢复 BLE 连接
【发布时间】:2020-09-22 02:44:46
【问题描述】:

App被用户杀死后,ibeacon唤醒后有没有办法恢复之前的BLE连接?

在我的 iPhone 应用程序中,我可以在应用程序被用户杀死后使用 iBeacon 唤醒应用程序。我可以在唤醒期间触发本地通知,但是当涉及到 BLE 相关任务时,根本没有响应。没有扫描回调没有连接回调。

编辑:

  1. BLE 背景已启用。
  2. 它会扫描具有先前与 iPhone 绑定的标识符的外围设备。标识符存储在 Userdefaults 中。
  3. 对于挂起的连接,当App被杀死时,会调用断开回调。我猜没有挂起的连接。
  4. 我还没有配置BLE状态恢复。

【问题讨论】:

  • 你实现了BLE后台能力吗?您是否正在扫描特定服务?您是否有与设备的未决连接?您是否配置了 BLE 状态恢复?你能edit你的问题显示相关代码吗?
  • @Paulw11 谢谢。我已经更新了我的问题。
  • 是的,如果没有状态恢复支持,当您的应用程序被终止时,什么都不会发生。此外,如果您想重新连接到刚刚断开的已知外围设备(即超出范围),那么最简单的方法就是在didDisconnect 中调用connect

标签: ios swift bluetooth-lowenergy core-bluetooth ibeacon


【解决方案1】:

感谢 Paulw11 和 Prakash Shaiva

在网上浏览了更多文档后,答案如下:

就我而言,我想在被用户杀死后唤醒应用程序。并与之前绑定的 BLE 设备建立连接。

我学到的第一件事
iOS App 被ibeacon 唤醒时,不会调用willRestoreState 回调。换句话说,应用程序无法从状态恢复支持恢复连接。但我们可以尝试建立新的连接。\

willRestoreState 当你的 App 被 iOS 系统杀死时回调。

Conditions for Bluetooth State Restoration to relaunch your app
See answer from Apple

我学到的第二件事
为了在唤醒期间建立新的连接,需要在func scanForPeripherals(withServices serviceUUIDs: [CBUUID]?, options: [String : Any]? = nil)中添加您需要的一组服务UUID,否则随机扫描将被iOS自己停止。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 2016-09-26
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    相关资源
    最近更新 更多