How to use service soliciting with IOBluetooth/CoreBluetooth?

僤鯓⒐⒋嵵緔 提交于 2019-12-04 15:57:51

问题


What I'm trying to do is use the Apple Notification Center Service (ANCS) from my iPhone on my Mac. To make my Mac show up on in my iPhone's Bluetooth settings, I apparently need to use service soliciting.

What I've tried so far is initiate a CBPeripheralManager on my Mac, add the ANCS service to it and start advertising. That doesn't seem to do it, as my Mac doesn't show up in my iPhone's Bluetooth settings. What I've also tried is initiate a CBCentralManager and start scanning, with the ANCS UUID in the CBCentralManagerScanOptionSolicitedServiceUUIDsKey key, which doesn't work either.

Does anyone have an idea on how to accomplish this? I've spent tons of hours watching WWDC videos and browsing through Apple's documentation, but other than some vague mentions of "service soliciting", I can't find it.

Thanks!


回答1:


When a Bluetooth LE device advertises, it contains certain data in its advertising packet. This can overflow into what is known as Extended Inquiry Response (EIR) data, which the scanning device can request.

To use service solicitation, one has to include the key 0x15 (marking "List of 128-bit Service Solicitation UUIDs, see here) and the ANCS UUID 7905F431-B5CE-4E99-A40F-4B1E122D00D0.

I have been able to get this to work on embedded platforms and iOS but have not tried it on OSX. However, you should be able to request the system to add the advertising data in by using the key you mentioned above:

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

This passes a dictionary containing that key paired with an array of a single CBUUID object for the ANCS UUID.



来源:https://stackoverflow.com/questions/23469135/how-to-use-service-soliciting-with-iobluetooth-corebluetooth

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!