IOS通知中心服务 ANC协议

pple通知中心服务

Apple Notification Center服务是其服务UUID所在的主要服务7905F431-B5CE-4E99-A40F-4B1E122D00D0

NP上只有一个ANCS实例。由于iOS的性质,不保证ANCS始终存在。因此,NC应该寻找并订阅GATT服务的服务变更特征,以便随时监控ANCS的潜在发布和取消发布。

服务特色

在其基本形式中,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通知格式如图2-1所示。

图2-1   通过通知源特征提供的GATT通知的格式

通过通知源特征提供的GATT通知包含以下信息:

  • EventID:此字段通知附件是否添加,修改或删除了给定的iOS通知。此字段的枚举值在EventID值中定义。

  • EventFlags:一个位掩码,其设置位通过iOS通知告知NC特定性。例如,如果iOS通知被认为是“重要”,则NC可能希望显示更积极的用户界面(UI)以确保用户被正确警告。此字段的枚举位在EventFlags中定义。

  • CategoryID:提供可以对iOS通知进行分类的类别的数值。NP将尽最大努力为每个iOS通知提供准确的类别。此字段的枚举值在CategoryID值中定义。

  • CategoryCount:给定类别中当前活动iOS通知的数量。例如,如果两个未读电子邮件位于用户的电子邮件收件箱中,并且新电子邮件被推送到用户的iOS设备,则CategoryCount的值为3。

  • NotificationUID: 32位数值,是iOS通知的唯一标识符(UID)。此值可用作发送到控制点特征的命令中的句柄,以与iOS通知进行交互。

可以通过NP生成的Notification Source GATT通知序列隐式推导出iOS通知的生命周期,如图2-2所示。

图2-2   iOS通知的生命周期

控制点和数据源

NC可能想要与iOS通知进行交互。它可能想要检索有关它的更多信息,包括其内容,或者它可能想要对其执行操作。通过控制点和数据源特征执行这些属性的检索。

NC可以通过将特定命令写入控制点特征来发出检索有关iOS通知的更多信息的请求。如果对控制点特性的写入成功,则NP将通过关于数据源特征的GATT通知流迅速响应该请求。

NC可以通过将特定命令写入控制点特征来对iOS通知执行预定动作。有关操作和iOS通知的更多信息,请参阅执行通知操作

获取通知属性

Get Notification Attributes命令允许NC检索特定iOS通知的属性。Get Notification Attribute命令的格式如图2-3所示。

图2-3   Get Notification Attribute命令的格式

“获取通知属性”命令包含以下信息:

  • CommandID:应设置为0CommandIDGetNotificationAttributes)。

  • NotificationUID: 32位数值,表示客户端需要信息的iOS通知的UID。

  • AttributeIDs: NC想要检索的属性列表。某些属性可能需要后跟16位长度参数,该参数指定NC要检索的属性的最大字节数。

Get Notification Attributes命令的响应格式如图2-4所示。

图2-4   Get Notification Attributes命令响应的格式

对Get Notification Attributes命令的响应包含以下信息:

  • CommandID:设置为0CommandIDGetNotificationAttributes)。

  • NotificationUID: 32位数值,是iOS通知的UID,以下属性对应。

  • AttributeList: AttributeIDs / 16位长度/属性元组的列表。属性始终是一个字符串,其长度以字节为单位在元组中提供,但不以NULL结尾。如果iOS通知的请求属性为空或缺失,则其长度设置为0。元组的顺序始终与Get Notification Attributes命令的AttributeID相同。

如果响应大于协商的GATT最大传输单元(MTU),则NP将其分成多个片段。NC必须通过拼接每个片段来重新组合响应。当收到每个请求属性的完整元组时,响应完成。

获取应用属性

Get App Attributes命令允许NC检索NP上安装的特定应用程序的属性。Get App Attributes命令的格式如图2-5所示。

图2-5   Get App Attributes命令的格式

“获取应用程序属性”命令包含以下信息:

  • CommandID:应设置为1CommandIDGetAppAttributes)。

  • AppIdentifier:客户端需要信息的应用程序的字符串标识符。该字符串必须以NULL结尾。

  • AttributeIDs: NC想要检索的属性列表。

Get App Attributes命令的响应格式如图2-6所示。

图2-6   Get App Attributes命令响应的格式

对Get App Attributes命令的响应包含以下信息:

  • CommandID:设置为1CommandIDGetAppAttributes)。

  • AppIdentifier:以下属性对应的应用程序的字符串标识符。该字符串以NULL结尾。

  • AttributeList: AttributeIDs / 16位长度/属性元组的列表。属性始终是一个字符串,其长度以字节为单位在元组中提供,但不以NULL结尾。如果应用程序的请求属性为空或缺失,则其长度设置为0。元组的顺序始终与Get App Attributes命令的AttributeID相同。

与对Get Notification Attributes命令的响应一样,如果对Get App Attributes命令的响应大于协商的GATT Maximum Transmission Unit(MTU),则NP将其拆分为多个片段。NC必须通过拼接每个片段来重新组合响应。当收到每个请求属性的完整元组时,响应完成。

执行通知操作

执行通知操作命令允许NC对特定iOS通知执行预定动作。“执行通知操作”命令包含以下字段:

字节

名称

描述

1

CommandID

设为2(CommandIDPerformNotificationAction)。

2-5

NotificationUID

一个32位数值,表示客户端想要执行操作的iOS通知的UID。

6

ActionID

NC希望在iOS通知上执行所需的操作。

发出此命令时,无论数据源特性是否成功,都不会生成数据。

