NP(Notification Provider):消息提供者,指的是ANCS服务的生产者,即IOS设备。
NC(Nofitication Consumer):消息接受者,指的是ANCS服务的客户端,即周边BLE设备。
Apple Notification Center Service 是一项首要服务,其服务UUID为7905F431-B5CE-4E99-A40F-4B1E122D00D0。一个 NP 上可能只存在一个 ANCS 实例。由于 iOS 的性质,不能保证 ANCS 始终存在。因此,NC 应该寻找并订阅 GATT 服务的 Service Changed 特性,以便随时监控 ANCS 的潜在发布和取消发布。
ANCS具备三个特征:
NORDIC的相关代码描述:
/**@brief iOS notification structure. */
typedef struct
{
uint32_t notif_uid; //!< Notification UID.
ble_ancs_c_evt_id_values_t evt_id; //!< Whether the notification was added, removed, or modified.
ble_ancs_c_notif_flags_t evt_flags; //!< Bitmask to signal if a special condition applies to the notification, for example, "Silent" or "Important".
ble_ancs_c_category_id_val_t category_id; //!< Classification of the notification type, for example, email or location.
uint8_t category_count; //!< Current number of active notifications for this category ID.
} ble_ancs_c_evt_notif_t;
/**@brief Event IDs for iOS notifications. */
typedef enum
{
BLE_ANCS_EVENT_ID_NOTIFICATION_ADDED, /**< The iOS notification was added. */
BLE_ANCS_EVENT_ID_NOTIFICATION_MODIFIED, /**< The iOS notification was modified. */
BLE_ANCS_EVENT_ID_NOTIFICATION_REMOVED /**< The iOS notification was removed. */
} ble_ancs_c_evt_id_values_t;
/**@brief Flags for iOS notifications. */
typedef struct
{
uint8_t silent : 1; //!< If this flag is set, the notification has a low priority.
uint8_t important : 1; //!< If this flag is set, the notification has a high priority.
uint8_t pre_existing : 1; //!< If this flag is set, the notification is pre-existing.
uint8_t positive_action : 1; //!< If this flag is set, the notification has a positive action that can be taken.
uint8_t negative_action : 1; //!< If this flag is set, the notification has a negative action that can be taken.
} ble_ancs_c_notif_flags_t;
/**@brief Category IDs for iOS notifications. */
typedef enum
{
BLE_ANCS_CATEGORY_ID_OTHER, /**< The iOS notification belongs to the "other" category. */
BLE_ANCS_CATEGORY_ID_INCOMING_CALL, /**< The iOS notification belongs to the "Incoming Call" category. */
BLE_ANCS_CATEGORY_ID_MISSED_CALL, /**< The iOS notification belongs to the "Missed Call" category. */
BLE_ANCS_CATEGORY_ID_VOICE_MAIL, /**< The iOS notification belongs to the "Voice Mail" category. */
BLE_ANCS_CATEGORY_ID_SOCIAL, /**< The iOS notification belongs to the "Social" category. */
BLE_ANCS_CATEGORY_ID_SCHEDULE, /**< The iOS notification belongs to the "Schedule" category. */
BLE_ANCS_CATEGORY_ID_EMAIL, /**< The iOS notification belongs to the "E-mail" category. */
BLE_ANCS_CATEGORY_ID_NEWS, /**< The iOS notification belongs to the "News" category. */
BLE_ANCS_CATEGORY_ID_HEALTH_AND_FITNESS, /**< The iOS notification belongs to the "Health and Fitness" category. */
BLE_ANCS_CATEGORY_ID_BUSINESS_AND_FINANCE, /**< The iOS notification belongs to the "Buisness and Finance" category. */
BLE_ANCS_CATEGORY_ID_LOCATION, /**< The iOS notification belongs to the "Location" category. */
BLE_ANCS_CATEGORY_ID_ENTERTAINMENT /**< The iOS notification belongs to the "Entertainment" category. */
} ble_ancs_c_category_id_val_t;
相关意义解析:
EventID:此字段通知设备是否添加、修改或删除了给定的 iOS 通知。此字段的枚举值在EventID Values中定义。
EventID Values:
EventIDNotificationAdded = 0 - iOS 通知已添加
EventIDNotificationModified = 1 - iOS通知已修改
EventIDNotificationRemoved = 2 - iOS通知已删除
EventFlags:一个位掩码,其设置位通过 iOS 通知将其特殊性通知给 NC。例如,如果将 iOS 通知视为“重要”,则 NC 可能希望显示一个更积极的用户界面(UI),以确保正确警告用户。此字段的枚举位在 EventFlags 中定义。
EventFlags:
EventFlagSilent = (1 << 0) - 通知的优先级较低
EventFlagImportant = (1 << 1) - 通知具有较高的优先级
EventFlagPreExisting = (1 << 2) - 该通知已存在
EventFlagPositiveAction = (1 << 3) - 通知具有可以采取的积极行动
EventFlagNegativeAction = (1 << 4) - 通知具有可以采取的负面行动
CategoryID:一个数值,提供对 iOS 通知进行分类的类别。NP 将尽最大努力为每个iOS 通知提供准确的类别。此字段的枚举值在 CategoryID 值中定义。
CategoryID:
CategoryIDOther = 0 - iOS 通知属于“其他”类别
CategoryIDIncomingCall = 1 - iOS 通知属于“来电”类别
CategoryIDMissedCall = 2 - iOS 通知属于“未接电话”类别
CategoryIDVoicemail= 3 - iOS 通知属于“语音邮件”类别
CategoryIDSocial = 4 - iOS 通知属于“社交”类别
CategoryIDSchedule = 5 - iOS 通知属于“时间表”类别
CategoryIDEmail = 6 - iOS 通知属于“电子邮件”类别
CategoryIDNews = 7 - iOS 通知属于“新闻”类别
CategoryIDHealthAndFitness = 8 - iOS 通知属于“健康和健身”类别
CategoryIDBusinessAndFinance = 9 - iOS 通知属于“商务和金融”类别
CategoryIDLocation = 10 - iOS 通知属于“位置”类别
CategoryIDEntertainment = 11 - iOS 通知属于“娱乐”类别
CategoryCount:给定类别中当前活动的 iOS 通知数。例如,如果用户的电子邮件收件箱中有两封未读电子邮件,并且有一封新电子邮件被推送到用户的 iOS 设备,则 CategoryCount 的值为3。
NotificationUID:一个 32 位数值,它是iOS通知的唯一标识符(UID)。该值可用作发送到“控制点”特征以与 iOS 通知进行交互的命令中的句柄
NC 可能想要与 iOS 通知进行交互。它可能想要检索关于它的更多信息,包括它的内容,或者它可能想要对其执行操作。这些属性的检索是通过控制点和数据源特性执行的。
NC 可以通过将特定命令写入控制点特性来发出请求以检索有关 iOS 通知的更多信息。如果写入控制点特征成功,NP 将通过数据源特征上的 GATT 通知流立即响应请求。
获取通知属性命令允许 NC 检索特定 iOS 通知的属性。
获取应用程序属性命令允许 NC 检索安装在 NP 上的特定应用程序的属性。
和Get Notification Attributes 命令的响应一样,如果对 Get App Attributes 命令的响应大于协商的 GATT 最大传输单元 (MTU),它会被 NP 分成多个片段。NC 必须通过拼接每个片段来重组响应。当收到每个请求属性的完整元组时,响应完成。
Perform Notification Action 命令允许 NC 对特定的 iOS 通知执行预定的操作。执行通知操作命令包含以下字段:
发出此命令时,无论成功与否,都不会在数据源特征上生成任何数据。
从 iOS 8.0 开始,NP 可以通知 NC 与 iOS 通知相关的潜在操作。然后,NC 可以代表用户请求 NP 执行与特定 iOS 通知关联的操作。
EventFlags通过检测通知源特性生成的 GATT 通知字段中设置标志的存在,通知 NC 在 iOS 通知上存在可执行操作:
NP 代表 NC 执行的实际操作由 NP 确定,并根据执行它们的 iOS 通知而有所不同。例如,对来电通知执行积极操作可能会接听它,而执行消极操作可能会拒绝它。
NC 不得预先假设或尝试猜测对 iOS 通知执行的确切操作,因为这些操作基于它无法获得的信息,以及其他因素,例如 NP 实现的 ANCS 版本。NP 保证积极和消极的行动与不会让用户感到惊讶的结果相关联。
如果出现在 iOS 通知中,正面和负面操作可能会向用户表示为复选标记、X 标记或通常与确认和取消相关的颜色(例如绿色和红色)。
NC 可以通过检索 iOS 8.0 中引入的新通知属性来检索简要描述与 iOS 通知关联的实际操作的标签:
官方描述地址,了解更多详情请点击。