6

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

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

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

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

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

4

1 回答 1

5

所以看起来,像往常一样,Apple 在他们的框架中发生了一些奇怪而独特的事情。当您从 iOS 设备(例如您的 iPhone)上投放广告时,广告有两个“存储区”——一个是任何正在扫描的设备都可以看到的普通存储区,另一个是只有以下用户才能看到的“溢出”存储区专门扫描它的 iOS 设备。当您的应用在后台做广告时,不幸的是,您发布的所有服务 UUID 都会进入这个溢出区域,因此看起来只有其他 iOS 设备可以看到它——而不是您的 Mac。来自CBPeripheralManager 文档

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

于 2013-06-21T20:09:37.047 回答