本地通知插件
本地通知插件允许您的应用在应用未运行时显示通知。就像远程推送通知一样,但设置起来要简单得多。
npm i --save nativescript-ssi-local-notifications

NativeScript 本地通知插件

NPM version Downloads Twitter Follow

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

安装

从命令提示符进入您的应用的根文件夹并执行

tns plugin add nativescript-ssi-local-notifications

TypeScript 支持

并为您自己的 nativeScript 应用添加 TypeScript 支持

tns install typescript

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

import * as LocalNotifications from "nativescript-ssi-local-notifications";

// then use it as:
LocalNotifications.hasPermission()

演示应用(XML)

如果您想快速入门,克隆我们的演示应用

演示应用(Angular)

此插件是我使用 Angular 开发的插件展示应用的一部分。

安排

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

您可以向此函数传递几个选项,一切都是可选的

选项 描述
id 一个数字,您可以用它来轻松区分通知。默认值 0。
标题 在状态栏中显示的标题。默认为空。
正文 标题下面的文本。默认为空。
groupedMessages 最多包含 5 条消息的数组,这些消息将使用 Android 的通知 inboxStyle 显示。注意:如果消息超过五条,数组将从顶部开始裁剪。默认未设置
groupSummary inboxStyle 通知摘要。默认为空
ticker 在 Android 上,您可以在状态栏显示不同的文本,而不是 body。默认未设置,因此使用 body
at 一个 JavaScript 日期对象,表示通知应显示的时间。默认为 'now'。
badge 在 iOS(以及某些 Android 设备)上,您会在应用图标顶部看到一个数字。在大多数 Android 设备上,您会在通知中心看到这个数字。默认未设置(0)。
sound 通知声音。对于自定义通知声音,将声音文件复制到 App_Resources/iOS(iOS)和 App_Resources/Android/raw(Android)。将其设置为 "default"(或根本不设置)以使用默认操作系统声音。将其设置为 null 以抑制声音。
interval 如果您想设置重复通知,请将其设置为 second minute hour day week month quarter year 之一。
smallIcon 在 Android 上,您可以在系统托盘设置一个自定义图标。传递 'res://filename'(不带扩展名),该文件位于 App_Resouces/Android/drawable 文件夹中。如果没有传递,我们将查找名为 'ic_stat_notify.png' 的文件,位于 App_Resources/Android/drawable 文件夹中。默认:应用图标。
largeIcon smallIcon 相同,但在您展开通知中心时显示。我们查找的文件不是 'ic_stat_notify.png',而是 'ic_notify.png'。
ongoing 默认为(false)。设置此是否为持续通知。持续通知不能被用户取消,因此您的应用必须负责取消它们。(仅限Android

请注意,重启后smallIconlargeIcon不会恢复,而是回退到默认(应用图标)。这是一个已知问题,可以在未来版本中修复。

  LocalNotifications.schedule([{
id: 1,
title: 'The title',
body: 'Recurs every minute until cancelled',
ticker: 'The ticker',
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)
smallIcon: 'res://heart',
interval: 'minute',
sound: require("application").ios ? "customsound-ios.wav" : "customsound-android", // can be also `null`, "default"
at: new Date(new Date().getTime() + (10 * 1000)) // 10 seconds from now
}]).then(
function() {
console.log("Notification scheduled");
},
function(error) {
console.log("scheduling error: " + error);
}
)

通知图标

背景信息:如果您没有提供正确的尺寸的通知图标,本地通知可能会静默失败。它们可能在某些设备上运行得很好,但在其他设备上失败。这是因为Android可能会回退到您的xxxhdpi启动器图标,这个图标太大。这种类型的错误在logcat中是可见的:!!! FAILED BINDER TRANSACTION !!! (parcel size = 1435376)

ic_stat_notify.png(小图标)规范

Android API指南 → 状态栏图标

ic_notify.png(大图标)规范

不幸的是,似乎没有官方指南。无论如何,有一个dimen告诉我们dp大小,我们可以将其转换为以下规范

密度限定符 px dpi
ldpi 48 x 48 120
mdpi 64 x 64 160
hdpi 96 x 96 240
xhdpi 128 x 128 320
xxhdpi 192 x 192 480

不要包含xxxhdpi

xxxhdpi:额外超高清密度使用(仅限启动器图标,参见“支持多个屏幕”中的说明);大约640dpi。在API级别18中添加。
来源:密度限定符文档

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);
}
)

未来工作

通过在GitHub上创建问题来告诉我们您的需求。

我们正在考虑添加对以下内容的支持:

  • 在iOS上的交互式通知