Android 蓝牙 IOS ANCE协议介绍 - 史上最详细

一:BLE-ANCS协议介绍


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特征。

二:ANCS服务支持的Characteristics
notify source通知源


NP发送通知给NC的通道,发送的数据格式如下:

a. EventID:表示通知的类型 主要有added,modified,removed

eg:手机收到微信消息,则INP设备发送一个added类型的通知给NC设备,如果NP设备在通知栏主动清除了这通知,则NP设备就会发送一个removed的通知给NC设备。

b. EventFlags:使用每个bit表示通知的特性

EventFlagSilentbit意义
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
CategoryIDOther0
CategoryIDIncomingCall1
CategoryIDMissedCall2
CategoryIDVoicemail3
CategoryIDSocial4
CategoryIDSchedule5
CategoryIDEmail6
CategoryIDNews7
CategoryIDHealthAndFitness8
CategoryIDBusinessAndFinance9
CategoryIDLocation10
tegoryIDEntertainment11
Reserved CategoryID12-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字段

Data Source数据源

数据源即用来返回数据的,在控制点上发送的获取详细信息的命令后,就会再数据源通道上返回通知的详细信息,通知的详细信息由一系列的Attribute组成,如下表

AttributeIDValue意义
NotificationAttributeIDAppIdentifier0通知App的标识
NotificationAttributeIDTitle1通知的标题,获取该AttributteID需要跟两个字节来表示信息最大长度
NotificationAttributeIDSubtile2子标题,通常为空,获取该AttributteID需要跟两个字节来表示信息最大长度
NotificationAttributeIDMessage3信息内容,获取该AttributteID需要跟两个字节来表示信息最大长度
NotificationAttributeIDMessageSize4信息大小
NotificationAttributeIDDate5通知发出的时间,不是返回详细信息的时间
NotificationAttributeIDPositiveActionLabel6表示积极动作和消极动作具体是什么,来电通知其积极动作就是接听,消极动作通常就是拒接
NotificationAttributeIDNegativeActionLabel7同上

获取手机上产生本条通知的APP的信息
前面提到收到通知后,一般需要再在控制通道上发送获取信息详细内容的命令来获取通知相关的一些更具体的信息,其中NotificationAttributeIDAppIdentifier就是用来标识App的来源的,得到了AppIdentifier后再通过获取app信息的命令来获取产生这个通知的app的信息,命令格式如下

 其中app相关的attribute只有一个,即其名字

AppAttributeIDValue
AppAttributeIDDisplayName0
Reserved AppAttributeID1-255

CommandID为1,AppIdentifier与命令中的app id对应,用来指示获取哪个app信息

执行通知预定义动作
通知源部分有提到一些通知具有一些预定义的执行动作,通过通知的EventFlags字段来指示这个通知是否有预定义的积极动作或消极动作,比如来电通知就有接听或拒接的 积极动作或消极动作,所以如果收到来电通知时,即通知CategoryID字段为CategoryIDIncomingCall时,如果接听,就可以让设备在控制点通道上发送执行积极动作的命令,同理如果拒接,就在控制点通道上发送执行消极动作的命令。

命令格式如下

字段意义
CommandID为2,表示执行预定义动作
NotificationID用来标识执行哪个通知的预定义动作
Action ID0,表示执行积极预定义动作,1,表示执行消极预定义动作

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值