- 版本:3.2.1
- GitHub:https://github.com/simplec-dev/nativescript-local-notifications
- NPM:https://npmjs.net.cn/package/nativescript-ssi-local-notifications
- 下载
- 昨天:0
- 上周:11
- 上个月:28
NativeScript 本地通知插件
本地通知插件允许您的应用在应用未运行时显示通知。就像远程推送通知一样,但设置起来要简单得多。
安装
从命令提示符进入您的应用的根文件夹并执行
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) |
请注意,重启后smallIcon
和largeIcon
不会恢复,而是回退到默认(应用图标)。这是一个已知问题,可以在未来版本中修复。
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(小图标)规范
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。
如果requestPermission
或schedule
函数之前已运行,则用户已经被提示授予权限。如果用户授予了权限,此函数返回true
,但如果他拒绝了权限,则此函数将返回false
,因为iOS只能请求一次权限。在这种情况下,用户需要转到iOS设置应用并手动启用应用的权限。
LocalNotifications.requestPermission().then(
function(granted) {
console.log("Permission granted? " + granted);
}
)
hasPermission
在Android上,您不需要权限,但在iOS上需要。Android将简单地返回true。
如果之前已运行requestPermission
或schedule
函数,您可能想检查用户是否已授予权限。
LocalNotifications.hasPermission().then(
function(granted) {
console.log("Permission granted? " + granted);
}
)
未来工作
通过在GitHub上创建问题来告诉我们您的需求。
我们正在考虑添加对以下内容的支持:
- 在iOS上的交互式通知