@awarns/notifications
AwarNS 框架包,允许按需发送通知
npm i --save @awarns/notifications

@awarns/notifications

npm (scoped) npm

此模块允许在发生事件时向用户发送通知。它还定义了一些原始框架记录,用于保存用户对通知的可能反应和交互。

此插件作为 EddyVerbruggen 的 NativeScript Local Notifications 插件的包装器,适应与 AwarNS 框架任务模型一起使用。

使用以下命令行指令安装插件

ns plugin add @awarns/notifications

用法

安装并配置此插件后,您将获得两种交互机制来与之交互

  1. 插件 API。通过它,您将能够管理已发送的通知及其可能的反应。
  2. 通知发送任务,允许使用系统服务在本地向用户显示通知。用户可以点击或丢弃通知。该插件包含特定的记录以直接反应:NotificationTapNotificationDiscard。它还包含更具体的通知点击动作的 records 定义。

设置

此插件要求您在框架初始化期间注册其加载器,如下所示

// ... platform imports
import { awarns } from '@awarns/core';
import { demoTasks } from '../tasks';
import { demoTaskGraph } from '../graph';
import { registerNotificationsPlugin } from '@awarns/notifications';

awarns
.init(
demoTasks,
demoTaskGraph,
[
registerNotificationsPlugin('App notifications'),
]
)
// ... handle initialization promise

插件加载器参数

参数 类型 描述
notificationsChannelName 字符串 操作系统要求。用于通过框架发送通知的频道名称,以便用户可以通过系统设置调整其优先级

API

notificationsManager

notificationsManager 单例对象允许管理对通知的反应。它提供以下操作

方法 返回类型 描述
onNotificationTap(callback: NotificationCallback) Promise<void> 在您的 UI 中设置一个回调以处理来自系统托盘的通知点击。如果点击在回调设置之前到达,例如,当应用未运行时,点击将被缓存并在注册回调后立即发送
onNotificationDiscard(callback: NotificationCallback) Promise<void> 设置一个回调以接收有关从系统托盘丢弃的通知的更新
markAsSeen(id: number) Promise<void> 向插件指示通知已被处理/读取。它将从一个待处理通知列表中删除

notifications

notifications 单例对象允许访问已发送但尚未处理/读取的通知。它提供以下操作

方法 返回类型 描述
list() Observable<Array<Notification>> 允许观察所有未读通知的变化。有关 Notification 接口的更多详细信息,请参阅此表之后的说明。建议安装 RxJS,以操作此方法的输出
get(id: string) Promise<Notification> 允许通过其 ID 检索存储的通知

Notification

属性 类型 描述
id 数字 通知的唯一标识符
title 字符串 通知标题行的内容
body 字符串 (可选) 通知内容
timestamp 日期 通知发送的时间
tapAction TapAction (可选) 额外元数据,用于了解如何处理点击通知的情况

TapAction

属性 类型 描述
type TapActionType | string 在通知点击后要执行的操作类型。请参考下表中的示例
id 字符串 该类型内部操作的具体ID
metadata 对象 自动填充。包含触发发送通知的任务执行的触发事件的负载(数据)

TapActionType

选项 描述
OPEN_APP 默认操作,未指定时使用。仅打开应用程序。当提供此操作类型时,不会调用通知点击回调
OPEN_CONTENT 可以用来表示应用程序必须显示一些内容供用户查看。请查看相关的UserReadContent记录类型
DELIVER_QUESTIONS 可以用来表示应用程序必须交付一些问题供用户回答。请查看相关的QuestionnaireAnswers记录类型
ASK_FEEDBACK 可以用来表示应用程序必须交付一些快速反馈供用户回答(单问题)。请查看相关的UserFeedback记录类型
ASK_CONFIRMATION 可以用来表示应用程序必须交付一些是/否确认问题供用户回答。请查看相关的UserConfirmation记录类型

任务

发送通知

任务名称: sendNotification

描述: 发送包含指定信息的通知

执行要求: 无

要注册此任务以供使用,您只需将其导入并在应用程序的任务列表中调用其生成函数即可

import { Task } from '@awarns/core/tasks';
import { sendNotificationTask } from '@awarns/notifications';

export const demoTasks: Array<Task> = [
sendNotificationTask(),
];

任务生成器参数

任务生成器不接受任何参数。

任务输出事件

该任务在执行完成后不产生重大事件,除了常规的{task-name}Finished事件:sendNotificationFinished

然而,一旦它运行完成,相关的内部监听器将发出事件。以下列出这些事件。

在应用程序任务图中的示例使用

on(
'startEvent',
run('sendNotification', {
title: 'New content available', // All notifications must contain a title
body: 'This information may be valuable for you', // The body of the notification can be provided through here
// or inside the payload (data) of the event trigger, inside a
// property called body
tapAction: { // (Optional) If not provided, defaults to OPEN_APP
type: TapActionType.OPEN_CONTENT, // See the rest of the options in the TapActionType enum
id: 'content-1', // For the app to distingish what content must be displayed after tapping the notification
},
})
);

on('notificationTapped', run('writeRecords'));
on('notificationCleared', run('writeRecords'));

注意:要使用writeRecords任务,必须安装和配置持久化包。请参阅持久化包文档

发送一组选项中的随机通知

任务名称: sendRandomNotification

描述: 在给定集合中发送随机通知

执行要求: 无

要注册此任务以供使用,您只需将其导入并在应用程序的任务列表中调用其生成函数即可

import { Task } from '@awarns/core/tasks';
import { sendRandomNotificationTask } from '@awarns/notifications';

