@nativescript/local-notifications
本地通知插件允许您的应用在不运行时显示通知。
npm i --save @nativescript/local-notifications

@nativescript/local-notifications

内容

简介

NPM version Downloads

这是一个允许您的应用在不运行时显示通知的插件。就像远程推送通知一样,但设置起来要容易得多。

安装

在您项目的根目录中运行以下命令来安装插件。

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/iOSApp_Resources/Android/src/main/res/raw。设置为“default”(或完全未设置)以使用默认操作系统声音。设置为null以禁用声音。
间隔 调度间隔 调度间隔对象 可选:使用调度间隔可以将一个重复的通知设置为以下之一:secondminutehourdayweekmonthyear,如果是使用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_notifyres://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);
});

检查应用程序是否具有通知用户的权限。