- 版本:6.2.1
- GitHub: https://github.com/NativeScript/plugins/tree/master
- NPM: https://npmjs.net.cn/package/%40nativescript%2Flocal-notifications
- 下载量
- 昨天: 218
- 上周: 1332
- 上个月: 5590
@nativescript/local-notifications
内容
简介
这是一个允许您的应用在不运行时显示通知的插件。就像远程推送通知一样,但设置起来要容易得多。
安装
在您项目的根目录中运行以下命令来安装插件。
npm install @nativescript/local-notifications
使用 @nativescript/local-notifications
注意:高级! 如果在
iOS 10+
上没有收到通知或addOnMessageReceivedCallback
方法没有被调用,您可以尝试将 UNUserNotificationCenterDelegate 连接起来。
导入插件
要导入插件,可以使用以下两种方法之一。
// either
import { LocalNotifications } from '@nativescript/local-notifications';
// or (if that doesn't work for you)
import * as LocalNotifications from '@nativescript/local-notifications';
请求权限
默认情况下,schedule 方法会为您请求用户权限。对于手动权限请求,请使用 requestPermission 方法。
// then use it as:
LocalNotifications.requestPermission();
安排通知
要安排通知,请调用 schedule 方法并传递一个通知对象的数组。有关通知对象成员的列表,请参阅 ScheduleOptions。
LocalNotifications.schedule([
{
id: 1, // generated id if not set
title: 'The title',
body: 'Recurs every minute until cancelled',
ticker: 'The ticker',
color: new Color('red'),
badge: 1,
groupedMessages: ['The first', 'Second', 'Keep going', 'one more..', 'OK Stop'], //android only
groupSummary: 'Summary of the grouped messages above', //android only
ongoing: true, // makes the notification ongoing (Android only)
icon: 'res://heart',
image: 'https://cdn-images-1.medium.com/max/1200/1*c3cQvYJrVezv_Az0CoDcbA.jpeg',
thumbnail: true,
interval: { 'minute': 15 }, // repeat the notification every 15 minutes
displayImmediately: true, // display the notification immediately when using a ScheduleIntervalObject
channel: 'My Channel', // default: 'Channel'
sound: isAndroid ? 'customsound' : 'customsound.wav',
at: new Date(new Date().getTime() + 10 * 1000), // 10 seconds from now
},
]).then(
(scheduledIds) => {
console.log('Notification id(s) scheduled: ' + JSON.stringify(scheduledIds));
},
(error) => {
console.log('scheduling error: ' + error);
}
);
获取所有安排通知的 ID
要获取所有安排通知的 ID,请调用 getScheduledIds 方法。
LocalNotifications.getScheduledIds().then((ids: number[]) => {
console.log("ID's: " + ids)
})
取消安排的通知
要取消安排的通知,请使用 cancel 方法。
LocalNotifications.cancel(5).then((foundAndCanceled: boolean) => {
if (foundAndCanceled) {
console.log("OK, it's gone!");
} else {
console.log('No ID 5 was scheduled');
}
});
监听通知点击事件
点击通知中心的通知将启动您的应用。
在 iOS 上,甚至在应用处于前台时收到通知也会触发。
要处理通知点击,请调用 addMessageReceivedCallback 方法并传递一个回调函数。回调函数接收一个类型为 ReceivedNotification 的通知对象。
LocalNotifications.addOnMessageReceivedCallback((notification) => {
console.log('ID: ' + notification.id);
console.log('Title: ' + notification.title);
console.log('Body: ' + notification.body);
}).then(() => {
console.log('Listener added');
});
API
schedule()
scheduledNotificationsIDs: Array<number> = await LocalNotifications.schedule(scheduleOptions)
如果用户已授予权限,将安排指定的 scheduleOptions 通知。如果尚未提示用户请求权限,则将提示用户请求权限,如果权限被授予,则安排通知。对于手动权限请求,请使用 requestPermission 方法。
ScheduleOptions
属性 | 类型 | 描述 |
---|---|---|
id |
数字 |
可选:唯一的通知标识符。如果未设置,将生成。 |
title |
字符串 |
可选:在状态栏中显示的标题。 |
subtitle |
字符串 |
可选:在 iOS 上显示在标题下方,在 Android 上显示在应用名称旁边。默认不设置。仅适用于 android 和 iOS >= 10 。 |
body |
字符串 |
可选:标题下方的文本。如果没有提供,iOS将按照此顺序将副标题或标题(以优先级)替换为它,因为iOS不会显示没有正文的通知。默认情况下Android未设置,iOS上为' ' ,否则通知将无法启动。 |
颜色 |
字符串 |
可选:(仅限Android)在通知中心展开时应用的通知图标和标题的自定义颜色。 |
大文本样式 |
布尔值 |
可选:(仅限Android)允许在通知中心显示正文文本的超过1行。与image 互斥。默认false 。 |
分组消息 |
字符串数组 |
可选:最多包含5条消息的数组,这些消息将使用Android的inboxStyle显示。注意:如果消息超过五条,数组将从头开始截断。默认未设置。 |
分组摘要 |
字符串 |
可选:一个inboxStyle通知摘要。默认为空。 |
信息提示 |
字符串 |
可选:在Android中,您可以在状态栏中显示与body 不同的文本。默认未设置,因此使用body 。 |
在... |
日期 |
可选:一个JavaScript Date对象,指示通知应显示的时间。默认未设置(通知将立即显示)。 |
徽章 |
布尔值 |
可选:在iOS(以及一些Android设备)上,您可以在应用图标顶部看到一个数字。在大多数Android设备上,您会在通知中心看到这个数字。默认未设置(0)。 |
声音 |
字符串 |
可选:通知声音。对于自定义通知声音,将文件复制到App_Resources/iOS 和App_Resources/Android/src/main/res/raw 。设置为“default”(或完全未设置)以使用默认操作系统声音。设置为null 以禁用声音。 |
间隔 |
调度间隔 调度间隔对象 |
可选:使用调度间隔 可以将一个重复的通知设置为以下之一:second 、minute 、hour 、day 、week 、month 、year ,如果是使用at 时,数字(以天为单位)。使用 调度间隔对象 是一个对象,格式为{ [调度间隔]: number } ,用于在间隔过后显示通知,并无限期重复,直到取消。注意:iOS 10+ 所需的最小间隔为60秒。 |
立即显示 |
布尔值 |
可选:当使用调度间隔对象 定义一个间隔 时,将立即显示计划中的通知。 |
图标 |
字符串 |
可选:在Android中,您可以在系统托盘设置自定义图标。传递res://filename (不带扩展名),它位于App_Resouces/Android/drawable 文件夹中。如果没有传递,我们将查找一个名为ic_stat_notify.png 的文件。默认使用应用图标。仅适用于Android < Lollipop (21)(请参阅下面的silhouetteIcon )。有关更多详细信息,请参阅图标和silhouetteIcon选项(仅限Android)。 |
轮廓图标 |
字符串 |
可选:与icon 相同,但应是一个仅包含alpha通道的图像,并将用于Android >= Lollipop (21)。默认为res://ic_stat_notify_silhouette ,如果不存在,则使用应用图标。有关更多详细信息,请参阅图标和silhouetteIcon选项(仅限Android)。 |
图像 |
字符串 |
可选:用作可展开通知图像的图像的URL。在Android中,这与bigTextStyle 互斥。 |
缩略图 |
布尔值 |
字符串 |
持续 |
布尔值 |
可选:(仅限Android)设置通知是否为持续 。持续的通知不能被用户取消,因此您的应用必须负责取消它们。 |
通道 |
字符串 |
可选:为Android API >= 26 设置通道名称,当用户长按通知时显示。默认为Channel 。 |
强制在前景显示 |
布尔值 |
可选:表示是否始终显示通知。在iOS 10以下版本中此设置将被忽略(不显示通知),在较新的Android设备上也同样被忽略(根据平台默认设置,通知始终显示)。 |
优先级 |
数字 |
可选:如果设置,将覆盖 forceShowWhenInForeground 。此选项可以设置为 2 以实现Android "heads-up" 通知。有关详细信息,请参阅 #114。默认值为 0 。 |
操作 |
NotificationAction | 可选:一个包含 NotificationAction 对象的数组,用于向通知中添加按钮或文本输入,用户可以通过这些操作与通知交互。 |
通知LED |
boolean | Color |
可选:(仅限Android)表示是否启用Android上的通知LED灯(如果设备支持),这可以是:true (如果您想使用默认颜色),或自定义颜色用于通知LED灯(如果设备支持)。默认未设置。 |
NotificationAction
属性 | 类型 | 描述 |
---|---|---|
id |
字符串 |
一个ID,以便您可以轻松地区分您的操作。 |
类型 |
'button' | 'input' |
视图的类型。 |
title |
字符串 |
可选:当 type = button 时的标签。 |
启动 |
布尔值 |
可选:当操作完成时启动应用程序。这只能在针对Android 11或更低版本的应用程序中工作(目标SDK < 31)。 |
提交标签 |
字符串 |
可选:当 type = input 时的提交按钮标签。 |
占位符 |
字符串 |
可选:当 type = input 时的占位符文本。 |
选项 |
字符串数组 |
可选:(仅限Android)对于 type = 'input' |
可编辑 |
布尔值 |
可选:(仅限Android)对于 type = 'input' 。默认为 true |
图标和轮廓图标选项(仅限Android)
这些选项默认为 res://ic_stat_notify
和 res://ic_stat_notify_silhouette
,或者如果不存在,则为应用程序图标。
这些是官方图标大小指南,以及 如何在Android上轻松创建这些图标的优秀指南。
密度限定符 | px | dpi |
---|---|---|
ldpi | 18 × 18 | 120 |
mdpi | 24 × 24 | 160 |
hdpi | 36 × 36 | 240 |
xhdpi | 48 × 48 | 320 |
xxhdpi | 72 × 72 | 480 |
xxxhdpi | 96 × 96 | 大约640。 |
来源: 密度限定符文档
addOnMessageReceivedCallback()
LocalNotifications.addOnMessageReceivedCallback((notification: ReceivedNotification) => {
//Handle the received notification
}).then(() => {
console.log('Listener added');
});
响应通知点击事件。
ReceivedNotification
属性 | 类型 | 描述 |
---|---|---|
id |
数字 |
可选:通知ID。 |
前台 |
布尔值 |
可选:当收到通知时,应用程序是否在前台。 |
title |
字符串 |
可选:通知标题。 |
body |
字符串 |
可选:通知正文。 |
事件 |
字符串 |
可选:响应是通过 button 还是 input 进行的。 |
响应 |
字符串 |
可选:用户对通知的响应,无论是他们在文本字段中输入的内容,还是从按钮中选择的选项。 |
有效载荷 |
any |
可选:与通知一起发送给用户的数据 |
addOnMessageClearedCallback()
LocalNotifications.addOnMessageClearedCallback((notification: ReceivedNotification) => {
//Handle the received notification
}).then(() => {
console.log('Listener added');
});
响应通知清除事件。有关更多信息,请参阅 ReceivedNotification。
getScheduledIds()
LocalNotifications.getScheduledIds().then((ids: number[]) => {
console.log("ID's: " + ids);
});
返回所有计划中的通知的ID。
cancel()
LocalNotifications.cancel(id).then((foundAndCanceled: boolean) => {
if (foundAndCanceled) {
//
} else {
//
}
});
取消具有指定ID的计划中的通知。
参数 | 类型 | 描述 |
---|---|---|
id |
数字 |
要取消的计划通知。 |
cancelAll()
LocalNotifications.cancelAll();
取消所有计划中的通知。
requestPermission()
LocalNotifications.requestPermission().then((granted) => {
console.log('Permission granted? ' + granted);
});
请求用户授权应用程序发送通知。您只需要在iOS上调用此方法。如果权限已经授予,则返回 true
。否则,返回 false
。
hasPermission()
LocalNotifications.hasPermission().then((granted) => {
console.log('Permission granted? ' + granted);
});
检查应用程序是否具有通知用户的权限。