8.7 发布—WinterCG 合规性第 1 部分
了解更多

在 GitHub 上查看

@nativescript/local-notifications

内容

简介

NPM versionDownloads

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

安装

在项目的根目录中运行以下命令来安装插件。

cli
npm install @nativescript/local-notifications

使用 @nativescript/local-notifications

注意 高级!

如果在 iOS 10+ 上没有收到通知或 addOnMessageReceivedCallback 方法未被调用,您可以尝试连接到 UNUserNotificationCenterDelegate

导入插件

要导入插件,请使用以下两种方法之一。

ts
// either
import { LocalNotifications } from '@nativescript/local-notifications'
// or (if that doesn't work for you)
import * as LocalNotifications from '@nativescript/local-notifications'

请求权限

默认情况下,schedule 方法会为您提示用户进行权限授权。对于手动权限请求,请使用 requestPermission 方法

typescript
// then use it as:
LocalNotifications.requestPermission()

安排通知

要安排通知,请调用 schedule 方法并将一个通知对象的数组传递给它。有关通知对象成员的列表,请参阅 ScheduleOptions.

js
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 方法

ts
LocalNotifications.getScheduledIds().then((ids: number[]) => {
  console.log("ID's: " + ids)
})

取消已安排通知

要取消已安排通知,请使用 cancel 方法。

ts
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 的通知对象。

js
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()

ts
scheduledNotificationsIDs: Array<number> = await LocalNotifications.schedule(
  scheduleOptions
)

安排指定的 scheduleOptions 通知,如果用户已授予权限。如果未提示用户进行权限授权,它会提示用户进行权限授权,并在授予权限后安排通知。对于手动权限请求,请使用 requestPermission 方法。


ScheduleOptions

