如何使用 IOBluetooth/CoreBluetooth 的服务请求?

Joo*_*ost 1 macos iobluetooth ios core-bluetooth ancs

我想要做的是在 Mac 上使用 iPhone 上的 Apple 通知中心服务 (ANCS)。为了让我的 Mac 出现在我 iPhone 的蓝牙设置中,我显然需要使用服务请求。

到目前为止我所尝试的是CBPeripheralManager在我的 Mac 上启动一个,向它添加 ANCS 服务并开始做广告。这似乎不行,因为我的 Mac 没有出现在我 iPhone 的蓝牙设置中。我还尝试过启动CBCentralManager并开始扫描,CBCentralManagerScanOptionSolicitedServiceUUIDsKey密钥中包含 ANCS UUID ,这也不起作用。

有没有人知道如何做到这一点?我花了大量时间观看 WWDC 视频并浏览 Apple 的文档,但除了对“服务请求”的一些模糊提及之外,我找不到它。

谢谢!

mbu*_*c91 5

当蓝牙 LE 设备进行广告时,它的广告数据包中包含某些数据。这可能会溢出到扫描设备可以请求的所谓的扩展查询响应 (EIR) 数据中。

要使用服务请求,必须包含密钥 0x15(标记“128 位服务请求 UUID 列表,请参阅此处”)和 ANCS UUID 7905F431-B5CE-4E99-A40F-4B1E122D00D0

我已经能够让它在嵌入式平台和 iOS 上工作,但还没有在 OSX 上尝试过。但是,您应该能够使用上面提到的密钥请求系统添加广告数据:

CBCentralManager *manager = [[CBCentralManager alloc] initWithDelegate:self 
                                                                 queue:nil];
[manager scanForPeripheralsWithServices:nil
                                options:@{
    CBCentralManagerScanOptionSolicitedServiceUUIDsKey:@[
        [CBUUID UUIDWithString:@"7905F431-B5CE-4E99-A40F-4B1E122D00D0"]]}];
Run Code Online (Sandbox Code Playgroud)

这会传递一个字典,其中包含与 ANCS UUID 的单个 CBUUID 对象数组配对的密钥。