Служба центра уведомления Apple

Служба Центра Уведомления Apple является основной службой, служба UUID которой 7905F431-B5CE-4E99-A40F-4B1E122D00D0.

Только один экземпляр ANCS может присутствовать на NP. Вследствие природы iOS ANCS, как гарантируют, всегда не будет присутствовать. В результате NC должен искать и подписать на Службу Измененную характеристику службы GATT для контроля для потенциальной публикации и непубликации ANCS в любое время.

Эксплуатационные характеристики

В его канонической форме ANCS представляет три характеристики:

Все эти характеристики требуют авторизации для доступа.

Поддержка Исходной характеристики Уведомления обязательна, тогда как поддержка Контрольной точки характеристика характерного и Источника данных является дополнительной.

Источник уведомления

Исходная характеристика Уведомления является характеристикой, на которую о NC сообщают:

  • поступление нового уведомления iOS на NP

  • модификация уведомления iOS на NP

  • удаление уведомления iOS на NP

Уведомления GATT могут быть поставлены, как только NC подписывается на Исходную характеристику Уведомления. В результате NC должен быть в состоянии, где оно может должным образом принять и обработать эти сообщения прежде, чем подписаться на эту характеристику.

Формат уведомлений GATT, поставленных через Исходную характеристику Уведомления, показан на рисунке 2-1.

Рисунок 2-1  формат уведомления GATT поставлен через Исходную характеристику Уведомления

Уведомление GATT, поставленное через Исходную характеристику Уведомления, содержит следующую информацию:

  • EventID: Это поле сообщает аксессуару, было ли данное уведомление iOS добавлено, изменено или удалено. Перечисляемые значения для этого поля определяются в Значениях EventID.

  • EventFlags: битовая маска, биты набора которой сообщают NC специфик с уведомлением iOS. Например, если уведомление iOS считают «важным», NC может хотеть вывести на экран более агрессивный пользовательский интерфейс (UI), чтобы удостовериться, что должным образом предупрежден пользователь. Перечислимые биты для этого поля определяются в EventFlags.

  • CategoryID: численное значение, обеспечивающее категорию, на которую может быть классифицировано уведомление iOS. NP приложит максимальное усилие для обеспечения точной категории для каждого уведомления iOS. Перечисляемые значения для этого поля определяются в Значениях CategoryID.

  • CategoryCount: текущее число активных уведомлений iOS в данной категории. Например, если два непрочитанных электронных письма находятся во входном почтовом ящике пользователя, и новая электронная почта продвинута к устройству на iOS пользователя, значение CategoryCount равняется 3.

  • NotificationUID: 32-разрядное численное значение, которое является уникальным идентификатором (UID) для уведомления iOS. Это значение может использоваться в качестве дескриптора в командах, отправленных в характеристику Контрольной точки для взаимодействия с уведомлением iOS.

Время жизни уведомления iOS может быть неявно выведено через последовательность Источника Уведомления уведомления GATT, сгенерированные NP, как показано на рисунке 2-2.

Рисунок 2-2  время жизни уведомления iOS

Контрольная точка и источник данных

NC может хотеть взаимодействовать с уведомлением iOS. Это может хотеть получить больше информации об этом, включая ее содержание, или это может хотеть выполнить действия с ним. Извлечение этих атрибутов выполняется через характеристики Контрольной точки и Источника данных.

NC может выпустить запрос для получения большей информации об уведомлении iOS путем записи определенных команд в характеристику Контрольной точки. Если запись к характеристике Контрольной точки будет успешна, то NP будет быстро реагировать на запрос через поток уведомлений GATT на характеристике Источника данных.

NC может выполнить предопределенные действия с уведомлением iOS путем записи определенных команд в характеристику Контрольной точки. Больше информации о действиях и уведомлениях iOS находится в, Выполняют Действие Уведомления.

Получите атрибуты уведомления

Команда Get Notification Attributes позволяет NC получать атрибуты определенного уведомления iOS. Формат команды Get Notification Attribute показан на рисунке 2-3.

Рисунок 2-3  формат команды Get Notification Attribute

