在不配对的情况下为 iOS 附加广告负载

Posted

技术标签:

【中文标题】在不配对的情况下为 iOS 附加广告负载【英文标题】:Attaching advertising payload for iOS without pairing 【发布时间】:2020-06-16 16:43:13 【问题描述】:

有人知道如何在 ios 上通过 BLE 传输短字符串或字节数组而无需配对?

根据我的研究,startAdvertise 方法只允许使用 2 个键是 CBAdvertisementDataLocalNameKeyCBAdvertisementDataServiceUUIDsKey

https://developer.apple.com/documentation/corebluetooth/cbperipheralmanager/1393252-startadvertising

我也认为我可以使用

CBAdvertisementDataServiceDataKey: String
A dictionary that contains service-specific advertisement data.

附加数据,但这似乎是另一个死胡同WARNING: The advertisement key 'Service Data' is not allowed?

【问题讨论】:

【参考方案1】:

很遗憾,您不能使用 CoreBluetooth API 将数据附加到广告。在 iOS 上,CBAdvertisementDataServiceDataKey 是只读的。虽然蓝牙 LE 允许附加服务数据,但 Apple 实际上不允许第三方应用这样做。

你确实有几个选择:

    在 128 位服务 UUID 中编码您的数据并宣传它。您将需要在 UUID 中保留一两个字节以知道它是“您的”广告,因此可以从其他字节中解码数据。这个完整的 UUID 只会在您的应用程序位于屏幕上可见的前台时才会被公布。让它去后台或屏幕关闭,它就不再以那种形式做广告。同样,接收 iOS 设备也必须在屏幕打开的情况下处于前台。这是因为 iOS 不允许在没有预先指定匹配服务 UUID 的情况下获取后台扫描结果。而且因为您正在动态操作其中一些字节,所以您不知道它会是什么。

    使用 CoreLocation 对 iBeacon 内的 4 字节主要和次要字段进行类似的编码 BLE 广告。同样,这允许您仅在应用程序处于前台时进行传输。但是,接收可能会在有限程度上发生在后台(在组合监控和测距 API 时,在您的一个信标首次出现后 5-10 秒)。最大的缺点是您只有四个字节可以使用。

    通过操纵 128 位背景 BLE 溢出区域广告来广告数据。这种技术更先进,但广告在后台工作。接收在前台工作,部分在后台工作——如果屏幕至少打开,您就可以接收。您可以在我的博文http://www.davidgyoungtech.com/2020/05/07/hacking-the-overflow-area 中阅读有关此技术的更多信息并获取免费示例代码。

【讨论】:

以上是关于在不配对的情况下为 iOS 附加广告负载的主要内容,如果未能解决你的问题,请参考以下文章

在不使用 jQuery 的情况下为 fullCalendar 编写代码时出错

iOS 和 Android:在不更新整个应用程序的情况下摆脱 Admob 横幅广告的最快方法?

如何在不为 iphone 和 ipad 创建单独的 xib 的情况下为所有 ipad 和 iphone 创建通用 xib?不是故事板

如何在不影响 SYSTEM/IE 代理的情况下为 Webbrowser Control 设置代理

无需配对即可通过蓝牙提取移动(android 和 IOS)传感器数据

有啥方法可以在不使用 IDFA 的情况下为设备生成唯一 ID? [复制]