CoreBluetooth - 背景模式下的iPhone广告

时间:2013-06-21 14:56:12

标签: iphone ios macos core-bluetooth

我正在使用iPhone和Mac OS X应用程序,它允许您通过距离锁定和解锁Mac。意味着如果信号强度低于确定的阈值或连接丢失,则应锁定mac。

我正在为BTLE使用Apples CoreBluetooth框架,使用iPhone作为外设,Mac作为中心。到现在为止还挺好。它也很好用但是当我将应用程序发送到iPhone的背景时,广告似乎发生了变化。 iPhone仍在广告,但没有服务配置文件和特性,我在应用程序中使用。 虽然当iPhone仍然在Mac的范围内时这不是问题,因为它仍然连接并且中央没有使用这些特性,所以在将iPhone移出范围后会出现问题。正如预期的那样,Mac锁定并开始发现重新连接iPhone并解锁如果成功。

但是在这个发现中,我使用指定的服务配置文件和特性来仅运行运行我的应用程序的设备并识别用于解锁的设备。

我通过发现没有服务配置文件并通过其UUID识别正确的设备尝试了一种解决方法,当我开始使用此iPhone进行锁定和解锁时,我保存了该UUID。这种解决方法也适用于小范围,因为当我关闭iPhone上的蓝牙并再次打开它时,它会获得另一个UUID。这是我可以忍受的约束,但它也会在几个小时后更改UUID然后解锁不起作用。

也许有人已经在这样的应用程序上工作并知道如何解决这样的问题?或者您知道我可以用来识别设备的静态值吗?

1 个答案:

答案 0 :(得分:5)

所以看起来像往常一样,Apple在他们的框架中有一些奇怪而独特的东西。当您从iOS设备(例如您的iPhone)做广告时,广告有两个“存储区域” - 正常扫描的任何设备都可以看到,以及“溢出”只能通过专门扫描它的iOS设备。当您的应用程序在后台进行广告时,您发布的所有服务UUID很遗憾地进入此溢出区域,因此看起来只有其他iOS设备可以看到它 - 而不是您的Mac。来自CBPeripheralManager docs

  

包含在中的任何服务通用唯一标识符(UUID)   不适合的CBAdvertisementDataServiceUUIDsKey键的值   分配的空间被添加到一个特殊的“溢出”区域;他们可以   仅由显式扫描它们的iOS设备发现。   当您的应用程序在后台时,不会公布本地名称   并且所有服务UUID都放在溢出区域中。