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

NativeScript 本地通知插件

NPM version Downloads Twitter Follow

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

⚠️ 插件版本 4.0.0 应与 NativeScript 6+ 一起使用。如果您有较老的 tns --version,请使用较旧的插件版本。

⚠️ 查找 NativeScript 7 兼容性?请访问 NativeScript/plugins 仓库

安装

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

tns plugin add nativescript-local-notifications

设置(自插件版本 3.0.0 以来)

添加此代码以便在 iOS 10+ 中进行一些连接(精确地说,设置 iOS UNUserNotificationCenter.delegate)。如果您的应用在启动时加载插件,则不需要此操作。

如果 iOS 10+ 上的通知未由您的应用接收或 addOnMessageReceivedCallback 未被调用,则您将知道需要此操作...但为了安全起见,还是更好。

require ("nativescript-local-notifications");

现在您可以在 .ts 文件中将插件作为对象导入,如下所示

// 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-Core(XML)

此演示具有最多的选项,因此是值得检查的一个

git clone https://github.com/EddyVerbruggen/nativescript-local-notifications
cd nativescript-local-notifications/src
npm run demo.ios # or demo.android

NativeScript-Angular

此插件是我使用 Angular 构建的 插件演示应用 的一部分。

此仓库中还有一个简单的 Angular 演示

git clone https://github.com/EddyVerbruggen/nativescript-local-notifications
cd nativescript-local-notifications/src
npm run demo-ng.ios # or demo-ng.android

NativeScript-Vue

我们还有一个 Vue 演示

git clone https://github.com/EddyVerbruggen/nativescript-local-notifications
cd nativescript-local-notifications/src
npm run demo-vue.ios # or demo-vue.android

插件 API

schedule

在 iOS 上,您需要请求权限才能安排通知。您可以让 schedule 函数为您自动执行此操作(如果用户授予了权限,则将安排通知),或者您可以手动调用 requestPermission

您可以为此函数传递几个选项,所有这些都是可选的

选项 描述
id 一个数字,您可以用它轻松区分您的通知。如果未设置,将生成。
标题 显示在状态栏中的标题。默认未设置。
副标题 在 iOS 上显示在标题下方,在 Android 上显示在应用名称旁边。默认未设置。所有 Android 和 iOS >= 10。
正文 标题下方的文本。如果未提供,iOS 上将使用标题或副标题(按此顺序或优先级)替换它,因为 iOS 不会显示没有正文的推送通知。默认在 Android 上未设置,在 iOS 上为 ' ',否则通知将不会显示。
颜色 为通知图标和标题提供自定义颜色,将在通知中心展开时应用。(仅限 Android)
bigTextStyle 允许在通知中心显示正文文本的超过 1 行。与 image 互斥。默认为 false。(仅限 Android)
groupedMessages 最多5条消息的数组,这些消息将使用Android的inboxStyle显示。注意:如果消息超过五条,数组将从顶部开始修剪。默认未设置
groupSummary inboxStyle通知摘要。默认为空
ticker 在Android中,您可以在状态栏中显示与body不同的文本,而不是使用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。默认未设置。
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
标题 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: "customsound-ios.wav", // falls back to the default sound on Android
at: new Date(new Date().getTime() + (10 * 1000)) // 10 seconds from now
}]).then(
function(scheduledIds) {
console.log("Notification id(s) scheduled: " + JSON.stringify(scheduledIds));
},
function(error) {
console.log("scheduling error: " + error);
}
)

通知图标(Android)

这些选项默认为 res://ic_stat_notifyres://ic_stat_notify_silhouette,如果没有则使用应用图标。

silhouetteIcon 应该是仅包含 alpha 的图片,并将在 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(
function (notification) {
console.log("ID: " + notification.id);
console.log("Title: " + notification.title);
console.log("Body: " + notification.body);
}
).then(
function() {
console.log("Listener added");
}
)

getScheduledIds

如果您想了解所有已安排的通知的 ID,请这样做

请注意,所有函数都有错误处理器(见 schedule),但为了保持可读性,我们不会重复说明。

  LocalNotifications.getScheduledIds().then(
function(ids) {
console.log("ID's: " + ids);
}
)

cancel

如果您想取消之前安排的通知(且知道其 ID),可以取消它

  LocalNotifications.cancel(5 /* the ID */).then(
function(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(
function(granted) {
console.log("Permission granted? " + granted);
}
)

hasPermission

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

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

  LocalNotifications.hasPermission().then(
function(granted) {
console.log("Permission granted? " + granted);
}
)