@badideas/nativescript-notifications
在您的应用内创建通知
npm i --save @badideas/nativescript-notifications

NativeScript 通知插件

NPM version Downloads

这是 Nativescript Local Notifications 插件的分支。此项目的最终目标将是一个用于管理本地和推送通知的综合性插件,无需两个不同的包和修改 iOS 的共享代理。

在其当前状态下,此插件允许您的应用在应用内显示通知。

安装

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

NativeScript 7+

ns plugin add @badideas/nativescript-notifications

7 之前的 NativeScript

tns plugin add [email protected]

设置(自插件版本 3.0.0 起使用)

添加此代码,以便对于 iOS 10+,我们可以做一些连接(精确地说,设置 iOS 的 UNUserNotificationCenter.delegate)。如果您的应用已经在启动时加载了插件,则不需要此操作。

如果 iOS 10+ 上的通知未被您的应用接收或 addOnMessageReceivedCallback 未被调用,则您需要此操作...虽然如此,但为了保险起见,最好还是这样做!

// either
import { LocalNotifications } from '@badideas/nativescript-notifications';
// or (if that doesn't work for you)
import * as LocalNotifications from '
@badideas/nativescript-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 不显示没有正文的通知。在 Android 上默认未设置,在 iOS 上为 ' ',否则通知将根本不会显示。
color 自定义通知图标和标题的颜色,当通知中心展开时将应用此颜色。(仅限 Android)
bigTextStyle 允许在通知中心显示多行正文文本。与 image 互斥。默认为 false。(仅限 Android)
groupedMessages 最多5条消息的数组,这些消息将通过Android的通知inboxStyle显示。注意:如果消息超过五条,数组将从顶部开始截断。默认未设置
groupSummary 一个inboxStyle通知摘要。默认为空
ticker 在Android中,您可以在状态栏显示不同的文本,而不是body。默认未设置,因此使用body
at 一个JavaScript Date对象,指示何时显示通知。默认未设置(通知将立即显示)。
badge 在iOS(以及一些Android设备)上,您会在应用图标上方看到一个数字。在大多数Android设备上,您将在通知中心看到这个数字。默认未设置(0)。
sound 通知声音。对于自定义通知声音(仅限iOS),将文件复制到App_Resources/iOS。设置为“default”(或完全未设置)以使用默认操作系统声音。设置为null以抑制声音。
interval 如果您想要一个重复的通知,请将其设置为secondminutehourdayweekmonthyear或天数(以天为单位)。
icon 在Android中,您可以在系统托盘设置一个自定义图标。传递res://filename(不带扩展名),该文件位于App_Resouces/Android/drawable文件夹中。如果没有传递,我们将寻找一个名为ic_stat_notify.png的文件。默认情况下,使用应用图标。仅限Android < Lollipop(21)(请参阅下面的silhouetteIcon)。
silhouetteIcon icon相同,但适用于Android >= Lollipop(21)。应仅是alpha图像。默认为res://ic_stat_notify_silhouette,或如果不存在,则使用应用图标。
image URLhttp..)用于作为可展开通知图像的图像。在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“heads-up”通知。请参阅#114获取详细信息。
actions 添加一个NotificationAction对象数组(见下文),以向通知添加按钮或文本输入。
notificationLed 在Android上启用通知LED灯(如果设备支持),这可以是:true(如果您想使用默认颜色),或通知LED灯的自定义颜色(如果设备支持)。(仅限Android)。默认未设置。

NotificationAction

选项 描述
id 一个id,以便您可以轻松区分您的操作。
type 可以是buttoninput
title 标签为 type = button
启动 动作完成后启动应用程序。
submitLabel type = input 时的提交按钮标签。
占位符 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: 'customsound-ios.wav', // falls back to the default sound on Android
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 上轻松创建这些图标的好指南这里有一个关于如何在 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

在通知中心点击通知将启动您的应用程序。但如果有两个计划的通知,您想知道用户点击了哪一个呢?

使用此函数以在通知被用来启动您的应用程序时调用回调。请注意,在 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);
});

取消

如果您想取消之前计划的通知(并且知道其 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);
});