用于对接苹果通知中心BLE服务,NP指代iPhone或iPad,NC指代BLE终端设备。
The Apple develop address for ANCS
目录
1.ANCS服务特征
2.Notification Source(通知源)
3.Control Point(控制命令)&Data Source(数据源)
Characteristic |
UUID |
Authorization |
Notification Source |
9FBF120D-6301-42D9-8C58-25E699A21DBD |
notifiable |
Control Point |
69D1D8F3-45E1-49A8-9821-9BBDFDAAD9D9 |
writeable with response |
Data Source |
22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB |
notifiable |
ANCS与AMS类似也是一个有着3个characteristic的service,如上表描述:通知、命令、数据。
其中通知,由iOS发出iOS通知中心收到的所有通知信息,包括来电、社交、新闻之类。
其中命令、数据组合成一个交互function,NC->NP端,由NC写control point发送指定cmdID,NP端收到并从数据端口发回响应数据。
用于发送notify形式的通知消息,手机NP -> NC产品,通知消息分三种类型:新增新通知消息、通知消息出现变化、通知消息被移除(包括手机端操作移除和产品端操作移除)。
一条通知消息的标准格式:
EventID |
EventFlags |
CategoryID |
CategoryCount |
NotificationUID |
1byte |
1 byte |
1 byte |
1 byte |
4 byte |
此字段通知配件是否添加、修改或删除了给定的 iOS 通知 |
一个位掩码,其设置位通过 iOS 通知通知 NC 的特殊性。 |
一个数值,提供iOS通知可以分类的类别 |
给定类别中当前活动 iOS 通知的数量。不同类型消息累积计数不相关 |
一个 32 位数值,是 iOS 通知的唯一标识符 (UID)。此值可用作发送到控制点特征的命令中的句柄,以与 iOS 通知交互 |
CategoryID :描述通知消息所属类型
CategoryIDOther其它 |
= 0, |
CategoryIDIncomingCall来电 |
= 1, |
CategoryIDMissedCall未接来电 |
= 2, |
CategoryIDVoicemail语音信息类 |
= 3, |
CategoryIDSocial社交类消息 |
= 4, |
CategoryIDSchedule日程类 |
= 5, |
CategoryIDEmail电子邮件类 |
= 6, |
CategoryIDNews新闻类消息 |
= 7, |
CategoryIDHealthAndFitness健康及健身通知 |
= 8, |
CategoryIDBusinessAndFinance商业及金融 |
= 9, |
CategoryIDLocation本地消息 |
= 10, |
CategoryIDEntertainment娱乐类消息 |
= 11, |
EventID:描述当前通知的属性是增、删、改
EventIDNotificationAdded新增一条通知 |
= 0, |
EventIDNotificationModified通知变更 |
= 1, |
EventIDNotificationRemoved通知被移除 |
= 2, |
EventFlags:描述通知的重要性、活跃性等属性
|
= (1 << 0), |
|
= (1 << 1), |
|
= (1 << 2), |
|
= (1 << 3), |
|
= (1 << 4), |
AppAttributeID:应用展示
|
= 0, |
Reserved |
= 1–255 |
NC通过control point特征写属性向NP发送控制、查询命令,NP通过data source特征notify属性向NC回传响应数据(并不是所有命令都有回传)。
控制命令共三条:
CommandID:命令ID
CommandIDGetNotificationAttributes获取通知属性 |
= 0, |
CommandIDGetAppAttributes获取应用属性,应用名 |
= 1, |
CommandIDPerformNotificationAction执行通知操作 |
= 2, |
错误代码
写入控制点特性时,NC 可能会收到以下 ANCS 特定的错误代码:
未知命令( 0xA0):命令ID 未被 NP 识别。
无效命令( 0xA1):命令格式不正确。
无效参数( 0xA2):参数之一(例如 NotificationUID)未引用 NP 上的现有对象。
操作失败( 0xA3):未执行操作。
如果 NP 回复错误,则不会针对相应命令的数据源特性生成任何 GATT 通知。
CommandIDGetNotificationAttributes获取通知属性命令格式(CMD = 0):
CommandID |
NotificationUID |
Attribute ID 1 |
Attribute 1 max length |
Attribute ID 2 |
Attribute 2 max length |
... |
1byte |
4 byte |
1 byte |
2 byte |
1 byte |
2 byte |
... |
iOS分配 ID = 0 |
想操作的接收到的对应通知消息的UID |
属性ID |
数据长度 |
属性ID |
数据长度 |
... |
NC通过control point特征写属性向NP发送,理论一条命令一次可以发送获取多条通知属性,但通常只获取一条。
对获取通知属性命令的响应格式(CMD = 0):
CommandID |
NotificationUID |
Attribute ID 1 |
Attribute 1 max length |
Attribute Data 1 |
Attribute ID 2 |
Attribute 2 max length |
Attribute Data 2 |
... |
1byte |
4 byte |
1 byte |
2 byte |
N byte |
1 byte |
2 byte |
N byte |
... |
iOS分配 ID = 0 |
想操作的接收到的对应通知消息的UID |
属性ID |
数据长度 |
数据 |
属性ID |
数据长度 |
数据 |
... |
NP通过data source特征notify属性向NC回传响应数据。
UID后是一个属性列表,由属性ID、数据长度、数据组成的列表。
当响应数据长度超过MTU时,一条消息会被分割成多条消息发送,NC端需要接收并组合再处理。
NotificationAttributeID(AttributeID):通知属性类型
有三种属性是需要指定可接收数据最大长度的(Attribute 2 max length),其它不用,通常指定一个较大的数字即可,下表描述属性类型。
|
= 0, |
|
= 1, (需要指定可接收数据最大长度) |
|
= 2, (需要指定可接收数据最大长度) |
|
= 3, (需要指定可接收数据最大长度) |
|
= 4, |
|
= 5, |
|
= 6, |
|
= 7, |
CommandIDGetAppAttributes获取应用属性命令格式(CMD = 1):
AppIdentifier:客户端想要了解的应用程序的字符串标识符。此字符串必须以 NULL 结尾。
AttributeIDs: NC 想要检索的属性列表。
用于获取指定应用的相关属性,如社交应用的消息内容等,它与获取通知属性命令不同的是它可以获取之前某条通知的具体内容,而通知属性命令是获取当前通知UID的通知属性内容。
获取应用属性命令的响应格式(CMD = 1):
AppIdentifier:以下属性对应的应用程序的字符串标识符。此字符串以 NULL 结尾。
AttributeList: AttributeIDs/16 位长度/属性元组的列表。属性始终是一个字符串,其字节长度在元组中提供,但不是以 NULL 结尾的。如果应用程序请求的属性为空或缺失,则其长度设置为0。元组的顺序始终与 Get App Attributes 命令的 AttributeID 的顺序相同。
CommandIDPerformNotificationAction执行通知操作命令格式(CMD = 2):
字节 |
Name |
描述 |
1 |
CommandID |
2 ( CommandIDPerformNotificationAction)。 |
2-5 |
NotificationUID |
一个 32 位数值,表示客户端想要对其执行操作的 iOS 通知的 UID。 |
6 |
ActionID |
NC 希望在 iOS 通知上执行的所需操作。 |
ActionID:通知活跃或消极
|
= 0, |
|
= 1, |
执行通知操作命令发出后,iOS不会有任何响应数据回来,NC端可以在notification attbute特征notify属性端接收相应的执行结果变更通知,如果有的话。
iOS通常只会响应它建议的操作(积极/消极)。