gpt4 book ai didi

iOS 在后台模式下从广告中省略制造商数据

转载 作者:行者123 更新时间:2023-12-01 19:30:21 26 4
gpt4 key购买 nike

我在使用 BLE 与我们定制的 BLE 单元进行通信的 iOS 应用程序上工作。
我们希望通过 BLE 自动向设备发送特定命令。
当用户靠近设备并满足特定条件时,应用程序应连接到设备,“登录”用户,通过 BLE 发送命令并立即断开连接。
这些特定标准基于来自广告的制造商数据(即,当制造商数据的最后一个字节为 0x01 时,设备处于“可登录”状态,当它“不可登录”时,最后一个字节为 0x00)。
在前台,这种机制完美无缺。
即使应用程序处于后台或终止(在 iPhone 上的仪表板中向上滑动),我们也希望这样做。
我们实现的机制:

  • 该单元可充当 iBeacon
  • 当设备无法登录时,iBeacon 关闭
  • 当它可用于登录时,iBeacon 将打开并唤醒应用程序,此时 BLE 扫描将以后台模式开始
  • 后台模式设置为蓝牙中央

  • 这里的问题是,无论我尝试了什么,广告:
  • 有时根本没有发现(看起来是时间问题?)
  • 当它被发现时,它不包含制造商数据

  • 有没有人遇到过类似的事情?
    任何帮助表示赞赏,祝您有美好的一天!

    最佳答案

    应用程序在 iOS 后台时根本无法读取原始 BLE 制造商广告数据——操作系统禁止它。
    此规则有两个异常(exception):

  • iBeacon,它本身是作为一种特定类型的制造商广告来实现的。一个应用程序可以在 iOS 的后台检测 iBeacons,尽管只有四个字节的可读数据(编码在主要和次要字段中)是完全可用的。如果你可以修改你的设备以这种方式发送信息,它会做你想做的事。但是,您必须使用 CoreLocation API 来检测 iBeacon,因为 CoreBluetooth 不允许从 iBeacon 广告中读取制造商数据。如果您确实使用 CoreLocation,则无法使用检测与 CoreBluetooth 建立蓝牙连接,因为这两个 API 是沙盒化的。
  • 溢出区域广告。后台 iOS 应用程序可以在后台读取这些特殊类型的制造商广告,但前提是屏幕打开。 (通常可以通过发送本地通知在特定时间强制打开屏幕。)有关更多信息,请参阅我的博客文章:http://www.davidgyoungtech.com/2020/05/07/hacking-the-overflow-area

  • 检测制造商广告的另一种方法是使用带有附加数据的 BLE 服务广告。为此,您需要定义一个 16 位或 128 位 GATT 服务 UUID 并发送带有附加数据字节的广告。 Eddystone beacon formats以这种方式工作,并允许在 iOS 的后台进行检测。如果您可以更改 BLE 硬件,这可能是最好的方法。

    关于iOS 在后台模式下从广告中省略制造商数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63175411/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com