Apple Notification Center Service

转自:http://studentdeng.github.io/blog/2014/03/22/ancs/

MAR 22ND, 2014 | COMMENTS

名词解释与约定

名词解释

  • Apple Notification Center Service 简称 ANCS。
  • ANCS 服务(iOS设备,如iPhone,iPad等)的publisher 称为 Notification Provider。
  • 任意的ANCS服务的client(硬件设备,配件)称为 Notification Consumer。
  • Generic Attribute Profile简称GATT。
  • 在iOS NotificationCenter 显示的通知称为 iOS notification。
  • 通过GATT characteristic 发布的通知称为 GATT notification。
  • iPhone、 iPad等运行iOS系统的设备称为iOS设备

约定

文本档覆盖的内容中除特别描述外,和字节序相关的都是用Little-endian (小端模式)。 文本档覆盖的内容中除特别描述外,和字符串传递相关的都是UTF-8

Note: ANCS 并不保证始终存在,服务开启,关闭机制由iOS系统决定,Device 需要一直检测,查找ANCS是否存在。

协议内容

ANCS的uart profile UUID : ” 7905F431-B5CE-4E99-A40F-4B1E122D00D0”

uart profile 中包括3个 characteristic

  • Notification Source UUID: “9FBF120D-6301-42D9-8C58-25E699A21DBD” (notifiable)
  • Control Point UUID: “69D1D8F3-45E1-49A8-9821-9BBDFDAAD9D9”(write with response)
  • Data Source UUID:” 22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB “(notifiable)

Device端Notification Source 是必须实现的。Centrol Point 和 Data Source 可选。

Notification Source Characteristic

Notification Source characteristic 包括3个功能

  • 新的iOS设备通知
  • iOS设备通知修改
  • iOS设备通知删除

当Device端 subscribes Notification Source characteristic时,GATT Notification 会立刻分发出去。所以,Notification consumer (Device)在subscribe之前就需要做好立马接受和处理消息的状态。

Notification Source response format

图2-1 Notification Source characteristic 通过GATT Notification 的格式。

  • EventID:描述iOS设备上面的通知是增加、删除、还是修改。
  • EventFlags: 标志位,描述iOS设备通知(重要, 静默)
  • CategoryID:iOS设备通知类型
  • CategoryCount:给定类型的通知数量,比如有2个未读email消息通知,这时有一个新的未读消息通知push到iOS设备,这时CategoryCount = 3 NotificationUID:通知的唯一标示,这个字段用于和Control Point characteristic 检索更多的信息。

表格3-1:CategoryID的描述

Notification Source Response Example

Device 获取的来此Notification Source的数据是“00 01 00 01 43 00 00 00”

图2-2一个iOS通知的生命周期。

比如当iOS设备(如iPhone)收到一个iMessage消息,iOS NotificationCenter会产生一个Notification,ANCS会通知device 有一个新的通知。当iOS设备阅读这个iMessage消息之后,iOS Not ificationCenter 会删除掉这个通知,ANCS把这个删除通知push到device

Control Point 和 Data Source Characteristic

只是Notification Source 不能获得足够的信息, Control Point 和 Data Source characteristic用来解决这个问题。 Device 向Control Point characteristic 写一个命令,如果成功,会从DataSource characteristic 获得response。

获取通知属性命令

该命令根据NotificationUID 查找通知的详细内容(通知属性)。

图2-3 获取通知属性命令格式 CommandID: 必须设置为0 NotificationUID:通知的唯一标示(Notification Source 获得) AttributeIDS:需要检索信息list

图3-5 可以检索的通知属性列表,其中Title, subtitle, Message 需要增加2个bytes的字段表示长度。

获取通知属性命令Example “00 43 00 00 00 00 01 FF FF 05”

获取通知属性命令Response消息格式

图2-4 获取通知属性命令返回数据格式

CommandID: 0 NotificationUID:通知的唯一标示 AttributeList:具体的属性返回数据列表. 如果返回的属性空,长度是0

如果返回的数据长度大于 GATT MTU,那么数据会被分几段传输。Device 需要对数据拼接。

通知属性命令Response 消息格式Example

下图查找 NotificationUID为2的 AppIdentifier、Title、SubTitle、Message Date属性返回数据

获取APP属性命令

该命令通过APPIdentifier查找iOS设备中安装的APP的属性。

图2-5 获取APP属性命令格式

CommandID: 必须设置成1 AppIdentifier:字符串’\0’ 结尾。 AttributeIDS:查找ID列表

获取APP属性命令 Example

查找AppIdentifier 为 “com.apple.mobilemail” 的APP属性

获取APP属性命令Response消息格式

图2-6获取APP属性命令返回数据格式

  • CommandID:必须是1
  • AppIdentifier:字符串 ‘\0’结尾
  • AttributeList:具体的属性返回数据列表. 如果返回的属性空,长度是0

如果返回的数据长度大于 GATT MTU,那么数据会被分几段传输。Device 需要对数据拼接。

获取APP属性命令Response消息格式Example

查找AppIdentifier 为 “com.apple.mobilemail” 的APP属性返回数据 汉字 “邮件”

sessions会话

ANCS 的 session 从设备订阅characteristic 开始到取消订阅或是disconnect结束。所有的Identifier 比如 NotificationUID,AppIdentifier 只在当前的session有效。

当session结束后,设备需要删除掉所有的在session中获得的Identifier信息,这些信息会在session建立的时候重新通知设备.

