名詞解釋與約定
名詞解釋
- 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
orm
- 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 通知。