- 版本:1.0.2
- GitHub: https://github.com/GeoTecINIT/awarns-framework
- NPM: https://npmjs.net.cn/package/%40awarns%2Fnotifications
- 下载
- 昨天: 3
- 上周: 14
- 上个月: 62
@awarns/notifications
此模块允许在发生事件时向用户发送通知。它还定义了一些原始框架记录,用于保存用户对通知的可能反应和交互。
此插件作为 EddyVerbruggen 的 NativeScript Local Notifications 插件的包装器,适应与 AwarNS 框架任务模型一起使用。
使用以下命令行指令安装插件
ns plugin add @awarns/notifications
用法
安装并配置此插件后,您将获得两种交互机制来与之交互
- 插件 API。通过它,您将能够管理已发送的通知及其可能的反应。
- 通知发送任务,允许使用系统服务在本地向用户显示通知。用户可以点击或丢弃通知。该插件包含特定的记录以直接反应:NotificationTap 和 NotificationDiscard。它还包含更具体的通知点击动作的 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 | 当用户通过系统托盘丢弃通知时发出。只有设置了通知丢弃回调时才会发出此事件 |
记录
此插件包括记录,可分为两大类:用户反应和用户交互。
用户反应
用户反应包括NotificationTapRecord
和NotificationDiscardRecord
。
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 |
被丢弃通知的点击操作 |
用户交互
用户交互包括UserReadContent
、QuestionnaireAnswers
、UserFeedback
和UserConfirmation
记录。
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