[英]iOS Corebluetooth advertising and scanning while app in the background
[英]CoreBluetooth advertising in background on iOS 10
第一:我有一台iPad Air 2和一台iPhone 7.为了进一步阅读,我们估计该应用程序处于活动状态并在iPad上以及在iPhone上以后台模式打开。 该应用程序完全相同,即使使用相同的蓝牙服务UUID和相同的DataLocalNameKey。
我想写一个可以在后台宣传蓝牙服务的应用程序,并且能够发现这项服务(在后台也是最佳的)。 正如我已经读过的那样,我不能使用苹果信标技术,因为它只能在背景中接近扫描/通知信标(我测试过,工作正常)但不能做广告。 所以我开始使用CoreBluetooth,如上面提到的SO答案所述,因为它可以在后台做广告。
我的应用程序在iPhone上的didDiscoverPeripheral
中调用了didDiscoverPeripheral
方法(后台应用程序),因此它检测到了iPad。 iPhone上CBPeripheralManager的isAdvertising
属性是true
。 但是在iPad上没有调用发现didDiscoverPeripheral
。 我有点困惑。 一个选择是我的iPad由于某些原因不再能够检测到iPhone,或者我的iPhone正在撒谎而且它不是广告。
所以我认为我只是有点愚蠢和google搜索“CoreBluetooth调试应用程序”。 我找到了Vicinity和AltBeacon 。 对于这两个应用程序,行为是相同的! 如果您是广告应用程序的后台(按主页/睡眠按钮),浏览应用程序将无法再发现它。 如果您打开应用程序的后台,它将立即发现它。 两个应用程序都提到它可以与它们在后台播放。
难道我做错了什么; 这种行为有望吗? 我误解了这个框架吗? 你能证实这种行为吗?
要确认这一点,最快的方法是在两台设备上安装Vicinity (您必须将NSBluetoothPeripheralUsageDescription
键添加到Info.plist)将一台设备设置为广播,然后按主页按钮。
这不是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
这是ios 10.0中的一个错误。(1)并在ios 10.1中部分修复
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.