作为这个问题迟来的答案,现在小牛队已经出局了,这就是我们的想法。
我们最初在两台 iOS 设备(一台作为外围设备,一台作为中央设备)之间实施 ANCS 规范的努力并未成功。一段时间后,苹果公司回复了我们(向他们的传播者致敬)并告诉我们这是不可能的。
通过将 CBPeripheralManager 类和 CBPeripheralManagerDelegate 协议添加到 OSX Mavericks 上嵌入 IOBluetooth.framework 中的 CoreBluetooth.framework(深呼吸),我们现在可以在 OSX 设备上使用 BLE 无线电来实现和通告 ANCS。
因此,此代码片段属于 OSX 上的 CBPeripheralManager:
- (void) advertiseANCS
{
NSLog(@"%s", __FUNCTION__);
// define the ANCS Characteristics
CBUUID *notificationSourceUUID = [CBUUID UUIDWithString:@"9FBF120D-6301-42D9-8C58-25E699A21DBD"];
CBMutableCharacteristic *notificationSource = [[CBMutableCharacteristic alloc] initWithType:notificationSourceUUID properties:CBCharacteristicPropertyNotifyEncryptionRequired value:nil permissions:CBAttributePermissionsReadEncryptionRequired];
CBUUID *controlPointUUID = [CBUUID UUIDWithString:@"69D1D8F3-45E1-49A8-9821-9BBDFDAAD9D9"];
CBMutableCharacteristic *controlPoint = [[CBMutableCharacteristic alloc] initWithType:controlPointUUID properties:CBCharacteristicPropertyWrite value:nil permissions:CBAttributePermissionsWriteEncryptionRequired];
CBUUID *dataSourceUUID = [CBUUID UUIDWithString:@"22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB"];
CBMutableCharacteristic *dataSource = [[CBMutableCharacteristic alloc] initWithType:dataSourceUUID properties:CBCharacteristicPropertyNotifyEncryptionRequired value:nil permissions:CBAttributePermissionsReadEncryptionRequired];
// define the ANCS Service
CBUUID *ANCSUUID = [CBUUID UUIDWithString:@"7905F431-B5CE-4E99-A40F-4B1E122D00D0"];
CBMutableService *ANCS = [[CBMutableService alloc] initWithType:ANCSUUID primary:YES];
ANCS.characteristics = @[notificationSource, controlPoint, dataSource];
// define the Advertisement data
NSMutableDictionary *advertisementData = [NSMutableDictionary dictionary];
[advertisementData setValue:@"ANCS" forKey:CBAdvertisementDataLocalNameKey];
[advertisementData setValue:@[ANCSUUID] forKey:CBAdvertisementDataServiceUUIDsKey];
// publish the ANCS service
[self.peripheralManager addService:ANCS];
[self.peripheralManager startAdvertising:advertisementData];
}
而此代码段属于 iOS 设备上的 CBCentralManager:
- (void) discoverANCS
{
NSLog(@"%s", __FUNCTION__);
NSMutableArray *services = [NSMutableArray array];
[services addObject:@"7905F431-B5CE-4E99-A40F-4B1E122D00D0"];
NSMutableDictionary *options = [NSMutableDictionary dictionary];
[options setValue:[NSNumber numberWithBool:NO] forKey:CBCentralManagerScanOptionAllowDuplicatesKey];
[self.centralManager scanForPeripheralsWithServices:services options:options];
}
iOS 设备现在可以查看并连接到 OSX 无线电,该无线电实现了 Apple 文档中详细介绍的 ANCS 规范。
<CBCentralManager: 0x14e23280> <CBPeripheral: 0x14d27b40 identifier = 7231B80F-874E-DB5F-2AF9-7F376911E2B7, Name = "ANCS", state = disconnected> {
kCBAdvDataChannel = 39;
kCBAdvDataIsConnectable = 1;
kCBAdvDataLocalName = ANCS;
} -60
快乐狩猎