- 版本:5.0.4
- GitHub: https://github.com/tylerflint/nativescript-notifications
- NPM: https://npmjs.net.cn/package/%40badideas%2Fnativescript-notifications
- 下载
- 昨天:6
- 上周:10
- 上个月:16
NativeScript 通知插件
这是 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 |
如果您想要一个重复的通知,请将其设置为second 、minute 、hour 、day 、week 、month 、year 或天数(以天为单位)。 |
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 |
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“heads-up”通知。请参阅#114获取详细信息。 |
actions |
添加一个NotificationAction 对象数组(见下文),以向通知添加按钮或文本输入。 |
notificationLed |
在Android上启用通知LED灯(如果设备支持),这可以是:true (如果您想使用默认颜色),或通知LED灯的自定义颜色(如果设备支持)。(仅限Android)。默认未设置。 |
NotificationAction
选项 | 描述 |
---|---|
id |
一个id,以便您可以轻松区分您的操作。 |
type |
可以是button 或input 。 |
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_notify
和 res://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。
如果之前运行了 requestPermission
或 schedule
函数,用户已经被提示授予权限。如果用户授予了权限,此函数返回 true
,但如果他拒绝了权限,此函数将返回 false
,因为 iOS 只能请求权限一次。在这种情况下,用户需要进入 iOS 设置应用并手动启用您应用程序的权限。
LocalNotifications.requestPermission().then((granted) => {
console.log('Permission granted? ' + granted);
});
hasPermission
在 Android 上您不需要权限,但在 iOS 上您需要。Android 将简单地返回 true。
如果之前运行了 requestPermission
或 schedule
函数,您可能想检查用户是否已授予权限
LocalNotifications.hasPermission().then((granted) => {
console.log('Permission granted? ' + granted);
});