插件
本地通知
@nativescript/local-notifications
内容
简介
一个允许您的应用在应用未运行时显示通知的插件。就像远程推送通知一样,但设置起来容易得多。
安装
在项目的根目录中运行以下命令来安装插件。
npm install @nativescript/local-notifications
使用 @nativescript/local-notifications
注意 高级!
如果在 iOS 10+
上没有收到通知或 addOnMessageReceivedCallback
方法未被调用,您可以尝试连接到 UNUserNotificationCenterDelegate
导入插件
要导入插件,请使用以下两种方法之一。
// either
import { LocalNotifications } from '@nativescript/local-notifications'
// or (if that doesn't work for you)
import * as LocalNotifications from '@nativescript/local-notifications'
请求权限
默认情况下,schedule 方法会为您提示用户进行权限授权。对于手动权限请求,请使用 requestPermission 方法
// then use it as:
LocalNotifications.requestPermission()
安排通知
要安排通知,请调用 schedule 方法并将一个通知对象的数组传递给它。有关通知对象成员的列表,请参阅 ScheduleOptions.
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: isAndroid ? 'customsound' : 'customsound.wav',
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)
}
)
获取所有已安排通知的 ID
要获取所有已安排通知的 ID,请调用 getScheduledIds 方法
LocalNotifications.getScheduledIds().then((ids: number[]) => {
console.log("ID's: " + ids)
})
取消已安排通知
要取消已安排通知,请使用 cancel 方法。
LocalNotifications.cancel(5).then((foundAndCanceled: boolean) => {
if (foundAndCanceled) {
console.log("OK, it's gone!")
} else {
console.log('No ID 5 was scheduled')
}
})
监听通知点击事件
点击通知中心中的通知将启动您的应用。
在 iOS 上,即使您的应用处于前台并收到通知,它也可以被触发。
要处理通知点击,请调用 addMessageReceivedCallback 方法并将一个回调函数传递给它。回调会接收一个类型为 ReceivedNotification 的通知对象。
LocalNotifications.addOnMessageReceivedCallback((notification) => {
console.log('ID: ' + notification.id)
console.log('Title: ' + notification.title)
console.log('Body: ' + notification.body)
}).then(() => {
console.log('Listener added')
})
API
schedule()
scheduledNotificationsIDs: Array<number> = await LocalNotifications.schedule(
scheduleOptions
)
安排指定的 scheduleOptions 通知,如果用户已授予权限。如果未提示用户进行权限授权,它会提示用户进行权限授权,并在授予权限后安排通知。对于手动权限请求,请使用 requestPermission 方法。
ScheduleOptions
属性 | 类型 | 描述 |
---|---|---|
id | number | 可选:唯一的通知标识符。如果未设置,将生成一个。 |
title | string | 可选:在状态栏中显示的标题。 |
subtitle | string | 可选:在 iOS 上显示在标题下方,在 Android 上显示在应用程序名称旁边。默认情况下未设置。所有 android 和 iOS >= 10 独有。 |
body | string | 可选:标题下方的文本。如果未提供,子标题或标题(按此顺序或优先级)将替换它,因为 iOS 不会显示没有正文的通知。在 Android 上默认情况下未设置,在 iOS 上为 ' ' ,否则通知将不会启动。 |
color | string | 可选: (Android-only )当通知中心展开时将应用于通知图标和标题的自定义颜色。 |
bigTextStyle | boolean | 可选: (Android-only )允许正文文本在通知中心中显示超过一行。与 image 相互排斥。默认值为 false 。 |
groupedMessages | Array<string> | 可选:最多包含 5 条消息的数组,这些消息将使用 android 的通知 inboxStyle 显示。注意:如果消息超过 5 条,数组将从顶部开始裁剪。默认情况下未设置。 |
groupSummary | string | 可选:inboxStyle 通知摘要。默认情况下为空 |
ticker | string | 可选:在 Android 上,您可以在状态栏中显示与 body 不同的文本。默认情况下未设置,因此使用 body 。 |
at | Date | 可选:一个 JavaScript Date 对象,表示应显示通知的时间。默认情况下未设置(通知将立即显示)。 |
badge | boolean | 可选:在 iOS(以及某些 Android 设备)上,您会在应用图标顶部看到一个数字。在大多数 Android 设备上,您会在通知中心看到此数字。默认情况下未设置 (0)。 |
sound | string | 可选:通知声音。对于自定义通知声音,请将文件复制到 App_Resources/iOS 和 App_Resources/Android/src/main/res/raw 。要使用默认的 OS 声音,请将其设置为 "default"(或根本不设置)。将其设置为 null 以抑制声音。 |
interval | ScheduleInterval | 可选:设置为 second 、minute 、hour 、day 、week 、month 、year 之一,如果您想要重复通知,则设置为数字(以天为单位)。 |
icon | string | 可选:在 Android 上,您可以在系统托盘中设置自定义图标。传入 res://filename (不带扩展名),它位于 App_Resouces/Android/drawable 文件夹中。如果未传入,我们将在此处查找名为 ic_stat_notify.png 的文件。默认情况下使用应用程序图标。仅适用于 Android < Lollipop (21)(请参阅下面的 silhouetteIcon )。有关更多详细信息,请参阅 图标和 silhouetteIcon 选项 (仅适用于 Android) |
silhouetteIcon | string | 可选:与 icon 相同,但应该是仅包含 alpha 通道的图像,并将用于 Android >= Lollipop (21)。默认值为 res://ic_stat_notify_silhouette ,如果不存在,则为应用程序图标。有关更多详细信息,请参阅 图标和 silhouetteIcon 选项 (仅适用于 Android) |
image | string | 可选:要作为可扩展通知图像使用的图像的 URL。在 Android 上,它与 bigTextStyle 相互排斥。 |
thumbnail | boolean | string | 可选: (Android-only )在 Android 通知中心(右侧)显示的自定义缩略图/图标,可以是:true (如果您想使用 image 作为缩略图),资源 URL(位于 App_Resouces/Android/drawable 文件夹中,例如:res://filename ),或者来自网络上任何位置的 http URL。默认情况下未设置。 |
ongoing | boolean | 可选: (Android-only ) 设置通知是否为 ongoing 。用户无法关闭正在进行的通知,因此您的应用程序必须负责取消它们。 |
channel | string | 可选:为 Android API >= 26 设置通道名称,该名称将在用户长按通知时显示。默认值为 Channel 。 |
forceShowWhenInForeground | boolean | 可选:指示是否始终显示通知。在 iOS < 10 上,这将被忽略(通知不会显示),在更新的 Android 上,目前也将其忽略(通知始终显示,根据平台默认设置)。 |
priority | number | 可选:如果设置,将覆盖 forceShowWhenInForeground 。这可以设置为 Android "heads-up" 通知时的 2 。有关详细信息,请参阅 #114。默认值为 0 。 |
actions | NotificationAction | 可选: 一个 NotificationAction 对象数组,用于在通知中添加按钮或文本输入,用户可以与之交互。 |
notificationLed | boolean | Color | 可选: (仅限 Android ) 指示是否在 Android 上启用通知 LED 灯(如果设备支持),可以是:true (如果要使用默认颜色),或通知 LED 灯的自定义颜色(如果设备支持)。默认未设置。 |
NotificationAction
属性 | 类型 | 描述 |
---|---|---|
id | string | 一个 ID,便于区分你的操作。 |
type | 'button' | 'input' | 视图的类型。 |
title | string | 可选: type = button 的标签。 |
launch | boolean | 可选: 在操作完成后启动应用程序。这仅适用于目标为 Android 11 或更低版本的应用程序 (target SDK < 31)。 |
submitLabel | string | 可选: type = input 的提交按钮标签。 |
placeholder | string | 可选: type = input 的占位符文本。 |
choices | Array<string> | 可选: (仅限 Android ) 适用于 type = 'input' |
editable | boolean | 可选: (仅限 Android ) 适用于 type = 'input' 。默认为 true |
图标和轮廓图标选项(仅限 Android)
这些选项默认为 res://ic_stat_notify
和 res://ic_stat_notify_silhouette
,如果不存在则为应用程序图标。
这些是官方的图标大小指南,以及 关于如何在 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()
LocalNotifications.addOnMessageReceivedCallback(
(notification: ReceivedNotification) => {
//Handle the received notification
}
).then(() => {
console.log('Listener added')
})
响应通知点击事件。
ReceivedNotification
属性 | 类型 | 描述 |
---|---|---|
id | number | 可选: 通知 ID。 |
foreground | boolean | 可选: 应用程序在收到通知时是否处于前台 |
title | string | 可选: 通知标题。 |
body | string | 可选: 通知正文。 |
event | string | 可选: 响应是通过 button 还是 input |
response | string | 可选: 用户对通知的响应,可以是他们在文本字段中输入的内容,也可以是他们从按钮中选择的选项。 |
payload | any | 可选: 与通知一起发送给用户的數據 |
addOnMessageClearedCallback()
LocalNotifications.addOnMessageClearedCallback(
(notification: ReceivedNotification) => {
//Handle the received notification
}
).then(() => {
console.log('Listener added')
})
响应通知清除事件。有关更多信息,请参阅 ReceivedNotification。
getScheduledIds()
LocalNotifications.getScheduledIds().then((ids: number[]) => {
console.log("ID's: " + ids)
})
返回所有已安排通知的 ID。
cancel()
LocalNotifications.cancel(id).then((foundAndCanceled: boolean) => {
if (foundAndCanceled) {
//
} else {
//
}
})
取消指定 ID 的已安排通知。
参数 | 类型 | 描述 |
---|---|---|
id | number | 要取消的已安排通知的 ID。 |
cancelAll()
LocalNotifications.cancelAll()
取消所有已安排的通知。
requestPermission()
LocalNotifications.requestPermission().then((granted) => {
console.log('Permission granted? ' + granted)
})
请求用户允许应用程序向其发送通知。你只需在 iOS 上调用此方法。如果权限已授予,则返回 true
。否则,返回 false
。
hasPermission()
LocalNotifications.hasPermission().then((granted) => {
console.log('Permission granted? ' + granted)
})
检查应用程序是否有权通知用户。