Команда Get Notification Attributes содержит следующую информацию:

  • CommandID: Должен быть установлен в 0 (CommandIDGetNotificationAttributes).

  • NotificationUID: 32-разрядное численное значение, представляющее UID уведомления iOS, для которого клиент хочет информацию.

  • AttributeIDs: список атрибутов, которые NC хочет получить. Некоторые атрибуты, возможно, должны сопровождаться 16-разрядным параметром длины, указывающим максимальное количество байтов атрибута, который NC хочет получить.

Формат ответа на команду Get Notification Attributes показан на рисунке 2-4.

Рисунок 2-4  формат ответа на команду Get Notification Attributes

Ответ на команду Get Notification Attributes содержит следующую информацию:

  • CommandID: набор к 0 (CommandIDGetNotificationAttributes).

  • NotificationUID: 32-разрядное численное значение, которое является UID уведомления iOS следующие атрибуты, соответствует.

  • AttributeList: список AttributeIDs/16-bit кортежей Длины/Атрибута. Атрибут всегда является не ЗАВЕРШАЮЩЕЙСЯ NULL строкой, длина которой в байтах предоставлена в кортеже, но. Если требуемый атрибут является пустым или недостающим для уведомления iOS, его длина установлена в 0.

Если ответ больше, чем согласованный GATT Maximum Transmission Unit (MTU), он разделяется на многократные фрагменты NP. NC должен реконструировать ответ путем соединения каждого фрагмента. Когда полные кортежи для каждого требуемого атрибута были получены, ответ завершен.

Получите атрибуты приложения

Команда Get App Attributes позволяет NC получать атрибуты определенного приложения, установленного на NP. Формат команды Get App Attributes показан на рисунке 2-5.

Рисунок 2-5  формат команды Get App Attributes

Команда Get App Attributes содержит следующую информацию:

  • CommandID: Должен быть установлен в 1 (CommandIDGetAppAttributes).

  • AppIdentifier: идентификатор строки приложения клиент хочет информацию о. Эта строка должна быть ЗАВЕРШЕНА NULL.

  • AttributeIDs: список атрибутов NC хочет получить.

Формат ответа на команду Get App Attributes показан на рисунке 2-6.

Рисунок 2-6  формат ответа на команду Get App Attributes

Ответ на команду Get App Attributes содержит следующую информацию:

  • CommandID: набор к 1 (CommandIDGetAppAttributes).

  • AppIdentifier: идентификатор строки приложения следующие атрибуты соответствует. Эта строка ЗАВЕРШАЕТСЯ NULL.

  • AttributeList: список AttributeIDs/16-bit кортежей Длины/Атрибута. Атрибут всегда является не ЗАВЕРШАЮЩЕЙСЯ NULL строкой, длина которой в байтах предоставлена в кортеже, но. Если требуемый атрибут является пустым или недостающим для приложения, его длина установлена в 0.

Как с ответом на команду Get Notification Attributes, если ответ на команду Get App Attributes больше, чем согласованный GATT Maximum Transmission Unit (MTU), он разделяется на многократные фрагменты NP. NC должен реконструировать ответ путем соединения каждого фрагмента. Когда полные кортежи для каждого требуемого атрибута были получены, ответ завершен.

Выполните действие уведомления

Команда Perform Notification Action позволяет NC выполнять предопределенное действие с определенным уведомлением iOS. Команда Perform Notification Action содержит следующие поля:

Байты

Имя

Описание

1

CommandID

Набор к 2 (CommandIDPerformNotificationAction).

2-5

NotificationUID

32-разрядное численное значение, представляющее UID уведомления iOS, с которым клиент хочет выполнить действие.

6

ActionID

Желаемое действие NC хочет быть выполненным на уведомлении iOS.

Никакие данные не сгенерированы на характеристике Источника данных, когда эта команда дается, успешно ли это или нет.

Действия уведомления

Начиная с iOS 8.0 NP может сообщить NC возможных действий, связанных с уведомлениями iOS. От имени пользователя NC может тогда запросить NP выполнить действие, связанное с определенным уведомлением iOS.

