完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
12.1. 苹果ANCS服务简单描述
ANCS服务是苹果公司推出的一个消息通知服务,可想而知消息是从手机发送过来的,所以手机是服务器,获取信息的客户端。那么具体怎么工作的呢?工作方式如下: 假设手机接收到一个短信,短信包含有短信内容和联系人,那么iPhone怎么把这个消息通知给连接它的蓝牙设备?一般分为3个步骤: l 手机发送一个标志给客户端,告诉客户端手机接收到了一个短信 l 客户端接收到了这个标志后,如果客户端想要获取具体的短信内容,就会发送一个标志给手机 l 手机根据标志将客户端需要获取的内容发给客户端。 上面的过程中,第2和第3个过程并不是必须的,是根据客户端的需求决定。注意,ANCS采用小段模式存储数据。 12.2. ANCS UUID 完成上面三个步骤,ANCS文档规定了4个UUID,首先是ANCS服务的UUID: 7905F431-B5CE-4E99-A40F-4B1E122D00D0 3个属性UUID: l NotificationSource:基本通知源,通知一些计数的信息 9FBF120D-6301-42D9-8C58-25E699A21DBD properties:notifiable(通知特性) l ControlPoint:控制点,用于向ios设备写入控制信息,例如读取详情 69D1D8F3-45E1-49A8-9821-9BBDFDAAD9D9 properties:writeablewithresponse(有应答的写) l DataSource: 数据源,用于提供详细数据,在控制信息写入后通过此characteristic返回 22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB properties:notifiable(通知特性) |
|
相关推荐
|
|
12.3. 通知源(Notification Source)属性
通知源在新的IOS消息、IOS通知有改动和IOS通知移除时向客户端发送通知。此属性的属性值为8个字节,其数据格式如下: l EventID:事件类型,添加(0)、修改(1)、删除(2),假设有许多短信接收,那么短信是同一类消息,所以IOS会在第一次发送的通知消息时使EventID=0,接下来的短信IOS发送的通知消息使EventID=1,如果短信在一定时间内没有更新,IOS会发送删除事件类型。 l EventFlags:事件标志。具体如下
l CategoryID:消息类别:例如电话、语音消息、邮箱、娱乐、新闻……。这个值的列表如下: l CategoryCount:消息类别计数:如果有2个的邮件,这两个邮件虽然已经通知给客户端了,但是客户端没有读取邮件的内容,接着又来了一份邮件,这时IOS发送通知给客户端时,这个值需要设置为3。 l NotificationUID(unique identifier):通知唯一ID:客户端可以发送此UID给控制点属性以获取本通知的详细内容。 |
|
|
|
|
|
下面看看空中的抓包,手机发送通知的命令如下图: 发送的值为: 值为:0x00:0x15:0x04:0x01: 0x00: 0x00: 0x00: 0x00
看下面这张图: 从上面可以知道消息计数是针对消息类型进行累加的,当客户度读取了详细消息时,这个值才会减。 再来几组吧! |
|||||
|
|||||
|
|||||
12.4. Get Notification Attributes
如果客户端得到的了IOS发送下来的通知时,如果客户度想得到UID对应的详细的消息内容,ANCS进行了规定。 12.4.1.控制点(Control Point)获取通知属性如果客户端得到的了IOS发送下来的通知时,如果客户度想得到UID对应的详细的消息内容,就必须在控制点属性中写一些值。控制点属性的属性值的数据格式如下: l CommandID:这个命令表示,获取什么内容,是获取UID的详细信息,还是回去IOS应用APP的属性。这里获取通知详细信息,所以设置为0。
l NotificationUID:这个就是通知源中的UID。 l AttributeIDn:这个表示读取的消息的类型,具体有哪些ID如下图:
看看采集的数据吧! 从上图可以知道,这条消息获取了这个消息的全部信息。因为包含了0-5所有的AttributeID。同时读取的1、2和3的AttributeID的长度都为0x0019=25字节(小端模式所以是0x0019)。小段模式再看看下面的UID=0x00000001。 |
|
|
|
|
|
12.4.2.通知属性数据源(Data Source)
如果IOS得到客户端发送过来的上面的控制点的信息,就必须根据一定的格式将数据发送个客户端,数据格式如下: l CommandID: 设置为 0 ( CommandIDGetNotificationAttributes )。 l NotificationUID:这个就是通知源中的UID。 l AttributeList:查询结果列表,每一项的格式都是:ID/16bit Length/Value,每个attribute都是一个字符串,其长度由Length指定,但是此字符串不是以NULL结尾。若找不到对应的Attribute,则Length为0。 这里将UID=0x0000000001从通知源、控制点以及数据源整个数据都截图如下分析,这里注意: 如果返回的消息长度大于GATT最大传输长度(MTU),则其会被分割成多个分段。蓝牙设备必须将这些分段组装起来。当所有请求属性的内容都接收完成后,此过程才算完成 l 通知源 l 控制点 l 数据源 |
|
|
|
|
|
上面获取的数据长度是0x0019=25个自己,而这里的MTU=23,所以一定会截断发送数据,具体如下: 分析消息如下: 12.5. Get App AttributesANCS允许客户端读取IOS上APP的特定属性。 12.5.1.控制点(Control Point)获取APP属性获取APP属性的控制点命令数据格式如下: l CommandID: 设置为 1 ( CommandIDGetAppAttributes ). l AppIdentifier:App ID,这个字符串必须使用NULL结尾(“ ”) l AttributeIDs:希望获得属性的列表 采集的图片如下: |
|
|
|
|
|
12.5.2.APP属性数据源(Data Source)
上面的命令的应答数据格式如下: l CommandID:为1; l AppIdentifier:App ID,与之前的请求ID对应; l AttributeList:属性值列表,每一个格式都是:ID/16-bit Length/Value,每个attribute都是一个字符串,其长度由Length指定,但是此字符串不是以NULL结尾。若找不到对应的Attribute,则Length为0; 上面命令的应答采集的数据如下: |
|
|
|
|
|
12.6. Perform Notification Action(执行通知操作)
IOS8.0以后,客户端可以对通知过来的消息进行反馈控制,例如,有个来电提醒,那么可以发出挂断电话的行为通知。这个操作是一个不可靠传输,客户端发出命令后,IOS不需要作出回答。他的命令格式如下:
还是以来电为例,积极的操作就是接听电话,消极的操作就是拒接电话。当然这个消极和积极也有其他的表现形式,例如在手机上面显示√表示积极,×表示消极;或者用颜色表示等等。 好了,到这里了,具体其它还是看苹果官方文档吧! |
||
|
||
|
||
322 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-通用文件I/O模型之close
339 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第十五章 按键中断实验
327 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第十一章 FPIOA管理器实验
823 浏览 0 评论
730 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11453 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-13 06:40 , Processed in 0.608182 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号