苹果ANCS协议学习【转】

 

苹果ANCS协议学习

转自:http://www.cnblogs.com/alexcai/p/4321514.html

综述

苹果通知中心(Apple Notification Center Service, ANCS)的目的是提供给蓝牙外设一种简单、方便的获取ios设备通知信息的方式。

 

依赖

ANCS的使用没有依赖,它是GATT的一个子集,任何一个实现了GATT client的设备可以方便的从ios设备获取通知信息。

 

传输注意事项

如果没有特殊说明,通过ANCS传输的数值均使用小端模式。

如果没有特殊说明,通过ANCS传输的字符串均使用UTF-8编码。

 

概念定义

l  ANCS:苹果通知中心服务

l  NP(Notification Provider):通知的产生者,一般是ios设备

l  NC(Notification Consumer):通知的消费者,一般是蓝牙设备

l  iOS notification:ios设备里出现的通知

l  GATT notification:GATT characteristic发送的通知

 

Service定义

ANCS使用了一个私有UUID作为其Service的UUID:

7905F431-B5CE-4E99-A40F-4B1E122D00D0

 

NP上只有一个ANCS实例,基于ios的机制,ANCS没有办法保证一直运行。

所以NC需要搜索并且监听(subscribe)Service Changed characteristic,以保证能够坚挺到所有通知。

(怎么做。。。。Service Changed characteristic是啥)

 

Characteristic类型

所涉及的characteristic

 1、Notification Source:

   UUID 9FBF120D-6301-42D9-8C58-25E699A21DBD(notifiable)

   基本通知源,通知一些计数的信息;

  

 2、Control Point:

   UUID 69D1D8F3-45E1-49A8-9821-9BBDFDAAD9D9(writeablewithresponse)

   控制器,用于向ios设备写入控制信息,例如读取详情;

 

 3、Data Source:

   UUID 22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB(notifiable)

   数据源,用于提供详细数据,在控制信息写入后通过此characteristic返回;

 

还有许多其他characteristic,不过只有Notification Source是强制的,其他的都是可选的。

 

Notification Source

通知信息更新时,从NP发给NC的消息。

有以下一些情况:

l  新的ios通知到来;

l  ios通知有改动;

l  ios通知移除;

 

 

l  EventID:消息类型,添加(0)、修改(1)、删除(2);

l  EventFlags:消息优先级,静默(1)、重要(2);

l  CategoryID:消息类型;

l  CategoryCount:消息计数;

l  NotificationUID:通知ID,可以通过此ID获取详情;

 

Notification的生命周期如下:

 

 

Get Notification Attributes

当NC希望从NP读取Notification的详细信息时,它需要向Control Point characteristic发送一些命令,格式如下:

 

l  CommandID:设为0;

l  NotificationUID:对应Notification Source中相同名字的字段;

l  AttributeIDs:NC希望读取的变量ID列表,有些变量可能需要跟一个16bit的数说明想要的最大长度;

 

NP接收到此命令后,会通过Data Source characteristic将结果返回(通过GATT Notification),所以你需要监听这个参数。此命令发出后对应的返回信息如下:

 

l  CommandID:为0;

l  NotificationUID:对应之前请求的UID;

l  AttributeList:查询结果列表,每一项的格式都是:ID/16bit  Length/Value,每个attribute都是一个字符串,其长度由Length指定,但是此字符串不是以NULL结尾。若找不到对应的Attribute,则Length为0;

 

* 如果返回的消息长度大于GATT最大传输长度(MTU),则其会被分割成多个分段。蓝牙设备必须将这些分段组装起来。当所有请求属性的内容都接收完成后,此过程才算完成;

 

Get App Attributes

此命令允许NC读取NP上安装app的特定属性,它需要向Control Point characteristic发送一些命令,格式如下:

 

l  CommandID:设成1;

l  AppIdentifier:App ID,这个字符串必须使用NULL结尾(“\0”吧);

l  AttributeIDs:希望获得属性的列表;

 

此命令的响应消息格式如下:

 

l  CommandID:为1;

l  AppIdentifier:App ID,与之前的请求ID对应;

