Apple Notification Center Service--ANCS【轉】

Apple Notification Center Service

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

MAR 22ND, 2014 | COMMENTSios

名詞解釋與約定

名詞解釋

  • 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-8git

Note: ANCS 並不保證始終存在,服務開啓,關閉機制由iOS系統決定,Device 須要一直檢測,查找ANCS是否存在。github

協議內容

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

uart profile 中包括3個 characteristicapp

  • 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 可選。ide

Notification Source Characteristic

Notification Source characteristic 包括3個功能spa

  • 新的iOS設備通知
  • iOS設備通知修改
  • iOS設備通知刪除

當Device端 subscribes Notification Source characteristic時,GATT Notification 會馬上分發出去。因此,Notification consumer (Device)在subscribe以前就須要作好立馬接受和處理消息的狀態。3d

Notification Source response format

圖2-1 Notification Source characteristic 經過GATT Notification 的格式。orm

  • EventID:描述iOS設備上面的通知是增長、刪除、仍是修改。
  • EventFlags: 標誌位,描述iOS設備通知(重要, 靜默)
  • CategoryID:iOS設備通知類型
  • CategoryCount:給定類型的通知數量,好比有2個未讀email消息通知,這時有一個新的未讀消息通知push到iOS設備,這時CategoryCount = 3 NotificationUID:通知的惟一標示,這個字段用於和Control Point characteristic 檢索更多的信息。

image

表格3-1:CategoryID的描述

image

Notification Source Response Example

Device 獲取的來此Notification Source的數據是「00 01 00 01 43 00 00 00」

image

圖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 查找通知的詳細內容(通知屬性)。

image

圖2-3 獲取通知屬性命令格式 CommandID: 必須設置爲0 NotificationUID:通知的惟一標示(Notification Source 得到) AttributeIDS:須要檢索信息list

image

圖3-5 能夠檢索的通知屬性列表,其中Title, subtitle, Message 須要增長2個bytes的字段表示長度。

獲取通知屬性命令Example 「00 43 00 00 00 00 01 FF FF 05」

image

獲取通知屬性命令Response消息格式

image

圖2-4 獲取通知屬性命令返回數據格式

CommandID: 0 NotificationUID:通知的惟一標示 AttributeList:具體的屬性返回數據列表. 若是返回的屬性空,長度是0

若是返回的數據長度大於 GATT MTU,那麼數據會被分幾段傳輸。Device 須要對數據拼接。

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

下圖查找 NotificationUID爲2的 AppIdentifier、Title、SubTitle、Message Date屬性返回數據

image

獲取APP屬性命令

該命令經過APPIdentifier查找iOS設備中安裝的APP的屬性。

圖2-5 獲取APP屬性命令格式

CommandID: 必須設置成1 AppIdentifier:字符串’\0’ 結尾。 AttributeIDS:查找ID列表

獲取APP屬性命令 Example

查找AppIdentifier 爲 「com.apple.mobilemail」 的APP屬性

image

獲取APP屬性命令Response消息格式

image

圖2-6獲取APP屬性命令返回數據格式

  • CommandID:必須是1
  • AppIdentifier:字符串 ‘\0’結尾
  • AttributeList:具體的屬性返回數據列表. 若是返回的屬性空,長度是0

若是返回的數據長度大於 GATT MTU,那麼數據會被分幾段傳輸。Device 須要對數據拼接。

獲取APP屬性命令Response消息格式Example

查找AppIdentifier 爲 「com.apple.mobilemail」 的APP屬性返回數據 漢字 「郵件」

image

sessions會話

ANCS 的 session 從設備訂閱characteristic 開始到取消訂閱或是disconnect結束。全部的Identifier 好比 NotificationUID,AppIdentifier 只在當前的session有效。

當session結束後,設備須要刪除掉全部的在session中得到的Identifier信息,這些信息會在session創建的時候從新通知設備.

錯誤代碼

  • 未知命令:(0xA0)
  • 無效命令:(0xA1)
  • 無效參數(0xA2) : 好比NotificationUID 找不到

注意:若是產生了上面的錯誤,都不會再收到任何的GATT 通知。

參考內容

Apple Notification Center Service (ANCS) Specification

相關文章
相關標籤/搜索