export const demoTasks: Array<Task> = [
sendRandomNotificationTask(),
];

任务生成器参数

任务生成器不接受任何参数。

任务输出事件

该任务在执行完成后不产生重大事件,除了常规的{task-name}Finished事件:sendNotificationFinished

然而,一旦它运行完成,相关的内部监听器将发出事件。以下列出这些事件。

在应用程序任务图中的示例使用

on(
'startEvent',
run('sendRandomNotification', {
options: [
{
title: 'Would you like to rate the app?', // All notifications must contain a title
// But the body is optional
},
{
title: 'Do you like the app so far?',
body: 'Your feedback can make us better', // Unlike the sendNotification task,
// the notification body can only be set through here
},
{
title: 'Your opinion is very valuable',
tapAction: { // (Optional) Including a tap action inside one of the options will override the default one (see below)
type: TapActionType.ASK_FEEDBACK,
id: 'special-feedback',
},
},
],
defaultTapAction: { // (Optional) Common tap action for all the notification options that don't declare one
type: TapActionType.ASK_FEEDBACK,
id: '
regular-feedback',
},
})
);

on('
notificationTapped', run('writeRecords'));
on('
notificationCleared', run('writeRecords'));

注意:要使用writeRecords任务,必须安装和配置持久化包。请参阅持久化包文档

事件

名称 有效载荷 描述
notificationTapped NotificationTapRecord 当用户通过系统托盘点击通知时发出。只有设置了通知点击回调时才会发出此事件
notificationDiscarded NotificationDiscardRecord 当用户通过系统托盘丢弃通知时发出。只有设置了通知丢弃回调时才会发出此事件

记录

此插件包括记录,可分为两大类:用户反应和用户交互。

用户反应

用户反应包括NotificationTapRecordNotificationDiscardRecord

NotificationTapRecord

属性 类型 描述
id 字符串 记录的唯一ID
type 字符串 始终 notification-tap
change 更改 始终 none。无法检测通知点击的开始和结束
timestamp 日期 通知被点击时的本地时间
notificationId 数字 被点击通知的ID
tapAction TapAction 被点击通知的点击操作

NotificationDiscardRecord

属性 类型 描述
id 字符串 记录的唯一ID
type 字符串 始终 notification-discard
change 更改 始终 none。无法检测通知丢弃的开始和结束
timestamp 日期 通知被丢弃时的本地时间
notificationId 数字 被丢弃通知的ID
tapAction TapAction 被丢弃通知的点击操作
用户交互

用户交互包括UserReadContentQuestionnaireAnswersUserFeedbackUserConfirmation记录。

UserReadContent

此记录旨在手动创建(并可选地通过使用awarns.emit()发出),在用户关闭处理OPEN_CONTENT触摸操作时显示的内容后。

属性 类型 描述
id 字符串 记录的唯一ID
type 字符串 始终user-content-read
change 更改 始终none。此记录旨在用户查看内容结束后使用。开始由NotificationTapRecord反映
timestamp 日期 内容关闭时的本地时间
contentId 字符串 用户看到的内容的id
completelyRead 布尔型 允许指示用户是否已看到内容的全部内容。默认为false
notificationId 数字 (可选)导致显示此内容的通知的id

QuestionnaireAnswers

此记录旨在手动创建(并可选地通过使用awarns.emit()发出),在用户提交处理DELIVER_QUESTIONS触摸操作时交付的一组问题时。

属性 类型 描述
id 字符串 记录的唯一ID
type 字符串 始终questionnaire-answers
change 更改 始终none。此记录旨在用户回答交付的问题后使用。开始由NotificationTapRecord反映
timestamp 日期 回答问题时的本地时间
questionnaireId 字符串 用户回答的调查问卷的id
answers Array 包括用户对已交付问题的每个答案。下表描述了QuestionnaireAnswer接口的每个属性
notificationId 数字 (可选)导致此调查问卷被交付的通知的id
QuestionnaireAnswer
属性 类型 描述
title 字符串 问题的标题
answer number | string | boolean 用户提供的答案
millisecondsToAnswer 数字 (可选)用户回答问题所需的时间(毫秒)

UserFeedback

此记录旨在手动创建(并可选地通过使用awarns.emit()发出),在用户处理ASK_FEEDBACK触摸操作时提交他们被要求提供的反馈后。

属性 类型 描述
id 字符串 记录的唯一ID
type 字符串 始终user-feedback
change 更改 始终none。此记录旨在用户提交反馈后使用。开始由NotificationTapRecord反映
timestamp 日期 提交反馈时的本地时间
feedbackId 字符串 用户提交的反馈表单的id
question 字符串 用户被要求回答的问题
feedback 字符串 用户提交的答案
notificationId 数字 (可选)导致此反馈被要求的通知的id

UserConfirmation

此记录旨在手动创建(并可选地通过使用awarns.emit()发出),在用户处理ASK_CONFIRMATION触摸操作时确认或拒绝所提出的声明后。

属性 类型 描述
id 字符串 记录的唯一ID
type 字符串 始终user-confirmation
change 更改 始终none。此记录旨在用户确认或拒绝声明后使用。开始由NotificationTapRecord反映
timestamp 日期 确认或拒绝声明时的本地时间
confirmationId 字符串 用户回答的确认表单的id
question 字符串 用户被要求的确认
confirmed 布尔型 指示用户是否已确认声明
notificationId 数字 (可选)导致此确认被请求的通知的id

License

Apache License Version 2.0