CoreBluetooth广告在iOS 10的后台

时间:2016-09-21 18:31:04

标签: ios bluetooth ibeacon core-bluetooth ios10

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

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

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

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

我做错了什么;这种行为有望吗?我误解了这个框架吗?你能证实这种行为吗?

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

2 个答案:

答案 0 :(得分:6)

这不是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

答案 1 :(得分:2)

这是ios 10.0中的一个错误。(1)和部分修复了ios 10.1

src:https://forums.developer.apple.com/thread/51309