1 ANCS综述
ANCS即Apple Notification Center Service。是IOS系统中的一个通知服务。设备连接手机后,设备首先需要先使能IOS系统的通知功能,具体即设备上的GATT 客户端发现IOS上的ANCS,并且使能其 通知源Characteristics的notify功能。之后IOS系统就会通过ble 推送消息给设备了。
通常推送的消息仅仅是一个简短通知,比如通知有一个社交消息。如果需要获取详细消息,还需要 设备通过 控制点 Characteristics 主动发送控制指令给 ANCS服务,让其返回详细信息。返回的详细信息通过一个数据源Characteristics来返回。所以连接上服务后除了使能通知源Characteristics的notify功能,还需要使能数据源Characteristics的notify功能,因为可能需要通过数据源来获取通知的详细信息。
如下图所示:NC(通知消费者)连接NP(通知提供者)上后发现服务,然后订阅(使能通知功能)通知源和数据源,之后如果NP有消息就会通过通知源通知NC了。
综上,ANCS是一个服务,其服务UUID是特定的为7905F431-B5CE-4E99-A40F-4B1E122D00D0,该服务会主动推送一些 通知消息给 设备,所以有一个具有notify功能的Characteristics。该特性称为Notification Source。(注意这里notify指的是Characteristics的发送消息方式, 而notification source仅仅是一个称谓,就是字面意思,表示这个Characteristics的目的是为了推送一些通知,所以称为通知源)
通过notification source发送过来的通知仅仅是简短的消息。如果希望获取更消息的消息则需要设备主动发送控制指令给手机上的ANCS,所以该服务还有一个具有写功能的Characteristics,这样就可以通过这个Characteristics来发送控制指令给ANCS服务。这个特性称为Control Point,发送控制消息后,ANCS服务会返回更详细的消息。这个消息不会再通过notification source这个Characteristics,而是用过另一个具有 notify功能的Characteristics来返回,该特性称为Data Source。
综上ANCS服务至少有3个特性。其UUID如下: ●Notification Source: UUID 9FBF120D-6301-42D9-8C58-25E699A21DBD (notifiable) ●Control Point: UUID 69D1D8F3-45E1-49A8-9821-9BBDFDAAD9D9 (writeable with response) ●Data Source: UUID 22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB (notifiable)
即:notify source这个Characteristics是NP用来发送通知给NC的, Control point这个Characteristics是NC用来发送控制命令给NP的,如获取通知详细信息。 Data source这个Characteristics是NP收到NC获取详细信息命令后返回通知的详细信息
下面分别介绍三个Characteristics 中(也可以认为是三个数据通道)传输的数据的 内容和格式
2 notify source :通知源
NP发送通知给NC的通道。其上发送的数据格式如下: 2.1 EventID:
表示这个通知是added, modified, removed三种中的哪种。
如果手机收到一个qq消息,则手机(NP)发给一个 added的通知给 设备( NC )。
如果用户在手机通知栏上滑动清除了这通知,则手机(NP)就会发送一个removed的通知给设备(NC)。
2.2 EventFlags:
每个位有特殊的意义,用来指示这个通知的一些特性: EventFlagSilent | =(1<<0) | EventFlagImport | =(1<<1) | EventFlagPreExisting | =(1<<2) | EventFlagPositiviveAction | =(1<<3) | EventFlagNegativeAction | =(1<<4) | Reserved | =(1<<5) - (1<<7) |
2.2.1 Slient标记:
没搞清干吗用的。
2.2.2 Important标记:
表示通知重要,比如手机有来电时,推送给NC的通知其flag的important就会被置位,表示通知重要。
2.2.3 PreExisting标记:
表示消息是之前就存在,比如手机连接设备后,再断开设备,然后重新连接,则连接上后手机(NP)会发送一些 断开前就有的没处理的手机上的通知,这些通知的preExisting位就会被置位。
2.2.4 PositiveAction,NegativeAction标记:
称积极动作和消极动作吧,和每个具体通知有关, 比如手机收到来电,则就会发送来电通知给设备,这个通知就通知具有这两个标记,积极动作表示接电话,而消极动作表示拒接电话。
再如,手机收到qq消息,则手机发送通知给设备,这个通知就只有negativeaction标记。
PositiveAction,NegativeAction这两个标记仅仅表示这个”通知”具有一些预定义的动作,比如电话通知的接听和拒接。具体是否执行,则需要通过控制通道发送控制指令执行积极动作或者消极动作。
也就是这两个标记仅仅表示这个通知具有某个预定义的对这个通知的特殊处理,至于执不执行则要看设备(NC)是否发送执行PositiveAction或NegativeAction的命令后面对控制通道的描述会有说明。
2.3 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 | Reserved | =12-255 |
比如手机来电时,手机(NP)就会推送通知给设备,这个通知类型就是CategoryIDIncomingCall,如果手机来电时,用户没有接到,即对方主动挂掉电话,那么手机就会推送一条MissedCall类型的通知给设备。
再比如手机收到qq消息时,就会推送一条Social类型的通知给设备。 |