CoreBluetooth - iPhone 后台广播

6
我正在开发一款iPhone和Mac OS X应用程序,可以通过接近距离锁定和解锁您的Mac。这意味着,如果信号强度低于一个确定的阈值或连接丢失,它将锁定Mac。
我正在使用苹果的CoreBluetooth框架进行BTLE通信,将iPhone用作外设,将Mac用作中心设备。到目前为止,一切都很好。当我将iPhone上的应用程序发送到后台时,广告似乎发生了变化。iPhone仍在广告,但没有我在应用程序中使用的服务配置文件和特征。
虽然当iPhone仍在Mac的范围内时,这不是问题,因为它仍然连接,并且中央不使用特征,但是当将iPhone移出范围后,就会成为问题。如预期的那样,Mac会锁定并开始发现以重新连接iPhone并解锁(如果成功)。
但在此发现过程中,我使用指定的服务配置文件和特征仅获取运行我的应用程序的设备并识别用于解锁的设备。
我尝试了一种解决方法,即在没有服务配置文件的情况下进行发现,并通过其UUID识别正确的设备,该UUID在我开始使用此iPhone进行锁定和解锁时保存。这个解决方法在小范围内也有效,因为当我关闭iPhone上的蓝牙并再次打开时,它会获得另一个UUID。这是我可以接受的限制,但几个小时后它也会更改UUID,然后解锁就无法正常工作。
也许有人已经开发过类似的应用程序,并知道如何解决此类问题?或者您知道可以用于识别设备的静态值?
1个回答

5
似乎像往常一样,苹果的框架中有一些奇怪而独特的东西。当您从iOS设备(例如iPhone)进行广告时,有两个“存储区域”用于广告 - 一个是任何正在扫描的设备都可以看到的普通存储区域,另一个是只能被专门扫描它的iOS设备看到的“溢出”存储区域。不幸的是,当您的应用在后台进行广告时,所有服务UUID都会进入这个溢出区域,因此似乎只有其他iOS设备才能看到它 - 而不是您的Mac。来自CBPeripheralManager文档的内容如下:
引用:

包含在CBAdvertisementDataServiceUUIDsKey键的值中但无法适应分配空间的任何服务通用唯一标识符(UUID)都将添加到特殊的“溢出”区域;它们只能由明确扫描它们的iOS设备发现。当您的应用程序处于后台时,本地名称不会被广告,所有服务UUID都被放置在溢出区域中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接