@primeboard/nativescript-local-notifications
by primeboard | v5.0.3
本地通知插件允许您的应用程序在应用程序未运行时显示通知。
npm i --save @primeboard/nativescript-local-notifications

@nativescript/local-notifications

NPM version Downloads

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

安装

从命令提示符进入您的应用程序根目录并执行

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/iOSApp_Resources/Android/src/main/res/raw。设置为“默认”(或根本不设置)以使用默认操作系统声音。设置为 null 以抑制声音。
interval 如果要设置重复通知,请将其设置为 secondminutehourdayweekmonthyear 或天数(天数)。
图标 在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 可以是 buttoninput
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_notifyres://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。

如果之前运行了requestPermissionschedule函数,用户已经被提示授予权限。如果用户授予了权限,此函数返回true,但如果他拒绝了权限,此函数将返回false,因为iOS只能请求权限一次。在这种情况下,用户需要进入iOS设置应用并手动为您的应用启用权限。

LocalNotifications.requestPermission().then((granted) => {
console.log('Permission granted? ' + granted);
});

hasPermission

在Android上,您不需要权限,但在iOS上您需要。Android将简单地返回true。

如果之前运行了requestPermissionschedule函数,您可能想要检查用户是否已授予权限

LocalNotifications.hasPermission().then((granted) => {
console.log('Permission granted? ' + granted);
});