属性类型描述
idnumber可选:唯一的通知标识符。如果未设置,将生成一个。
titlestring可选:在状态栏中显示的标题。
subtitlestring可选:在 iOS 上显示在标题下方,在 Android 上显示在应用程序名称旁边。默认情况下未设置。所有 android 和 iOS >= 10 独有。
bodystring可选:标题下方的文本。如果未提供,子标题或标题(按此顺序或优先级)将替换它,因为 iOS 不会显示没有正文的通知。在 Android 上默认情况下未设置,在 iOS 上为 ' ',否则通知将不会启动。
colorstring可选: (Android-only)当通知中心展开时将应用于通知图标和标题的自定义颜色。
bigTextStyleboolean可选: (Android-only)允许正文文本在通知中心中显示超过一行。与 image 相互排斥。默认值为 false
groupedMessagesArray<string>可选:最多包含 5 条消息的数组,这些消息将使用 android 的通知 inboxStyle 显示。注意:如果消息超过 5 条,数组将从顶部开始裁剪。默认情况下未设置。
groupSummarystring可选inboxStyle 通知摘要。默认情况下为空
tickerstring可选:在 Android 上,您可以在状态栏中显示与 body 不同的文本。默认情况下未设置,因此使用 body
atDate可选:一个 JavaScript Date 对象,表示应显示通知的时间。默认情况下未设置(通知将立即显示)。
badgeboolean可选:在 iOS(以及某些 Android 设备)上,您会在应用图标顶部看到一个数字。在大多数 Android 设备上,您会在通知中心看到此数字。默认情况下未设置 (0)。
soundstring可选:通知声音。对于自定义通知声音,请将文件复制到 App_Resources/iOSApp_Resources/Android/src/main/res/raw。要使用默认的 OS 声音,请将其设置为 "default"(或根本不设置)。将其设置为 null 以抑制声音。
intervalScheduleInterval可选:设置为 secondminutehourdayweekmonthyear 之一,如果您想要重复通知,则设置为数字(以天为单位)。
iconstring可选:在 Android 上,您可以在系统托盘中设置自定义图标。传入 res://filename(不带扩展名),它位于 App_Resouces/Android/drawable 文件夹中。如果未传入,我们将在此处查找名为 ic_stat_notify.png 的文件。默认情况下使用应用程序图标。仅适用于 Android < Lollipop (21)(请参阅下面的 silhouetteIcon)。有关更多详细信息,请参阅 图标和 silhouetteIcon 选项 (仅适用于 Android)
silhouetteIconstring可选:与 icon 相同,但应该是仅包含 alpha 通道的图像,并将用于 Android >= Lollipop (21)。默认值为 res://ic_stat_notify_silhouette,如果不存在,则为应用程序图标。有关更多详细信息,请参阅 图标和 silhouetteIcon 选项 (仅适用于 Android)
imagestring可选:要作为可扩展通知图像使用的图像的 URL。在 Android 上,它与 bigTextStyle 相互排斥。
thumbnailboolean | string可选: (Android-only)在 Android 通知中心(右侧)显示的自定义缩略图/图标,可以是:true(如果您想使用 image 作为缩略图),资源 URL(位于 App_Resouces/Android/drawable 文件夹中,例如:res://filename),或者来自网络上任何位置的 http URL。默认情况下未设置。
ongoingboolean可选: (Android-only) 设置通知是否为 ongoing。用户无法关闭正在进行的通知,因此您的应用程序必须负责取消它们。
channelstring可选:为 Android API >= 26 设置通道名称,该名称将在用户长按通知时显示。默认值为 Channel
forceShowWhenInForegroundboolean可选:指示是否始终显示通知。在 iOS < 10 上,这将被忽略(通知不会显示),在更新的 Android 上,目前也将其忽略(通知始终显示,根据平台默认设置)。
prioritynumber可选:如果设置,将覆盖 forceShowWhenInForeground。这可以设置为 Android "heads-up" 通知时的 2。有关详细信息,请参阅 #114。默认值为 0
actionsNotificationAction可选: 一个 NotificationAction 对象数组,用于在通知中添加按钮或文本输入,用户可以与之交互。
notificationLedboolean | Color可选: (仅限 Android) 指示是否在 Android 上启用通知 LED 灯(如果设备支持),可以是:true(如果要使用默认颜色),或通知 LED 灯的自定义颜色(如果设备支持)。默认未设置。

NotificationAction

属性类型描述
idstring一个 ID,便于区分你的操作。
type'button' | 'input'视图的类型。
titlestring可选: type = button 的标签。
launchboolean可选: 在操作完成后启动应用程序。这仅适用于目标为 Android 11 或更低版本的应用程序 (target SDK < 31)。
submitLabelstring可选: type = input 的提交按钮标签。
placeholderstring可选: type = input 的占位符文本。
choicesArray<string>可选: (仅限 Android) 适用于 type = 'input'
editableboolean可选: (仅限 Android) 适用于 type = 'input'。默认为 true

图标和轮廓图标选项(仅限 Android)

这些选项默认为 res://ic_stat_notifyres://ic_stat_notify_silhouette,如果不存在则为应用程序图标。

这些是官方的图标大小指南,以及 关于如何在 Android 上轻松创建这些图标的优秀指南

密度限定符pxdpi
ldpi18 × 18120
mdpi24 × 24160
hdpi36 × 36240
xhdpi48 × 48320
xxhdpi72 × 72480
xxxhdpi96 × 96约 640。

来源: 密度限定符文档

addOnMessageReceivedCallback()

js
LocalNotifications.addOnMessageReceivedCallback(
  (notification: ReceivedNotification) => {
    //Handle the received notification
  }
).then(() => {
  console.log('Listener added')
})

响应通知点击事件。

ReceivedNotification

属性类型描述
idnumber可选: 通知 ID。
foregroundboolean可选: 应用程序在收到通知时是否处于前台
titlestring可选: 通知标题。
bodystring可选: 通知正文。
eventstring可选: 响应是通过 button 还是 input
responsestring可选: 用户对通知的响应,可以是他们在文本字段中输入的内容,也可以是他们从按钮中选择的选项。
payloadany可选: 与通知一起发送给用户的數據

addOnMessageClearedCallback()

js
LocalNotifications.addOnMessageClearedCallback(
  (notification: ReceivedNotification) => {
    //Handle the received notification
  }
).then(() => {
  console.log('Listener added')
})

响应通知清除事件。有关更多信息,请参阅 ReceivedNotification


getScheduledIds()

js
LocalNotifications.getScheduledIds().then((ids: number[]) => {
  console.log("ID's: " + ids)
})

返回所有已安排通知的 ID。


cancel()

js
LocalNotifications.cancel(id).then((foundAndCanceled: boolean) => {
  if (foundAndCanceled) {
    //
  } else {
    //
  }
})

取消指定 ID 的已安排通知。

参数类型描述
idnumber要取消的已安排通知的 ID。

cancelAll()

js
LocalNotifications.cancelAll()

取消所有已安排的通知。


requestPermission()

js
LocalNotifications.requestPermission().then((granted) => {
  console.log('Permission granted? ' + granted)
})

请求用户允许应用程序向其发送通知。你只需在 iOS 上调用此方法。如果权限已授予,则返回 true。否则,返回 false


hasPermission()

js
LocalNotifications.hasPermission().then((granted) => {
  console.log('Permission granted? ' + granted)
})

检查应用程序是否有权通知用户。

下一个
本地化