赞
踩
1、ANCS(Apple Notification Center Service)是IOS系统中的一个通知服务,使用该服务的方式为,设备连接手机后,设备上的GATT客户端发现IOS手机端上的ANCS服务,并且使能其通知源Characteristics的notifys功能,之后IOS系统就会通过ble推送消息给设备。
2、通常推送的消息仅仅是一个简短通知,比如通知有一个社交消息,如果需要获取详细内容,还需要设备通过控制点Characteristics主动发送控制指令给ANCS服务,让其返回详细内容,返回的详细信息通过一个数据源Characteristics来返回。所以连接上服务后除了使能通知源Characteristics的notify功能,如果需要获取通知的详细信息,还需要使能数据源Characteristics的notify功能。
3、ANCS服务及其几个特征:
ANCS服务:UUID 7905F431-b5CE-4E99-A40F-4B1E122D00D0
Notification Source:UUID 9FBF120D-6301-42D9-8C58-25E699A21DBD(notifiable属性),NP用来发送通知给NC。
Control Point:UUID 69D1D8F3-45E1-49A8-9821-9BBDFDAAD9D9(writeable with response),NC用来发送控制命令给NP,如获取通知详细信息。
Data Source:UUID 22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB(notification),NP收到NC获取详细信息命令后返回通知的详细信息。
4、NC(消息消费者)与NP(消息提供者)交互
notification source发送给NC设备的通知仅仅是简短的消息,如果希望获取详细的消息则需要NC设备主动发送控制指令给NP设备上服务的Control Point特征,发送控制消息后ANCS服务会返回更详细的消息,但是这个消息不会再通过notification source特征,而是通过Data Source特征。
NP发送通知给NC的通道,发送的数据格式如下:
a. EventID:表示通知的类型 主要有added,modified,removed
eg:手机收到微信消息,则INP设备发送一个added类型的通知给NC设备,如果NP设备在通知栏主动清除了这通知,则NP设备就会发送一个removed的通知给NC设备。
b. EventFlags:使用每个bit表示通知的特性
EventFlagSilent | bit | 意义 |
EventFlagImportant | (1<<1) | 表示通知重要,比如手机来电时,发送给NC的通知该bit就会被置位 |
EventFlagPreExisting | (1<<2) | 表示消息是之前就存在的,比如NC和NP断开连接后再次连接,NP就会发送断开前没处理的通知,该bit就会被置位 |
EventFlagPositiveAction | (1<<3) | 表示这个通知具有一些预定义的动作,比如电话通知的接听和拒接,至于执不执行则需要NC设备发送执行PositiveAction或NegativeAction命令 |
EventFlagNegativeAction | (1<<4) | 同上 |
Reserved EventFlags | (1<<5)-(1<<7) | 保留 |
c. CategoryID
CategoryID分类通知类型 | Value |
---|---|
CategoryIDOther | 0 |
CategoryIDIncomingCall | 1 |
CategoryIDMissedCall | 2 |
CategoryIDVoicemail | 3 |
CategoryIDSocial | 4 |
CategoryIDSchedule | 5 |
CategoryIDEmail | 6 |
CategoryIDNews | 7 |
CategoryIDHealthAndFitness | 8 |
CategoryIDBusinessAndFinance | 9 |
CategoryIDLocation | 10 |
tegoryIDEntertainment | 11 |
Reserved CategoryID | 12-255 |
d. Category Count
统计当前收到的这个类型的通知已经有多少个,比如NP设备收到一条微信消息时,推送给NP设备,这时Category Count就为1,如果手机不处理这个通知,则当再收到微信消息时就会再推送一条通知给NC设备,其CategoryCount就为2了,依此类推,手机没处理的消息通知,推送到NC设备其CategoryCount就会累加。
e. NotificationID
用来唯一标识一个通知,ANCS建立连接后收到的每个通知都有一个NotificationID,通知只是一个简短消息,通常再需要发送指令给NP设备来获取通知的详细信息,这个时候就需要这个NotificationID来标识是想获取哪个通知的详细信息。
以上就是通知源特征上推送的通知的格式。
Control Point控制点
控制点可以用来获取通知的详细信息,还可以做一些预定义操作,比如来电通知就有积极动作(接听)和消极动作(拒接),所以控制点除了用来发送获取通知详细信息的命令,还可以用来发送执行预定义的积极动作或消极动作的指令。获取通知详细信息的命令的格式如下:
字段 | 意义 |
CommandID | 获取通知详细信息的命令ID为0 |
NotificationID | 标识要获取哪个通知的详细信息,这个值就是用通知源中收到的通知的NotificationID字段 |
AttributeID | 这些字段即指定想要获取这个通知的哪些详细信息 |
Notification AttributeID n max length | 某些AttributeID需要跟两个字节来表示该特性信息的最大长度,后面讲Data Source时会列出哪些AttributetID需要max length字段 |
数据源即用来返回数据的,在控制点上发送的获取详细信息的命令后,就会再数据源通道上返回通知的详细信息,通知的详细信息由一系列的Attribute组成,如下表
AttributeID | Value | 意义 |
NotificationAttributeIDAppIdentifier | 0 | 通知App的标识 |
NotificationAttributeIDTitle | 1 | 通知的标题,获取该AttributteID需要跟两个字节来表示信息最大长度 |
NotificationAttributeIDSubtile | 2 | 子标题,通常为空,获取该AttributteID需要跟两个字节来表示信息最大长度 |
NotificationAttributeIDMessage | 3 | 信息内容,获取该AttributteID需要跟两个字节来表示信息最大长度 |
NotificationAttributeIDMessageSize | 4 | 信息大小 |
NotificationAttributeIDDate | 5 | 通知发出的时间,不是返回详细信息的时间 |
NotificationAttributeIDPositiveActionLabel | 6 | 表示积极动作和消极动作具体是什么,来电通知其积极动作就是接听,消极动作通常就是拒接 |
NotificationAttributeIDNegativeActionLabel | 7 | 同上 |
获取手机上产生本条通知的APP的信息
前面提到收到通知后,一般需要再在控制通道上发送获取信息详细内容的命令来获取通知相关的一些更具体的信息,其中NotificationAttributeIDAppIdentifier就是用来标识App的来源的,得到了AppIdentifier后再通过获取app信息的命令来获取产生这个通知的app的信息,命令格式如下
其中app相关的attribute只有一个,即其名字
AppAttributeID | Value |
AppAttributeIDDisplayName | 0 |
Reserved AppAttributeID | 1-255 |
CommandID为1,AppIdentifier与命令中的app id对应,用来指示获取哪个app信息
执行通知预定义动作
通知源部分有提到一些通知具有一些预定义的执行动作,通过通知的EventFlags字段来指示这个通知是否有预定义的积极动作或消极动作,比如来电通知就有接听或拒接的 积极动作或消极动作,所以如果收到来电通知时,即通知CategoryID字段为CategoryIDIncomingCall时,如果接听,就可以让设备在控制点通道上发送执行积极动作的命令,同理如果拒接,就在控制点通道上发送执行消极动作的命令。
命令格式如下
字段 | 意义 |
CommandID | 为2,表示执行预定义动作 |
NotificationID | 用来标识执行哪个通知的预定义动作 |
Action ID | 0,表示执行积极预定义动作,1,表示执行消极预定义动作 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。