我已经阅读了有关它的所有相关信息,但仍然无法使我的iOS7设备像后台广告客户一样工作。它在前景中工作正常,但在后台我甚至可以发现它。我在plist文件中添加了 App使用CoreBluetooth 共享数据。我在阅读后看到它将我的自定义UUID放入溢出数据中。我也尝试了这个(但没有运气)。
NSDictionary *advertisingData = @{
CBAdvertisementDataServiceUUIDsKey : @[CBUUID UUIDWithString:TRANSFER_SERVICE_UUID],
CBAdvertisementDataOverflowServiceUUIDsKey : @[CBUUID UUIDWithString:TRANSFER_SERVICE_UUID]
};
[manager startAdvertising:advertisingData];
在另一侧的中央(MAC OS应用),我只扫描我的: TRANSFER_SERVICE_UUID 服务。有没有我错过的东西,我应该在中央部分另外实施?
答案 0 :(得分:4)
请注意startAdvertising:
方法文档中的这一行:
当应用程序在后台时,将不使用本地名称,并且所有服务UUID将放置在“溢出”区域中。但是,未指定“蓝牙 - 外设”背景模式的应用程序将无法在后台播放任何内容。
也就是说,后台外围设备会删除广告中的所有内容,而只能通过非 iOS应用程序检测到它的存在。 iOS应用程序可以到达溢出区域,但MacOS应用程序无法访问。您需要关闭MacOS端的服务过滤才能检测外围设备并连接到外围设备以发现它是否具有搜索到的服务。
仅供参考,此方案没有解决方法,已经在Apple bluetooth-dev邮件列表和许多SO问题上多次讨论过。
另请注意,CBAdvertisementDataOverflowServiceUUIDsKey
不是startAdvertising:
的有效输入密钥。如果在溢出区域中找到了某些内容,iOS会在CBAdvertisementDataOverflowServiceUUIDsKey
回调中返回didDiscoverPeripheral
。仅使用CBAdvertisementDataServiceUUIDsKey
来定义广告服务列表。