- 版本:5.0.3
- GitHub: https://github.com/NativeScript/plugins/tree/master
- NPM: https://npmjs.net.cn/package/%40primeboard%2Fnativescript-local-notifications
- 下载
- 昨日: 0
- 上周: 0
- 上个月: 2
@nativescript/local-notifications
本地通知插件允许您的应用程序在应用程序未运行时显示通知。就像远程推送通知一样,但设置起来要容易得多。
安装
从命令提示符进入您的应用程序根目录并执行
NativeScript 7+
ns plugin add @nativescript/local-notifications
NativeScript 7之前
tns plugin add [email protected]
设置(自插件版本 3.0.0 以来)
添加此内容,以便对于 iOS 10+,我们可以做一些连接(精确地设置 iOS UNUserNotificationCenter.delegate
)。如果您的应用程序在启动时加载插件,则不需要此操作。
如果您在 iOS 10+ 上未收到通知或 addOnMessageReceivedCallback
未被调用,则需要此操作。但最好还是小心为上。
// either
import { LocalNotifications } from '@nativescript/local-notifications';
// or (if that doesn't work for you)
import * as LocalNotifications from '@nativescript/local-notifications';
// then use it as:
LocalNotifications.hasPermission();
NativeScript-Angular
此插件是我使用 Angular 构建的一个插件展示应用程序的一部分。
此外,此存储库中还有一个简单的 Angular 示例
NativeScript-Vue
还有一个 Vue 示例
插件 API
schedule
在 iOS 上,您需要请求权限才能安排通知。您可以让 schedule
函数自动为您完成(如果用户授予了权限,则将安排通知),或者您可以手动调用 requestPermission
,如果您想这样做。
您可以为此函数传递几个选项,所有选项都是可选的
选项 | 描述 |
---|---|
id |
一个数字,以便您可以轻松区分您的通知。如果没有设置,将生成。 |
title |
显示在状态栏中的标题。默认未设置。 |
subtitle |
在 iOS 上显示在标题下方,在 Android 上显示在应用程序名称旁边。默认未设置。所有 Android 和 iOS >= 10。 |
body |
显示在标题下的文本。如果没有提供,则在 iOS 上使用此顺序或优先级将使用副标题或标题(iOS上默认为“ ”,否则通知将不会显示)。 |
color |
用于在展开通知中心时应用的通知图标和标题的自定义颜色。(仅限 Android) |
bigTextStyle |
允许在通知中心中显示超过 1 行的正文文本。与 image 互斥。默认为 false 。(仅限 Android) |
groupedMessages |
最多 5 条消息的数组,这些消息将使用 Android 通知的 inboxStyle 显示。注意:如果消息超过五条,则从顶部截断数组。默认未设置 |
groupSummary |
inboxStyle 通知摘要。默认为空 |
ticker |
在 Android 上,您可以在状态栏中显示不同的文本,而不是使用 body 。默认未设置,因此使用 body 。 |
at |
表示通知应显示时间的JavaScript日期对象。默认未设置(通知将立即显示)。 |
徽章 |
在iOS(以及一些Android设备)上,您在应用图标上方看到一个数字。在大多数Android设备上,您将在通知中心看到这个数字。默认未设置(0)。 |
声音 |
通知声音。对于自定义通知声音,请将文件复制到 App_Resources/iOS 和 App_Resources/Android/src/main/res/raw 。设置为“默认”(或根本不设置)以使用默认操作系统声音。设置为 null 以抑制声音。 |
interval |
如果要设置重复通知,请将其设置为 second 、minute 、hour 、day 、week 、month 、year 或天数(天数)。 |
图标 |
在Android上,您可以在系统托盘设置自定义图标。传入 res://filename (不包含扩展名),它位于 App_Resouces/Android/drawable 文件夹中。如果没有传入,我们将查找名为 ic_stat_notify.png 的文件。默认使用应用图标。仅限Android < Lollipop (21)(请参阅下面的 silhouetteIcon )。 |
silhouetteIcon |
与 icon 相同,但用于Android >= Lollipop (21)。应仅是透明图像。默认为 res://ic_stat_notify_silhouette ,或如果不存在,则使用应用图标。 |
image |
用作可展开通知图像的图像的URL(http.. )。在Android上,这与 bigTextStyle 互斥。 |
thumbnail |
在Android通知中心(右侧)显示的自定义缩略图/图标(仅限Android)。可以是:true (如果您想使用 image 作为缩略图),资源URL(位于 App_Resouces/Android/drawable 文件夹中,例如:res://filename ),或来自网络任何地方的http URL。(仅限Android)。默认未设置。 |
ongoing |
默认为(false )。设置是否为 ongoing 通知。持续通知无法由用户取消,因此您的应用程序必须负责取消它们。(仅限Android) |
channel |
默认为(Channel )。为Android API >= 26设置通道名称,当用户长按通知时显示。(仅限Android) |
forceShowWhenInForeground |
默认为 false 。设置为 true 以始终显示通知。请注意,在iOS < 10中此设置被忽略(通知不会显示),在新版的Android中目前也被忽略(通知始终显示,根据平台默认设置)。 |
priority |
默认为 0 。如果设置,将覆盖 forceShowWhenInForeground 。可以设置为 2 以用于Android的“抬头显示”通知。有关详细信息,请参阅#114。 |
actions |
添加一个包含 NotificationAction 对象的数组(见下文),以向通知添加按钮或文本输入。 |
notificationLed |
在Android上启用通知LED灯(如果设备支持),可以是:true (如果您想使用默认颜色),或通知LED灯的自定义颜色(如果设备支持)。(仅限Android)。默认未设置。 |
NotificationAction
选项 | 描述 |
---|---|
id |
一个id,以便您可以轻松区分您的操作。 |
type |
可以是 button 或 input 。 |
title |
当 type = button 时的标签。 |
launch |
操作完成后启动应用程序。 |
submitLabel |
当 type = input 时的提交按钮标签。 |
placeholder |
当 type = input 时的占位文本。 |
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',
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);
}
);
通知图标(Android)
这些选项默认为 res://ic_stat_notify
和 res://ic_stat_notify_silhouette
,如果没有则使用应用图标。
silhouetteIcon
应仅是透明图像,并在Android >= Lollipop (21)中使用。
这些是官方图标尺寸指南,以及如何在Android上轻松创建这些图标的优秀指南。
密度限定符 | 像素 | 每英寸点数(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
在通知中心轻触通知将启动您的应用。但如果您安排了两个通知,想知道用户点击的是哪一个怎么办?
使用此功能,当通知被用来启动您的应用时将触发回调。注意,在iOS上,即使在应用处于前台且收到通知时,此功能也会被触发。
LocalNotifications.addOnMessageReceivedCallback((notification) => {
console.log('ID: ' + notification.id);
console.log('Title: ' + notification.title);
console.log('Body: ' + notification.body);
}).then(() => {
console.log('Listener added');
});
getScheduledIds
如果您想了解所有已安排的通知的ID,请这样做
LocalNotifications.getScheduledIds().then((ids) => {
console.log("ID's: " + ids);
});
cancel
如果您想取消之前安排的通知(并且知道其ID),您可以取消它
LocalNotifications.cancel(5 /* the ID */).then((foundAndCanceled) => {
if (foundAndCanceled) {
console.log("OK, it's gone!");
} else {
console.log('No ID 5 was scheduled');
}
});
cancelAll
如果您只想取消之前安排的所有通知,请这样做
LocalNotifications.cancelAll();
requestPermission
在Android上,您不需要权限,但在iOS上您需要。Android将简单地返回true。
如果之前运行了requestPermission
或schedule
函数,用户已经被提示授予权限。如果用户授予了权限,此函数返回true
,但如果他拒绝了权限,此函数将返回false
,因为iOS只能请求权限一次。在这种情况下,用户需要进入iOS设置应用并手动为您的应用启用权限。
LocalNotifications.requestPermission().then((granted) => {
console.log('Permission granted? ' + granted);
});
hasPermission
在Android上,您不需要权限,但在iOS上您需要。Android将简单地返回true。
如果之前运行了requestPermission
或schedule
函数,您可能想要检查用户是否已授予权限
LocalNotifications.hasPermission().then((granted) => {
console.log('Permission granted? ' + granted);
});