最近遇到好多人问iOS的ANCS服务怎么做,感觉很难,其实只是我们自己没理解清而已,做起来的话,很简单,没想象的那么难。现在市面有许多蓝牙手表、手环等都能接收到苹果手机的系统通知,那这是怎么实现的呢?
其实,这都有赖于苹果IOS 7开始提供的ANCS协议,ANCS(苹果通知中心, Apple Notification Center Service)的目的是提供给蓝牙外设一种简单、方便的获取ios设备通知信息的方式。使得蓝牙手环、手表可以收到苹果手机的来电、短信及各种应用的通知信息
简单说明一下:
ANCS通过蓝牙BLE 4.0实现,仅支持iPhone 4S及以上且系统版本在IOS 7以上的手机,同时在外设端需要支持蓝牙4.0协议。
1、外设端进行广播,手机打开蓝牙,搜索外设,连接外设,之后进行绑定(这很重要,否则无法接收通知)
2、外设在连接建立后需要监听手机上的ANCS Service中的Notification Source
3、当有通知时,手机会给外设发消息,说明是哪个应用的通知
4、如果外设想进一步获取通知的详情,就往Control Point写控制信息,获取详情
5、详情会通过Data Source发过来
ANCS的使用没有依赖,它是蓝牙的一个GATT协议,任何一个实现了GATT client的设备可以方便的从ios设备获取通知信息。
概念定义
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,以保证能够监听到所有通知。
Characteristic类型
所涉及的characteristic
1、Notification Source:
UUID 9FBF120D-6301-42D9-8C58-25E699A21DBD(notifiable)
基本通知源,通知一些计数的信息;
2、Control Point:
UUID 69D1D8F3-45E1-49A8-9821-9BBDFDAAD9D9(writeable with response)
控制器,用于向ios设备写入控制信息,例如读取详情;
3、Data Source:
UUID 22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB(notifiable)
数据源,用于提供详细数据,在控制信息写入后通过此characteristic返回;
还有许多其他characteristic,不过只有Notification Source是强制的,其他的都是可选的。
最后:我想说明一下,也是大家都比较关心的一个点,我也查看了好多资料,但大部分资料上说的都不是很清楚,就是,使用系统的ANCS服务,我们软件这边是不需要写任何的代码的,我们只是做好蓝牙的扫描连接就好,都是硬件那边要做,等硬件做好支持ANCS服务的相关响应和操作之后,在打开应用的时候,系统检测到该硬件设备支持ANCS服务,并如果是第一次连接到硬件,就会提示跟硬件进行配对,当用户点击配对之后,就开始通过蓝牙连接设备,而等手机端产生通知消息的时候,系统会自动把这条通知消息,通过ANCS发送到硬件上面,硬件收到之后,就会进行相应的响应,比如:显示出信息内容,响铃,震动等。而发送消息给硬件的这条路径就是蓝牙,虽然我们在代码里面没有写任何发送消息的内容,还可以通过蓝牙发送过去,那是因为,这一步,系统已经帮我们做好了,系统在ANCS上面做好了封装,我们不用管,就会帮我们发过去,所以,只需硬件做好就可以了。另外:第一次连接的时候,会提示配对,以后进行连接的时候,配对过的就不会提示,没有配对过的才会提示。