在不配对的情况下为 iOS 附加广告负载
Posted
技术标签:
【中文标题】在不配对的情况下为 iOS 附加广告负载【英文标题】:Attaching advertising payload for iOS without pairing 【发布时间】:2020-06-16 16:43:13 【问题描述】:有人知道如何在 ios 上通过 BLE 传输短字符串或字节数组而无需配对?
根据我的研究,startAdvertise 方法只允许使用 2 个键是 CBAdvertisementDataLocalNameKey
和 CBAdvertisementDataServiceUUIDsKey
。
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 设置代理