l  AttributeList:属性值列表,每一个格式都是:ID/16-bit Length/Value,每个attribute都是一个字符串,其长度由Length指定,但是此字符串不是以NULL结尾。若找不到对应的Attribute,则Length为0;

 

* 关于分段以及传输结束的判断标准,与Get Notification Attributes一致;

 

Session(会话)

ANCS session 在NC订阅Notification Source之后开始,在取消订阅或者连接断开之后结束。由于ANCS不是一个完全同步的服务,它不会在会话中记录状态。所以,所有的NotificationUID以及AppIdentifier仅在某个特定的会话周期内有效。(换句话说,那些ID只是在会话后开始的计数,下次再连接重新计数)

当某个会话结束时,NC需要清空所有ID以及数据内容。当新的会话开始时,NP会尽量把现有的通知都发给NC。NC可以使用这些信息知道当前尚未处理的通知有哪些。

 

Attribute Fetching and Caching

我们建议,只在用户做出操作时才获取attribute。例如,一开始只是展示一个通知列表,然后在用户点击某一个后才查询详细的信息。

 

另外,我们建议在一次会话中建立一张App attribute的缓存表,这样可以避免重复获取一些常量attribute。

 

Error Codes

写入Control Point characteristic时,可能会有错误发生,错误码定义如下(在哪里返回错误码。。。同一次请求中么):

0xA0 : 未知命令,commandID非法;

0xA1 : 无效命令,命令的格式错误;

0xA2 : 无效参数,某一个参数(例如NotificationID无效)

 

如果有错误发生,就不会有Data Source返回。

 

时序图

下面展示了NP与NC之间的常见交互时序:

 

 

下面的图展示了获取详细信息的时序:

 

 

 

CategoryID

 

 

EventID

 

 

EventFlags

 

 

CommandID

 

 

NotificationAttributeID

 

 

 

 

AppAttributeID

 

 

实际实验之DataSource读取

主要是介绍一下读取的各个AttrID返回的都是啥:

电话:


AttrID


返回值


0(App ID)


com.apple.mobilephone


1(Title)


1 (326) 021-3971(电话号码,不过划分方式好怪。。。)

如果此号码存了名字,则是电话本中的名字


2(SubTitle)


如果此号码存了名字,则是mobile


3(Message)


Incoming Call

 

短信:


AttrID


返回值


0(App ID)


com.apple.MoileSMS


1(Title)


10698109555991

01051726663

+86 132-6021-3971

如果此号码存了名字,则是电话本中的名字


2(SubTitle)



3(Message)


短信的内容

 

微信:


AttrID


返回值


0(App ID)


com.tencent.xin


1(Title)


微信


2(SubTitle)



3(Message)


发信人:内容

 

其他应用的ID:

QQ:c o m . t e n c e n t . m q q

365:c o m . 3 6 5 r i l i . C o c o

Any.Do:c o m . a n y d o . A n y D O

系统提示:c o m . a p p l e . r e m i n d e r s

时间: 2024-09-21 05:14:40

苹果ANCS协议学习【转】的相关文章

GT与苹果达成协议 退出蓝宝石生产业

网易科技讯 10月23日消息 据雅虎财报报道,蓝宝石制造商GT Advanced Technologies宣布已经与苹果达成协议,GT将逐渐停止蓝宝石材料的生产.根据GT在周四发表的申明,GT将关闭位于美国亚利桑那州梅萨和马萨诸塞州萨勒姆的工厂的运营.根据协议,GT将解除与苹果的所有排它性职务,它将出售蓝宝石熔炉并将部分收益返回苹果以无息偿还苹果预支付给GT的4.39亿美元的预付款.(艾米丽)本月初,GT突然宣布破产.当时,外界对其破产原因进行了多种猜测.<路透社>认为,GT破产,和苹果公司有

余承东:苹果三星应学习华为年内推荣耀6Plus

这一年华为终端的发展备受业界关注,尤其是独立品牌荣耀的海外拓展已走过"对攻"小米的阶段,开始与三星.苹果直面较量.从内部渠道获取的一份荣耀最新战略规划显示,荣耀手机2015年的销量目标是4000万部,销售额50亿美元, 2016年目标则是突破100亿美元.策略方面,荣耀未来将通过荣耀+畅玩的双品牌布局,形成从荣耀手机+智能家居(荣耀盒子.荣耀酷开电视.荣耀立方)+智能穿戴设备(荣耀手环.畅玩手环)等三大品类覆盖.据荣耀官方此前透露,2014年销量将达到2000万 部手机,销售额为20亿

