@capacitor/local-notifications
Local Notifications API 提供了一种在本地安排设备通知的方式(即无需服务器发送推送通知)。
安装
npm install @capacitor/local-notifications@latest-5
npx cap sync
Android
Android 13 需要权限检查才能发送通知。您需要相应地调用 checkPermissions()
和 requestPermissions()
。
在 Android 12 及更早版本上,不会显示提示,只会返回已授予状态。
从 Android 12 开始,除非在 AndroidManifest.xml
中添加以下权限,否则计划通知将不精确:
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
请注意,即使存在该权限,用户仍可以从应用设置中禁用精确通知。
配置
在 Android 上,可以使用以下选项配置 Local Notifications:
属性 | 类型 | 描述 | 始于 |
---|---|---|---|
smallIcon | string | 设置通知的默认状态栏图标。图标应放置在应用的 res/drawable 文件夹中。此选项的值应为可绘制资源 ID,即不带扩展名的文件名。仅适用于 Android。 | 1.0.0 |
iconColor | string | 设置通知状态栏图标的默认颜色。仅适用于 Android。 | 1.0.0 |
sound | string | 设置通知的默认提示音。在 Android 26+ 上,它设置默认通道声音,除非卸载应用,否则无法更改。如果找不到音频文件,Android 21-25 将播放默认系统声音,Android 26+ 则没有声音。仅适用于 Android。 | 1.0.0 |
示例
在 capacitor.config.json
中:
{
"plugins": {
"LocalNotifications": {
"smallIcon": "ic_stat_icon_config_sample",
"iconColor": "#488AFF",
"sound": "beep.wav"
}
}
}
在 capacitor.config.ts
中:
/// <reference types="@capacitor/local-notifications" />
import { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
plugins: {
LocalNotifications: {
smallIcon: 'ic_stat_icon_config_sample',
iconColor: '#488AFF',
sound: 'beep.wav',
},
},
};
export default config;
休眠(Doze)模式
如果设备已进入休眠(Doze)模式,您的应用可能会受到功能限制。如果您需要即使在休眠模式下也能触发通知,请使用 allowWhileIdle: true
来安排通知。请谨慎使用 allowWhileIdle
,因为这些通知每个应用每 9 分钟只能触发一次。
API
schedule(...)
getPending()
registerActionTypes(...)
cancel(...)
areEnabled()
getDeliveredNotifications()
removeDeliveredNotifications(...)
removeAllDeliveredNotifications()
createChannel(...)
deleteChannel(...)
listChannels()
checkPermissions()
requestPermissions()
addListener('localNotificationReceived', ...)
addListener('localNotificationActionPerformed', ...)
removeAllListeners()
- 接口
- 类型别名
- 枚举
schedule(...)
schedule(options: ScheduleOptions) => Promise<ScheduleResult>
安排一个或多个本地通知。
参数 | 类型 |
---|---|
options |
|
返回:
Promise<ScheduleResult>
始于: 1.0.0
getPending()
getPending() => Promise<PendingResult>
获取待处理通知列表。
返回:
Promise<PendingResult>
始于: 1.0.0
registerActionTypes(...)
registerActionTypes(options: RegisterActionTypesOptions) => Promise<void>
注册显示通知时要执行的操作。
仅适用于 iOS 和 Android。
参数 | 类型 |
---|---|
options |
|
始于: 1.0.0
cancel(...)
cancel(options: CancelOptions) => Promise<void>
取消待处理的通知。
参数 | 类型 |
---|---|
options |
|
始于: 1.0.0
areEnabled()
areEnabled() => Promise<EnabledResult>
检查通知是否已启用。
返回:
Promise<EnabledResult>
始于: 1.0.0
getDeliveredNotifications()
getDeliveredNotifications() => Promise<DeliveredNotifications>
获取通知屏幕上可见的通知列表。
返回:
Promise<DeliveredNotifications>
始于: 4.0.0
removeDeliveredNotifications(...)
removeDeliveredNotifications(delivered: DeliveredNotifications) => Promise<void>
从通知屏幕中移除指定的通知。
参数 | 类型 |
---|---|
delivered |
|
始于: 4.0.0
removeAllDeliveredNotifications()
removeAllDeliveredNotifications() => Promise<void>
从通知屏幕中移除所有通知。
始于: 4.0.0
createChannel(...)
createChannel(channel: Channel) => Promise<void>
创建通知通道。
仅适用于 Android。
参数 | 类型 |
---|---|
channel |
|
始于: 1.0.0
deleteChannel(...)
deleteChannel(args: { id: string; }) => Promise<void>
删除通知通道。
仅适用于 Android。
参数 | 类型 |
---|---|
args | { id: string; } |
始于: 1.0.0
listChannels()
listChannels() => Promise<ListChannelsResult>
获取通知通道列表。
仅适用于 Android。
返回:
Promise<ListChannelsResult>
始于: 1.0.0
checkPermissions()
checkPermissions() => Promise<PermissionStatus>
检查显示本地通知的权限。
返回:
Promise<PermissionStatus>
始于: 1.0.0
requestPermissions()
requestPermissions() => Promise<PermissionStatus>
请求显示本地通知的权限。
返回:
Promise<PermissionStatus>
始于: 1.0.0
addListener('localNotificationReceived', ...)
addListener(eventName: 'localNotificationReceived', listenerFunc: (notification: LocalNotificationSchema) => void) => Promise<PluginListenerHandle> & PluginListenerHandle
监听通知显示事件。
参数 | 类型 |
---|---|
eventName | 'localNotificationReceived' |
listenerFunc |
|
返回:
Promise<PluginListenerHandle> & PluginListenerHandle
始于: 1.0.0
addListener('localNotificationActionPerformed', ...)
addListener(eventName: 'localNotificationActionPerformed', listenerFunc: (notificationAction: ActionPerformed) => void) => Promise<PluginListenerHandle> & PluginListenerHandle
监听通知上的操作执行事件。
参数 | 类型 |
---|---|
eventName | 'localNotificationActionPerformed' |
listenerFunc |
|
返回:
Promise<PluginListenerHandle> & PluginListenerHandle
始于: 1.0.0
removeAllListeners()
removeAllListeners() => Promise<void>
移除此插件的所有监听器。
始于: 1.0.0
接口
ScheduleResult
属性 | 类型 | 描述 | 始于 |
---|---|---|---|
notifications | LocalNotificationDescriptor[] | 已安排的通知列表。 | 1.0.0 |
LocalNotificationDescriptor
描述本地通知的对象。
属性 | 类型 | 描述 | 始于 |
---|---|---|---|
id | number | 通知标识符。 | 1.0.0 |
ScheduleOptions
属性 | 类型 | 描述 | 始于 |
---|---|---|---|
notifications | LocalNotificationSchema[] | 要安排的通知列表。 | 1.0.0 |
LocalNotificationSchema
属性 | 类型 | 描述 | 始于 |
---|---|---|---|
title | string | 通知标题。 | 1.0.0 |
body | string | 通知正文,显示在标题下方。 | 1.0.0 |
largeBody | string | 设置大文本通知样式中显示的多行文本块。 | 1.0.0 |
summaryText | string | 用于在收件箱和大文本通知样式中设置摘要文本详细信息。仅适用于 Android。 | 1.0.0 |
id | number | 通知标识符。在 Android 上为 32 位整数,因此值应在 -2147483648 到 2147483647 之间(含)。 | 1.0.0 |
schedule |
| 安排此通知在稍后时间触发。 | 1.0.0 |
sound | string | 显示此通知时播放的音频文件名。包含文件扩展名。在 iOS 上,文件应位于应用包中。在 Android 上,文件应位于 res/raw 文件夹中。推荐使用 .wav 格式,因为 iOS 和 Android 都支持。仅适用于 iOS 和 Android < 26。对于 Android 26+,请使用配置了所需声音的 channelId。如果找不到声音文件(例如空字符串或错误名称),将使用默认系统通知声音。如果未提供,Android 上将产生默认声音,iOS 上则没有声音。 | 1.0.0 |
smallIcon | string | 设置自定义状态栏图标。如果设置,将覆盖 Capacitor 配置中的 smallIcon 选项。图标应放置在应用的 res/drawable 文件夹中。此选项的值应为可绘制资源 ID,即不带扩展名的文件名。仅适用于 Android。 | 1.0.0 |
largeIcon | string | 设置通知的大图标。图标应放置在应用的 res/drawable 文件夹中。此选项的值应为可绘制资源 ID,即不带扩展名的文件名。仅适用于 Android。 | 1.0.0 |
iconColor | string | 设置通知图标的颜色。仅适用于 Android。 | 1.0.0 |
attachments | Attachment[] | 设置此通知的附件。 | 1.0.0 |
actionTypeId | string | 将此通知与操作类型关联。 | 1.0.0 |
extra | any | 设置存储在此通知中的额外数据。 | 1.0.0 |
threadIdentifier | string | 用于分组多个通知。在 UNMutableNotificationContent 上设置 threadIdentifier 。仅适用于 iOS。 | 1.0.0 |
summaryArgument | string | 此通知添加到类别摘要格式字符串中的字符串。在 UNMutableNotificationContent 上设置 summaryArgument 。仅适用于 iOS。 | 1.0.0 |
group | string | 用于分组多个通知。在 NotificationCompat.Builder 上调用 setGroup() 并传入提供的值。仅适用于 Android。 | 1.0.0 |
groupSummary | boolean | 如果为 true,此通知将成为一组通知的摘要。在 NotificationCompat.Builder 上调用 setGroupSummary() 并传入提供的值。仅适用于 Android 且在使用 group 时。 | 1.0.0 |
channelId | string | 指定通知应传递的通道。如果不存在具有给定名称的通道,则通知不会触发。如果未提供,将使用默认通道。在 NotificationCompat.Builder 上调用 setChannelId() 并传入提供的值。仅适用于 Android 26+。 | 1.0.0 |
ongoing | boolean | 如果为 true,通知无法被滑动清除。在 NotificationCompat.Builder 上调用 setOngoing() 并传入提供的值。仅适用于 Android。 | 1.0.0 |
autoCancel | boolean | 如果为 true,用户点击通知时通知会被取消。在 NotificationCompat.Builder 上调用 setAutoCancel() 并传入提供的值。仅适用于 Android。 | 1.0.0 |
inboxList | string[] | 设置在收件箱样式的通知中显示的字符串列表。最多允许 5 个字符串。仅适用于 Android。 | 1.0.0 |
Schedule
表示通知的安排。
使用 at
、on
或 every
来安排通知。
属性 | 类型 | 描述 | 始于 |
---|---|---|---|
at |
| 安排在特定日期和时间触发通知。 | 1.0.0 |
repeats | boolean | 在 at 指定的日期和时间重复传递此通知。仅适用于 iOS 和 Android。 | 1.0.0 |
allowWhileIdle | boolean | 允许此通知在休眠(Doze)模式下触发。仅适用于 Android 23+。请注意,这些通知每个应用每 9 分钟只能触发一次。 | 1.0.0 |
on |
| 安排在特定间隔触发通知。这类似于安排 cron 作业。仅适用于 iOS 和 Android。 | 1.0.0 |
every |
| 安排在特定间隔触发通知。 | 1.0.0 |
count | number | 限制通过 every 指定的间隔传递通知的次数。 | 1.0.0 |
Date
支持日期和时间的基本存储和检索。
方法 | 签名 | 描述 |
---|---|---|
toString | () => string | 返回日期的字符串表示形式。字符串的格式取决于区域设置。 |
toDateString | () => string | 以字符串值返回日期。 |
toTimeString | () => string | 以字符串值返回时间。 |
toLocaleString | () => string | 返回适 合主机环境当前区域设置的字符串值。 |
toLocaleDateString | () => string | 返回适合主机环境当前区域设置的日期字符串值。 |
toLocaleTimeString | () => string | 返回适合主机环境当前区域设置的时间字符串值。 |
valueOf | () => number | 返回存储的时间值,即自 1970 年 1 月 1 日 UTC 午夜以来的毫秒数。 |
getTime | () => number | 获取毫秒为单位的时间值。 |
getFullYear | () => number | 使用本地时间获取年份。 |
getUTCFullYear | () => number | 使用协调世界时 (UTC) 获取年份。 |
getMonth | () => number | 使用本地时间获取月份。 |
getUTCMonth | () => number | 使用协调世界时 (UTC) 获取 Date 对象的月份。 |
getDate | () => number | 使用本地时间获取月中的第几天。 |
getUTCDate | () => number | 使用协调世界时 (UTC) 获取月中的第几天。 |
getDay | () => number | 使用本地时间获取星期几。 |
getUTCDay | () => number | 使用协调世界时 (UTC) 获取星期几。 |
getHours | () => number | 使用本地时间获取日期中的小时数。 |
getUTCHours | () => number | 使用协调世界时 (UTC) 获取 Date 对象的小时值。 |
getMinutes` | () => number | 使用本地时间获取 Date 对象的分钟数 。 |
getUTCMinutes | () => number | 使用协调世界时 (UTC) 获取 Date 对象的分钟数。 |
getSeconds | () => number | 使用本地时间获取 Date 对象的秒数。 |
getUTCSeconds | () => number | 使用协调世界时 (UTC) 获取 Date 对象的秒数。 |
getMilliseconds | () => number | 使用本地时间获取 Date 的毫秒数。 |
getUTCMilliseconds | () => number | 使用协调世界时 (UTC) 获取 Date 对象的毫秒数。 |
getTimezoneOffset | () => number | 获取本地计算机时间与协调世界时 (UTC) 之间的分钟差。 |
setTime | (time: number) => number | 设置 Date 对象中的日期和时间值。 |
setMilliseconds | (ms: number) => number | 使用本地时间设置 Date 对象中的毫秒值。 |
setUTCMilliseconds | (ms: number) => number | 使用协调世界时 (UTC) 设置 Date 对象中的毫秒值。 |
setSeconds | (sec: number, ms?: number | undefined) => number | 使用本地时间设置 Date 对象中的秒值。 |
setUTCSeconds | (sec: number, ms?: number | undefined) => number | 使用协调世界时 (UTC) 设置 Date 对象中的秒值。 |
setMinutes | (min: number, sec?: number | undefined, ms?: number | undefined) => number | 使用本地时间设置 Date 对象中的分钟值。 |
setUTCMinutes | (min: number, sec?: number | undefined, ms?: number | undefined) => number | 使用协调世界时 (UTC) 设置 Date 对象中的分钟值。 |
setHours | (hours: number, min?: number | undefined, sec?: number | undefined, ms?: number | undefined) => number | 使用本地时间设置 Date 对象中的小时值。 |
setUTCHours | (hours: number, min?: number | undefined, sec?: number | undefined, ms?: number | undefined) => number | 使用协调世界时 (UTC) 设置 Date 对象中的小时值。 |
setDate | (date: number) => number | 使用本地时间设置 Date 对象中的月中日期数值。 |
setUTCDate | (date: number) => number | 使用协调世界时 (UTC) 设置 Date 对象中的月中日期。 |
setMonth | (month: number, date?: number | undefined) => number | 使用本地时间设置 Date 对象中的月份值。 |
setUTCMonth | (month: number, date?: number | undefined) => number | 使用协调世界时 (UTC) 设置 Date 对象中的月份值。 |
setFullYear | (year: number, month?: number | undefined, date?: number | undefined) => number | 使用本地时间设置 Date 对象的年份。 |
setUTCFullYear | (year: number, month?: number | undefined, date?: number | undefined) => number | 使用协调世界时 (UTC) 设置 Date 对象中的年份值。 |
toUTCString | () => string | 使用协调世界时 (UTC) 返回转换为字符串的日期。 |
toISOString | () => string | 以 ISO 格式返回日期字符串值。 |
toJSON | (key?: any) => string | 由 JSON.stringify 方法使用,以启用对象数据的 JavaScript 对象表示法 (JSON) 序列化。 |
ScheduleOn
属性 | 类型 |
---|---|
year | number |
month | number |
day | number |
weekday |
|
hour | number |
minute | number |
second | number |
Attachment
表示通知附件。