NC сообщают о существовании выполнимых действий с уведомлением iOS путем обнаружения присутствия флагов набора в EventFlags поле уведомлений GATT, сгенерированных Исходной характеристикой Уведомления:

  • EventFlagPositiveAction: Положительное действие существует и связано с этим уведомлением iOS.

  • EventFlagNegativeAction: Отрицательное действие существует и связано с этим уведомлением iOS.

Фактические действия, выполняемые NP от имени NC, определяются NP и варьируются в зависимости от уведомления iOS, на котором они выполняются. Например, выполнение положительного действия на Уведомлении о входящем вызове может ответить на него, в то время как выполнение отрицательного действия может уменьшить его.

NC не должен ни принимать, ни пытаться предположить заранее точное действие, выполняемое на Уведомлении iOS, потому что эти действия основаны на информации, недоступной к нему, а также других факторах, таких как версия ANCS, реализованная NP. NP гарантирует, что положительные и отрицательные действия связаны с результатами, не удивляющими пользователя.

Если подарок к уведомлению iOS, положительные и отрицательные действия могут быть представлены пользователю как галочки, X меток или цвета, обычно связываемые с подтверждением и увольнением (такой как зеленые и красные).

NC может получить метки, кратко описывающие фактические действия, связанные с уведомлением iOS путем получения новых атрибутов уведомления, представленных в iOS 8.0:

  • NotificationAttributeIDPositiveActionLabel: Метка раньше описывала положительное действие, которое может быть выполнено на уведомлении iOS.

  • NotificationAttributeIDNegativeActionLabel: Метка раньше описывала отрицательное действие, которое может быть выполнено на уведомлении iOS.

Сеансы

Сеанс ANCS начинается, когда NC подписывается на Исходную характеристику Уведомления на NP и заканчивается, когда NC или отписывается от той же характеристики или разъединяется от NP. Поскольку ANCS не разработан, чтобы быть полной службой синхронизации, он не отслеживает состояние через сеансы. В результате все идентификаторы (такие как NotificationUID и AppIdentifier) и все данные, переданные между NC и NP, допустимы только в определенном сеансе.

Когда определенный сеанс заканчивается, NC должен удалить любые идентификаторы и данные, которые он собрал и сохранил во время сеанса. Когда новый сеанс начинается, NP прилагает все усилия для информирования NC любых существующих уведомлений iOS в системе. NC может использовать эту информацию для создания модели для использования для остатка от сеанса.

Выборка атрибута и кэширование

Строго рекомендуется для NC выбрать атрибуты только по мере необходимости и возможно в ответ на пользовательские действия. Например, если NC принимает решение вывести на экран активные уведомления iOS в простом списке и показать только подробные данные об определенном уведомлении iOS, когда выбрано пользователем, то извлечение этого iOS атрибуты уведомления может быть инициировано лениво.

Во время сеанса строго рекомендуется, чтобы NC создал кэш Атрибутов Приложения для каждого идентификатора приложения, с которым это встречается. Создание этого кэша позволяет NC избегать получать те же неизменные Атрибуты Приложения многократно — экономить время и сохранение батареи.

Коды ошибки

При записи в характеристику Контрольной точки NC может получить следующие ANCS-специфичные коды ошибки:

  • Неизвестная команда (0xA0): commandID не был распознан NP.

  • Недопустимая команда (0xA1): Команда была неправильно отформатирована.

  • Недопустимый параметр (0xA2): Один из параметров (например, NotificationUID) не относится к существующему объекту на NP.

  • Действие перестало работать (0xA3): Действие не выполнялось.

Если NP ответит с ошибкой, то она не генерирует уведомления GATT на характеристике Источника данных для соответствующей команды.

Схемы в качестве примера

Следующие два данных показывают примеры двух общих взаимодействий между NP и NC. Рисунок 2-7 показывает типичную последовательность команд, и ответы должны были установить ANCS на NC. Рисунок 2-8 показывает типичную последовательность команд, и ответы должны были получить больше информации об уведомлении iOS для отображения его на NC.

  Служба рисунка 2-7 устанавливает
  пример извлечения атрибута уведомления exampleFigure 2-8