XMPP学习——3、XMPP协议学习补充

流基础 两个基本概念,使得XMPP实体之间的小的结构化信息有效载荷能快速地进行异步交换:XML流和XML节.这些术语的定义如下. XML流的定义: XML流是一个容器,用于任何两个实体通过网络进行XML元素的交换. XML流的开始明确表达为一个打开的 "流头" (即, 一个包含了适当树形和命名空间声明的 XML <stream> 标签), 而这个XML流的结尾明确表达为一个关闭的XML </stream> 标签. 在流的生存期间, 发起方实体可以通过这个流发送不

Http协议学习总结(转)

  因为项目中很多地方都与Http协议有关,零散的了解了一下Http协议,但是没有系统的学习过.   今天根据网上其他同学的整理,加上我的一些经验,我也整理了一份.当做学习记录吧.        一.什么是HTTP协议   HTTP,全名HyperText Transfer Protocol.因特网上应用最为广泛的一种网络协议.设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法.现在对与HTTP协议的应用已经很多了,浏览器上网,下载文件,服务器间通信等.   二.HTTP协议格式

华尔街日报:与苹果搜索协议凸显谷歌移动软肋

北京时间1月24日消息,<华尔街日报>网络版今天刊文称,谷歌向苹果支付10亿美元,确保其在苹果设备上默认搜索引擎的地位,这凸显了谷歌在移动业务领域的软肋:iOS在移动设备市场上非常重要,它还离不开与苹果的合作.以下为文章全文: 2005年,谷歌在向公众股东发布的首份年度报告中警告称:如果公司不为"非PC通信设备"开发技术,我们将无法在日趋重要的在线服务细分市场上获得很高的市场份额.谷歌的这一警告目前仍然没有过时. 2014年,手机迅速成为使用谷歌盈利能力最强服务--搜索的主

中移动料ARPU持续下跌称仍未与苹果签协议

新浪财经讯 8月18日下午消息 中移动今日公布中期业绩,集团上半年盈利增长6.3%至613亿元人民币,但平均每月每户收入下降3元,并预计下半年将持续下跌.有关市场关注的与苹果公司的协议,董事长王建宙称,目前还在谈判中,尚未签任何协议. 中移动今日公布截至2011年6月30日的半年业绩,公司今年上半年盈利增长6.3%至613亿元(人民币,下同),每股基本盈利3.05元,建议派发中期股息每股1.58港元.期间中移动收入2501亿元,增长8.8%,EBITDA为1242亿元,增长6.5%,客户数目超过

JavaWeb 后端 &lt;一&gt; 之 Tomcat服务器 - Http协议 学习笔记

1.Web开发概述 1.1服务器上的资源分类: a.静态资源:指web页面中供人们浏览的数据始终是不变.html css js 图片 多媒体 b.动态资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同.JSP/Servlet.php.asp 下面为简单的java程序 模拟服务器提供资源 访问 本地端口1111即可得到服务器的资源 public class Myserver {     public static void main(String[] a

MQTT协议学习笔记

1.前沿 万物联网的时代即将到来,物联网也由当初的概念开始进一步落实.随着无线网络技术飞速发展,各种设备都可以连接网络,实现远程控制.例如智能家居最近非常火爆,智能插座.智能LED灯.智能摄像头等.在互联网时代,HTTP协议负责建立网络连接,而到了物联网时代,由于智能硬件的差异,相比互联网终端,硬件配置要低的多,而且智能设备的环境也想多复杂,物联网中的数据传输会面临很多问题,比如在网络不稳定的情况下,如果保证数据的传输没有问题,如何保证数据不被重复发送,连接断开后如何进行重连,而HTTP协议由于

http协议学习及Wireshark工具使用

1. 基础概念篇1.1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本.其中最著名的就是RFC 2616.RFC 2616定义了今天普遍使用的一个版本--HTTP 1.1. HTTP协议