参考链接:Apple Notification Center Service (ANCS) Specification
提示(tips):上述参考链接需要用VPN外网才能打开链接
注意事项:本文翻译是鄙人参考链接原文以及结合谷歌翻译而成,如果有问题敬请原谅。
介绍(Introduction)
苹果通知中心服务(ANCS)的目的是给予蓝牙配件(通过蓝牙低功耗链接连接到iOS 设备)一种简单方便的方式访问在iOS设备上生成的各种通知。
ANCS设计围绕三个原则:简单性,效率和可扩展性。 因此,从简单的LED到具有大型显示器的强大“伴随”设备的配件可以发现该服务很有用。
依赖性(Dependencies)
ANCS的使用没有依赖,它是GATT的一个子集,任何一个实现了GATT client的设备可以方便的从ios设备获取通知信息。
字节序和字节码(Endianness and String Encoding)
除非另有规定,通过ANCS传输的所有数值应为小端。
非另有规定,通过ANCS传送的所有字符串值都应由用UTF-8编码的Unicode字符组成。
术语(Terminology)
苹果通知中心服务将被称为ANCS 。
ANCS服务的发布者( iOS设备)将被称为通知提供者(NP) 。
ANCS服务的客户端(配件)应被称为通知消费者(NC) 。
iOS通知中心中显示在iOS设备上的通知应称为iOS通知 。
由GATT特性作为异步消息发送的通知应被称为GATT通知 。
苹果通知中心服务(The Apple Notification Center Service)
苹果通知中心服务是一个主服务,主服务的UUID:7905F431-B5CE-4E99-A40F-4B1E122D00D0
在NP上只能存在ANCS的一个实例。 由于iOS的性质,ANCS不能保证总是存在。 因此,NC应寻找并订阅GATT服务的服务更改特性,以便随时监控ANCS的潜在发布以及及时的取消发布。
服务特性(Service Characteristics)
在其基本形式中,ANCS暴露出三个特征:
- 通知源: UUID 9FBF120D-6301-42D9-8C58-25E699A21DBD (可通知)
- 控制点: UUID 69D1D8F3-45E1-49A8-9821-9BBDFDAAD9D9 (可写响应)
- 数据源: UUID 22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB (可通知)
所有这些特性都需要访问授权。
支持通知源特性是必需的,而对控制点特性和数据源特性的支持是可选的。
注意:在ANCS中可能存在比上面列出的三个更多的特征。 也就是说,NC可以忽略它不能识别的任何特性。
通知源
通知源特性是通知NC的特性:
- 一个新的iOS通知到达NP
- 修改NP上的iOS通知
- 移除NP上的iOS通知
一旦NC订阅通知源特征,就可以传送GATT通知。 因此,NC应处于在订阅此特性之前可以正确接受和处理这些消息的状态。
通过通知源特点发表了GATT通知包含以下信息:
- EventID:该字段通知外设给定的iOS通知是否被添加,修改或删除。此字段的枚举值定义在事件ID值。
- EventFlags:位掩码的设置位通知的NC与iOS的通知特异性。例如,如果在iOS通知被认为是“重要的”,则NC可能要显示一个更积极的用户界面(UI),以确保用户正确警报。此字段的枚举位定义EventFlags。
- CategoryID:一个数值提供在iOS的通知可以被归入一个类别。NP将努力为每个iOS的通知提供精确的类别。此字段的枚举值中定义类别ID值。
- CategoryCount:在给定的类别活跃的iOS通知的当前数目。例如,如果两个未读电子邮件正坐在一个用户的电子邮件收件箱中,并且新邮件推送到用户的iOS设备,CategoryCount的值是3。
- NotificationUID: 32位数值是对iOS的通知的唯一标识符(UID)。这个值可以被用作发送给控制点特性与iOS的通知交互的命令的手柄。
控制点和数据源(Control Point and Data Source)
一个NC可能需要使用iOS通知交互。它可能需要检索有关它的更多信息,包括其内容,也可能希望在其上执行操作。这些属性的检索是通过控制点和数据源的特点进行。
一个NC可以发出通过编写特定命令的控制点的特性来检索有关在iOS通知的更多信息的请求。如果写的控制点的特点是成功的,NP会及时通过GATT通知上的数据源特性的数据流的要求。
一个NC可以通过写特定命令的控制点特征执行在iOS通知预先确定的行动。有关行动和iOS通知的详细信息,执行通知操作。
获取属性的通知(Get Notification Attributes)
在获取通知属性命令允许NC检索特定的iOS通知的属性。一个Get通知属性命令的格式示于图2-3。
一大家通知属性命令包含以下信息:
- CommandID:应设置为0(CommandIDGetNotificationAttributes)。
- NotificationUID:代表为其客户想要的信息了iOS通知的UID 32位数值。
- AttributeIDs:该NC想要检索的属性列表。一些属性可能需要随后指定的NC想要检索的属性的最大字节数的16位长度的参数。
Get通知一个响应的格式属性命令在显示图2-4。
获取通知的响应属性命令包含以下信息:
- CommandID:设置为0(CommandIDGetNotificationAttributes)。
- NotificationUID: 32位的数值即iOS的通知以下属性对应的UID。
- AttributeList中: AttributeIDs列表/ 16位的长/属性的元组。一个属性始终是一个字符串的长度以字节为单位的元组提供,但不是空值终止。如果所请求的属性是空的或丢失的IOS通知,它的长度被设定为0。元组总是以相同的次序作为获取通知的AttributeIDs属性命令。
如果响应是大于GATT最大传输单元(MTU)时,它被分裂成NP的多个片段。NC必须通过重新组合拼接每个片断的响应。当已接收到每一个请求的属性的完整元组的响应就完成了。
获取应用程序属性(Get App Attributes)
在某些应用属性命令允许NC检索安装在NP特定应用的属性。在获取的应用属性命令的格式显示在图2-5。
应用程序属性命令包含以下信息:
- CommandID:应设置为1(CommandIDGetAppAttributes)。
- AppIdentifier:客户希望其信息的应用程序的字符串标识符。此字符串必须是空终止。
- AttributeIDs:数控想要检索的属性的列表。
得到回应的格式属性应用命令的格式于图2-6
获取应用程序属性命令的响应包含以下信息:
- CommandID:设置为1(CommandIDGetAppAttributes)。
- AppIdentifier:应用以下属性对应的字符串标识。此字符串空值终止。
- AttributeList中: AttributeIDs列表/ 16位的长/属性的元组。一个属性始终是一个字符串的长度以字节为单位的元组提供,但不是空值终止。如果请求的属性为空或丢失的应用程序,它的长度设置为0。元组总是在相同的顺序获取应用程序属性命令AttributeIDs。
执行通知操作(Perform Notification Action)
该执行通知操作命令允许在NC上执行特定的iOS通知的规定动作。一个执行通知操作命令包括以下字段:
字节 | 名称 | 描述 |
---|---|---|
1 | CommandID | 设置为2( CommandIDPerformNotificationAction)。 |
2-5 | NotificationUID | 代表在其上客户端要执行的操作了iOS通知的UID的32位数值。 |
6 | ActionID | 要在iOS通知进行NC希望所需的操作。 |
如果没有数据源的特性产生的发出此命令时,不管是成功还是失败,都没有数据产生。
通知操作
与iOS 8.0开始,NP可以给NC设备通知关于iOS的通知相关的一些隐藏行动。代表用户的时,NC然后可以请求的NP,以执行与特定的iOS通知相关联的动作。