错误代码

  • 未知命令:(0xA0)
  • 无效命令:(0xA1)
  • 无效参数(0xA2) : 比如NotificationUID 找不到

注意:如果产生了上面的错误,都不会再收到任何的GATT 通知。

参考内容

Apple Notification Center Service (ANCS) Specification

Posted by studentdeng Mar 22nd, 2014  iOS

Apple Notification Center Service--ANCS【转】的更多相关文章

  1. Apple iOS MDM service 简介

    Apple iOS MDM service 簡介 藉由MDM服務,企業可以用來控管配發給員工的iOS Device.可以採用Apple官方推出的工具,也可以採用第三方開發的服務. MDM server ...

  2. iOS 7 Pushing the Limits Notes - create a layer like notification center's or control center's background

    Problem: How to create a layer that looks like your notification center's or control center's backgr ...

  3. IOS8 通知中心(Notification Center)新特性

     本文转载至 http://blog.csdn.net/jinkaiouyang/article/details/30029441   ios手机apple通知中心notificationCenter ...

  4. ANCS协议翻译

    综述 苹果通知中心(Apple Notification Center Service, ANCS)的目的是提供给蓝牙外设一种简单.方便的获取ios设备通知信息的方式. 依赖 ANCS的使用没有依赖, ...

  5. 苹果ANCS协议学习【转】

    苹果ANCS协议学习 转自:http://www.cnblogs.com/alexcai/p/4321514.html 综述 苹果通知中心(Apple Notification Center Serv ...

  6. 蓝牙接收苹果手机通知 ANCS协议分析

    蓝牙接收苹果手机通知 ANCS协议分析 转载,请注明出处:http://www.cnblogs.com/alexcai/p/4321514.html 综述 现在有许多蓝牙手表.手环都能接收苹果ipho ...

  7. 原创翻译:蓝牙(BLE)for iOS

    About Core Bluetooth 简要:核心蓝牙框架提供了iOS和MAC 应用程序与BLE 设备进行无线通信所需要的类.通过该框架,应用程序可以扫描.发现BLE 外设,如心率.电子温度传感器等 ...

  8. (转)Apple Push Notification Services in iOS 6 Tutorial: Part 2/2

    转自:http://www.raywenderlich.com/32963/apple-push-notification-services-in-ios-6-tutorial-part-2 Upda ...

  9. [Erlang 0106] Erlang实现Apple Push Notifications消息推送

        我们的IOS移动应用要实现消息推送,告诉用户有多少条消息未读,类似下图的效果(笑果),特把APNS和Erlang相关解决方案笔记于此备忘.          上面图片中是Apple Notif ...

随机推荐

  1. Java中线程同步的理解 - 其实应该叫做Java线程排队

    Java中线程同步的理解 我们可以在计算机上运行各种计算机软件程序.每一个运行的程序可能包括多个独立运行的线程(Thread). 线程(Thread)是一份独立运行的程序,有自己专用的运行栈.线程有可 ...

  2. oracle +plsql装完省略号不能点

    1.如图 2.复制 TNS 服务名 3.复制到 登录框的 Database ,输入用户名密码,点OK..可以进去了,省略号变成可点击状态

  3. 毕业设计预习:SM3密码杂凑算法基础学习

    SM3密码杂凑算法基础学习 术语与定义 1 比特串bit string 由0和1组成的二进制数字序列. 2 大端big-endian 数据在内存中的一种表示格式,规定左边为高有效位,右边为低有效位.数 ...

  4. 解题:BZOJ 4644 经典砂比题(雾

    题面 初见线段树分治 (对我来说可不是什么经典题=.=) 把时间轴建出来一棵线段树,然后在对应的区间上打标记,最后把整棵树DFS一遍,到叶节点输出答案即可 (把最终答案开成全局的了调了半天 #incl ...

  5. 解题:JSOI 2007 重要的城市

    题面 考虑一个点$x$,如果某两个点$u,v$间的所有最短路都经过$x$,那么$x$肯定是重要的.这个题$n$比较小,所以我们直接跑floyd,在过程中记录 当发生松弛时,我们具体讨论: 如果这个长度 ...

  6. bzoj2589【 Spoj 10707】 Count on a tree II

    题目描述 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v),你需要回答u xor lastans和v这两个节点间有多少种不同的点权.其中lastans是上一个询问的答案,初始为0,即第一 ...

  7. C#线程篇---Windows调度线程准则(3)

    Windows本身就是一个抢占式操作系统,它的实现,必定有某种算法在里面,比如什么时候调度哪些线程,需要花费多长时间等问题. 我们时时在用Windows,作为程序员,我们有必要知道其中最贴近我们的算法 ...

  8. Dubbo、Zookeeper集群搭建及Rose使用心得(二)

    上篇讲了一下配置,这次主要写一下这个框架开发的大概流程.这里以实现 登陆 功能为例. 一.准备工作 1.访问拦截器 用户在进行网站访问的时候,有可能访问到不存在的网页,所以,我们需要把这些链接重新定向 ...

  9. 【Asp.net入门3-01】使用jQuery-创建示例项目

    过去,浏览器除了显示HTML外,很少具有其他功能.因此,早期的Web应用程序需要依赖服务 器端代码来响应用户交互并执行数据操作.Web应用程序的交互依赖HTML表单元素和浏览器向服务 器发送数据的功能 ...

  10. python基础之map/reduce/filter/sorted

    ---map(fun,iterable) 首先来看一看map()函数,map函数接受两个参数,第一个参数是函数的名称,第二个参数一个可迭代对象.即map(fun,iterable) map函数就是将具 ...