通知行动

从iOS 8.0开始,NP可以通知NC与iOS通知相关的潜在操作。代表用户,NC可以请求NP执行与特定iOS通知相关联的操作。

通过检测EventFlags通知源特征生成的GATT通知字段中是否存在设置标志,NC通知iOS通知上存在可执行操作:

  • EventFlagPositiveAction:存在一个积极的操作,并与此iOS通知相关联。

  • EventFlagNegativeAction:存在否定操作并与此iOS通知关联。

NP代表NC执行的实际操作由NP确定,并根据执行的iOS通知而变化。例如,对来电通知执行肯定操作可以回答它,而执行否定操作可能会拒绝它。

NC必须既不假设也不试图提前猜测对iOS通知执行的确切操作,因为这些操作基于其不可用的信息,以及其他因素,例如NP实施的ANCS版本。NP保证正面和负面的行为与不会让用户感到惊讶的结果相关联。

如果出现iOS通知,则可以将正面和负面动作表示为用户通常与确认和解雇相关的复选标记,X标记或颜色(例如绿色和红色)。

通过检索iOS 8.0中引入的新通知属性,NC可以检索简洁描述与iOS通知相关的实际操作的标签:

  • NotificationAttributeIDPositiveActionLabel:用于描述可以对iOS通知执行的积极操作的标签。

  • NotificationAttributeIDNegativeActionLabel:用于描述可以对iOS通知执行的否定操作的标签。

会议

当NC订阅NP上的通知源特征并且NC取消订阅相同的特征或断开与NP的连接时,ANCS会话开始。由于ANCS并非设计为完整的同步服务,因此它不会跨会话跟踪状态。因此,所有标识符(例如NotificationUID和AppIdentifier)以及NC和NP之间交换的所有数据仅在特定会话中有效。

当特定会话结束时,NC应删除在会话期间收集和存储的任何标识符和数据。当新会话开始时,NP会尽力通知NC系统上现有的任何iOS通知。NC可以使用此信息来构建模型以用于会话的剩余部分。

属性获取和缓存

强烈建议NC仅在需要时并且可能响应用户操作来获取属性。例如,如果NC选择在简单列表中显示活动iOS通知,并且仅在用户选择时显示有关特定iOS通知的详细信息,则可以懒惰地触发此iOS通知属性的检索。

在会话期间,强烈建议NC为其遇到的每个应用程序标识符构建应用程序属性的缓存。构建此缓存允许NC避免多次检索相同的不可变App属性,从而节省时间并保留电池。

错误代码

写入控制点特性时,NC可能会收到以下ANCS特定的错误代码:

  • 未知命令0xA0):NP无法识别commandID。

  • 无效的命令0xA1):命令格式不正确。

  • 无效的参数0xA2):其中一个参数(例如,NotificationUID)不引用NP上的现有对象。

  • 操作失败0xA3):未执行操作。

如果NP回复错误,则不会对相应命令的数据源特征生成任何GATT通知。

示例图

以下两幅图显示了NP和NC之间两种常见相互作用的例子。图2-7显示了在NC上设置ANCS所需的典型命令和响应序列。图2-8显示了获取有关iOS通知的更多信息以便在NC上显示所需的典型命令和响应序列。

图2-7   服务设置示例

图2-8   通知属性检索示例

附录

下表列出了ANCS中使用的重要值。

CategoryID值

表3-1   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,

保留CategoryID

= 12-255

EventID值

表3-2   EventID值

EventIDNotificationAdded

= 0,

EventIDNotificationModified

= 1,

EventIDNotificationRemoved

= 2,

保留EventID

= 3-255

EventFlags

表3-3   EventFlags

EventFlagSilent

=(1 << 0),

EventFlagImportant

=(1 << 1),

EventFlagPreExisting

=(1 << 2),

EventFlagPositiveAction

=(1 << 3),

EventFlagNegativeAction

=(1 << 4),

保留的 EventFlags

=(1 << 5) - (1 << 7)

CommandID值

表3-4   CommandID值

CommandIDGetNotificationAttributes

= 0,

CommandIDGetAppAttributes

= 1,

CommandIDPerformNotificationAction

= 2,

保留CommandID

= 3-255

NotificationAttributeID值

表3-5   NotificationAttributeID值

NotificationAttributeIDAppIdentifier

= 0,

NotificationAttributeIDTitle

= 1,(需要跟随2个字节的最大长度参数)

NotificationAttributeIDSubtitle

= 2,(需要跟随2个字节的最大长度参数)

NotificationAttributeIDMessage

= 3,(需要跟随2个字节的最大长度参数)

NotificationAttributeIDMessageSize

= 4,

NotificationAttributeIDDate

= 5,

NotificationAttributeIDPositiveActionLabel

= 6,

NotificationAttributeIDNegativeActionLabel

= 7,

保留NotificationAttributeID

= 8-255

注意:NotificationAttributeIDMessageSize常量 的格式是一个字符串,表示消息大小的整数值。NotificationAttributeIDDate常量的格式是使用Unicode技术标准(UTS)#35日期格式模式的字符串yyyyMMdd'T'HHmmSS。表3-5中所有其他常量的格式是UTF-8字符串。

ActionID值

表3-6   ActionID值

ActionIDPositive

= 0,

ActionIDNegative

= 1,

保留ActionID

= 2-255

AppAttributeID值

表3-7   AppAttributeID值

AppAttributeIDDisplayName

= 0,

保留AppAttributeID

= 1-255

猜你喜欢

转载自blog.csdn.net/lizhibing115/article/details/88723129