【问题标题】:CoreBluetooth advertising in background on iOS 10iOS 10 后台 CoreBluetooth 广告
【发布时间】:2017-01-30 03:30:37
【问题描述】:

首先:我有一台 iPad Air 2 和一台 iPhone 7。为了进一步阅读,我们估计该应用程序在 iPad 上处于活动状态并打开,在 iPhone 上处于后台模式。该应用程序完全相同,即使具有相同的蓝牙服务 UUID 和相同的 DataLocalNameKey。

我想编写一个可以在后台宣传蓝牙服务并能够发现该服务的应用程序(在后台也是最佳的)。 As I already read 我不能使用苹果的信标技术,因为它只能通过后台附近的信标进行扫描/通知(我对此进行了测试,工作正常)但不能做广告。所以我开始使用上面提到的 SO 答案中描述的 CoreBluetooth,因为它可以在后台做广告。

我的应用在 iPhone 上调用 CBCentralManagerDelegate 中的didDiscoverPeripheral 方法(后台应用),因此它检测到了 iPad。 iPhone 上 CBPeripheralManager 的isAdvertising 属性是true。但是didDiscoverPeripheral 不会在 iPad 上调用。我有点困惑。一种选择是我的 iPad 由于某些原因无法再检测到 iPhone,或者我的 iPhone 在撒谎并且不是广告。

所以我认为我只是有点笨,并在谷歌上搜索“CoreBluetooth 调试应用程序”。我找到了VicinityAltBeacon。对于这两个应用程序,行为是相同的!如果您背景(按主页/睡眠按钮)广告应用程序,浏览应用程序将无法再发现它。如果您打开后台应用程序,它将立即发现它。两个应用程序都提到它们可以在后台广播。

我做错了什么吗?这种行为是预期的吗?我误解了框架吗?你能确认一下这种行为吗?

要确认这一点,最快的方法是在两台设备上安装Vicinity(您必须将NSBluetoothPeripheralUsageDescription 键添加到Info.plist)设置一台设备进行广播并按下主页按钮。

【问题讨论】:

    标签: ios bluetooth ibeacon core-bluetooth ios10


    【解决方案1】:

    这并不是 iOS 10 特有的——在 iOS 上一直都是这样。 在 iOS 上,应用在后台时根本无法发送标准蓝牙 LE 广告。他们必须在前台才能做到这一点。

    也就是说,iOS 对在后台宣传 GATT 服务的应用程序的支持有限。这使用了一种专有技术,该技术仅适用于正在寻找这些服务的其他 iOS 设备。 (因为它使用了非标准的专有方案,例如,相同的技术不适用于信标广告。)

    Apple 是这样描述它的:

    ...您应该知道,当您的应用程序在后台时,广告的运作方式与您的应用程序在前台时不同。特别是当您的应用在后台投放广告时:

    • CBAdvertisementDataLocalNameKey 广告键被忽略,并且外围设备的本地名称未被广告。
    • CBAdvertisementDataServiceUUIDsKey 广告键值中包含的所有服务 UUID 都放置在一个特殊的“溢出”区域;只有明确扫描它们的 iOS 设备才能发现它们。
    • 如果所有广告应用都在后台,您的外围设备发送广告数据包的频率可能会降低。

    在此处阅读更多信息:https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html

    【讨论】:

    • 好的。我向我的广告客户添加了一项服务,例如 cbPeripheralManager!.add(CBMutableService(type: random cbuuid, primary: true))。我将此 uuid 添加到 scanForPeripheralsWithServices。所以苹果提到的所有内容都在这里完成:广告端有一个 ServiceUUID,我有一个 iOS 设备,它正在显式扫描它。无论如何不要工作。
    • 如果您安装了其他在后台做广告的应用程序,“溢出区域”可能没有足够的空间。尝试卸载这些应用程序,听起来您已经尝试了几个。
    • 我删除了所有应用程序并重新安装了我的开发应用程序。没有任何改变
    • 这里有什么进展吗?试图弄清楚这个“溢出区域”在 iOS 中是如何工作的
    • 对不起,Rishi,自上述答案以来,这里没有任何改变。您实际上无法在 iOS 上使用标准信标帧在后台做广告。您可能想看看这个聪明的替代方案:github.com/Decemberlabs/AltBeacon,但不要将该项目的名称与 AltBeacon 广告格式混淆,后者共享名称,但不能在 iOS 的后台做广告。
    【解决方案2】:

    这是 ios 10.0.(1) 中的一个错误,部分在 ios 10.1 中修复

    源代码:https://forums.developer.apple.com/thread/51309

    【讨论】:

      猜你喜欢
      • 2017-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-20
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多