使ios7 BLE外设在后台工作

我已经阅读了有关它的每一个相关信息,但仍然不能让我的iOS7设备在后台像外设广告客户一样工作。 它在前台运行良好,但在后台我甚至可以发现它。 我使用CoreBluetooth在plist文件中添加了应用程序共享数据 。 我读了后台后,它把我的自定义UUID在溢出数据。 我也试过这个(但没有运气)。

NSDictionary *advertisingData = @{ CBAdvertisementDataServiceUUIDsKey : @[CBUUID UUIDWithString:TRANSFER_SERVICE_UUID], CBAdvertisementDataOverflowServiceUUIDsKey : @[CBUUID UUIDWithString:TRANSFER_SERVICE_UUID] }; [manager startAdvertising:advertisingData]; 

在另一端(MAC OS应用程序)的中央,我只扫描我的: TRANSFER_SERVICE_UUID服务。 有什么我错过了,我应该加强在中央?

请注意startAdvertising:方法的文档中的这一行:

当应用程序在后台时,将不会使用本地名称,所有服务UUID将被放置在“溢出”区域中 。 但是,没有指定“蓝牙外设”后台模式的应用程序将不能在后台播放任何内容。

也就是说,后台周边设备从广告中删除所有东西, 只有它的存在才能被 iOS应用程序检测到 。 iOS应用程序能够到达溢出区域,但MacOS应用程序不能。 您需要closuresMacOS端的服务过滤function,以便能够检测外围设备并连接到外围设备,以发现它是否具有search的服务。

仅供参考,这种情况下没有解决方法,已经在Apple bluetooth-dev邮件列表和许多SO问题上多次讨论过。

另请注意, CBAdvertisementDataOverflowServiceUUIDsKey对于startAdvertising:不是有效的input键startAdvertising:CBAdvertisementDataOverflowServiceUUIDsKey由iOS在didDiscoverPeripheralcallback中返回,如果它在溢出区域中发现的东西。 只使用CBAdvertisementDataServiceUUIDsKey来定义广告服务的列表。