1

CoreBluetooth を使用して外部 BLE アクセサリ (cc256x) とやり取りする iOS アプリケーションを使用しています。iOS デバイスから BLE デバイスに iOS 通知を送信する必要があります。Apple のドキュメントによると、私は ANCS (Apple Notification Center Service) を使用しています。

https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/AppleNotificationCenterServiceSpecification/Introduction/Introduction.html

iOSアプリから従った手順は次のとおりです。

iOS デバイスは周辺機器として機能し、以下のように ANCS をアドバタイズします。

-(void)addService
{
    CBUUID *notificationSourceUUID = [CBUUID UUIDWithString:@"9FBF120D-6301-42D9-8C58-25E699A21DBD"];

    CBMutableCharacteristic *notificationSourceCharacteristic = [[CBMutableCharacteristic alloc] initWithType:notificationSourceUUID properties:CBCharacteristicPropertyNotify value:nil permissions:CBAttributePermissionsReadable];

    CBUUID *controlPointUUID = [CBUUID UUIDWithString:@"69D1D8F3-45E1-49A8-9821-9BBDFDAAD9D9"];

    CBMutableCharacteristic *controlPoint = [[CBMutableCharacteristic alloc] initWithType:controlPointUUID properties:CBCharacteristicPropertyWrite value:nil permissions:CBAttributePermissionsWriteable];

    CBUUID *dataSourceUUID = [CBUUID UUIDWithString:@"22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB"];

    CBMutableCharacteristic *dataSource = [[CBMutableCharacteristic alloc] initWithType:dataSourceUUID properties:CBCharacteristicPropertyNotify value:nil permissions:CBAttributePermissionsReadable];

    CBUUID *newAlertCategoryUUID = [CBUUID UUIDWithString:@"0x2A47"];

    CBMutableCharacteristic *newAlertCategoryChar = [[CBMutableCharacteristic alloc] initWithType:newAlertCategoryUUID properties:CBCharacteristicPropertyRead value:nil permissions:CBAttributePermissionsReadable];

    CBUUID *supportedUnreadAlertCategoryUUID = [CBUUID UUIDWithString:@"0x2A48"];

    CBMutableCharacteristic *supportedUnreadAlertCategoryChar = [[CBMutableCharacteristic alloc] initWithType:supportedUnreadAlertCategoryUUID properties:CBCharacteristicPropertyRead value:nil permissions:CBAttributePermissionsReadable];

    CBUUID *newAlertUUID = [CBUUID UUIDWithString:@"0x2A46"];

    newAlertChar = [[CBMutableCharacteristic alloc] initWithType:newAlertUUID properties:CBCharacteristicPropertyNotify value:nil permissions:CBAttributePermissionsReadable];

    CBUUID *unreadAlertUUID = [CBUUID UUIDWithString:@"0x2A45"];

    unreadAlertChar = [[CBMutableCharacteristic alloc] initWithType:unreadAlertUUID properties:CBCharacteristicPropertyNotify value:nil permissions:CBAttributePermissionsReadable];

    CBUUID *alertNotificationControlPointUUID    = [CBUUID UUIDWithString:@"0x2A44"];

    self.alertNotificationControlPointChar = [[CBMutableCharacteristic alloc] initWithType:alertNotificationControlPointUUID properties:CBCharacteristicPropertyWrite value:nil permissions:CBAttributePermissionsWriteable];

    ANCSUUID = [CBUUID UUIDWithString:@"0x1811"];

    CBMutableService *ANCS = [[CBMutableService alloc] initWithType:ANCSUUID primary:YES];

    ANCS.characteristics = @[newAlertCategoryChar,supportedUnreadAlertCategoryChar,newAlertChar,unreadAlertChar,self.alertNotificationControlPointChar,notificationSourceCharacteristic,controlPoint,dataSource];

    [self.peripheralManager addService:ANCS];
}


- (void) advertiseANCS
{
    NSLog(@"%s", __FUNCTION__);

    [self addService];

    // define the Advertisement data
    NSMutableDictionary *advertisementData = [NSMutableDictionary dictionary];
    [advertisementData setValue:@"ANCS" forKey:CBAdvertisementDataLocalNameKey];
    [advertisementData setValue:@[ANCSUUID] forKey:CBAdvertisementDataServiceUUIDsKey];

    [self.peripheralManager startAdvertising:advertisementData];
}

サービスは広告であり、中央として機能する外部cc256xベースのデバイスは、スキャンして周辺機器に接続できます.

cc256x デバイスが新しいアラート/未読アラートの通知をサブスクライブしようとすると、次のようなエラーが発生します。

エラー - ANS_Decode_Un_Read_Alert_Status_Notification が -1004 を返しました。

このエラーは、リモート アプリが間違った/破損した「未読アラート ステータス通知動作」通知を送信したことを示しています。

iOS アプリからの私の理解では、ANCS を宣伝するだけで済みます。BLE デバイスが ANCS 特性にサブスクライブすると、iOS は自動的に通知を送信します。

このリンクに記載されているように試しました

iOS 7 ANCS: プライマリ ANCS サービス UUID の検出

BLEペリフェラルで通知を見ることができません。

不足しているものはありますか?これに対する解決策を見つけることができないので、私を助けてください。

4

0 に答える 0