This is documentation for the next SDK version. For up-to-date documentation, see the latest version (SDK 55).
Expo 通知
一个提供 API,用于获取推送通知令牌,以及展示、调度、接收和响应通知的库。
For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.
expo-notifications 提供了用于获取推送通知令牌,以及展示、安排、接收和响应通知的 API。
不要错过我们关于如何设置、发送和处理推送通知的指南。
expo-notifications提供的推送通知(远程通知)功能在 Android 上的 Expo Go 中自 SDK 53 起不可用。使用推送通知需要 开发构建。本地通知(应用内通知)在 Expo Go 中仍然可用。
功能
- 为特定日期或从现在起的某个时间安排一次性通知
- 以某个时间间隔安排重复通知(或在 iOS 上按日历日期匹配)
- 获取并设置应用角标图标数字
- 获取原生设备推送令牌,以便你可以使用 FCM(适用于 Android)和 APNs(适用于 iOS)发送推送通知
- 获取 Expo 推送令牌,以便你可以使用 Expo Push Service 发送推送通知
- 监听前台和后台中的传入通知
- 监听与通知的交互
- 在应用处于前台时处理通知
- 以编程方式从通知中心/托盘中移除通知
- 创建、更新和删除 Android 通知渠道
- 为 Android 上的通知设置自定义图标和颜色
安装
- npx expo install expo-notificationsIf you are installing this in an existing React Native app, make sure to install expo in your project.
然后继续进行配置,以设置配置插件并 获取推送通知所需的凭据。
已知问题 Android
当从推送通知启动应用时,在 Android 开发构建 中,约 70% 的情况下启动闪屏可能无法正确显示。图标和淡入动画可能不会按预期出现。
- 图标可能缺失
- 淡入动画可能不运行
- 可能只会短暂闪现背景颜色
此问题仅影响调试构建,不会在发布构建中出现。作为临时解决方案,请在发布模式下测试通知启动(npx expo run:android --variant release),以获得准确的行为表现。
用法
查看下面的示例 Snack,了解 Notifications 的实际效果,务必使用真机进行测试。推送通知在模拟器/仿真器上无法工作。
import { useState, useEffect, useRef } from 'react'; import { Text, View, Button, Platform } from 'react-native'; import * as Device from 'expo-device'; import * as Notifications from 'expo-notifications'; import Constants from 'expo-constants'; Notifications.setNotificationHandler({ handleNotification: async () => ({ shouldPlaySound: false, shouldSetBadge: false, shouldShowBanner: true, shouldShowList: true, }), }); export default function App() { const [expoPushToken, setExpoPushToken] = useState(''); const [channels, setChannels] = useState<Notifications.NotificationChannel[]>([]); const [notification, setNotification] = useState<Notifications.Notification | undefined>( undefined ); useEffect(() => { registerForPushNotificationsAsync().then(token => token && setExpoPushToken(token)); if (Platform.OS === 'android') { Notifications.getNotificationChannelsAsync().then(value => setChannels(value ?? [])); } const notificationListener = Notifications.addNotificationReceivedListener(notification => { setNotification(notification); }); const responseListener = Notifications.addNotificationResponseReceivedListener(response => { console.log(response); }); return () => { notificationListener.remove(); responseListener.remove(); }; }, []); return ( <View style={{ flex: 1, alignItems: 'center', justifyContent: 'space-around', }}> <Text>你的 expo 推送令牌:{expoPushToken}</Text> <Text>{`Channels: ${JSON.stringify( channels.map(c => c.id), null, 2 )}`}</Text> <View style={{ alignItems: 'center', justifyContent: 'center' }}> <Text>标题:{notification && notification.request.content.title} </Text> <Text>正文:{notification && notification.request.content.body}</Text> <Text>数据:{notification && JSON.stringify(notification.request.content.data)}</Text> </View> <Button title="按下以安排通知" onPress={async () => { await schedulePushNotification(); }} /> </View> ); } async function schedulePushNotification() { await Notifications.scheduleNotificationAsync({ content: { title: "You've got mail! 📬", body: '这里是通知正文', data: { data: 'goes here', test: { test1: 'more data' } }, }, trigger: { type: Notifications.SchedulableTriggerInputTypes.TIME_INTERVAL, seconds: 2, }, }); } async function registerForPushNotificationsAsync() { let token; if (Platform.OS === 'android') { await Notifications.setNotificationChannelAsync('myNotificationChannel', { name: '显示权限提示所需的渠道', importance: Notifications.AndroidImportance.MAX, vibrationPattern: [0, 250, 250, 250], lightColor: '#FF231F7C', }); } if (Device.isDevice) { const { status: existingStatus } = await Notifications.getPermissionsAsync(); let finalStatus = existingStatus; if (existingStatus !== 'granted') { const { status } = await Notifications.requestPermissionsAsync(); finalStatus = status; } if (finalStatus !== 'granted') { alert('获取推送通知令牌失败!'); return; } // 进一步了解 projectId: // https://docs.expo.dev/push-notifications/push-notifications-setup/#configure-projectid // 这里使用的是 EAS projectId。 try { const projectId = Constants?.expoConfig?.extra?.eas?.projectId ?? Constants?.easConfig?.projectId; if (!projectId) { throw new Error('未找到 Project ID'); } token = ( await Notifications.getExpoPushTokenAsync({ projectId, }) ).data; console.log(token); } catch (e) { token = `${e}`; } } else { alert('推送通知必须使用真机'); } return token; }
向用户展示本地(应用内)通知
import * as Notifications from 'expo-notifications'; // 首先,设置将使通知 // 显示提醒的处理器 Notifications.setNotificationHandler({ handleNotification: async () => ({ shouldPlaySound: false, shouldSetBadge: false, shouldShowBanner: true, shouldShowList: true, }), }); // 然后,调用 scheduleNotificationAsync() Notifications.scheduleNotificationAsync({ content: { title: '看看这个通知', body: '我真为自己感到骄傲!', }, trigger: null, });
使用导航处理推送通知
如果你希望在收到推送通知时深度链接到应用中的某个特定屏幕,可以配置 Expo 的任一导航系统来实现。
你可以使用 Expo Router 内置的深度链接来处理来自推送通知的传入 URL。只需配置根布局以监听传入和初始通知事件即可。
import { useEffect } from 'react'; import * as Notifications from 'expo-notifications'; import { router } from 'expo-router'; function useNotificationObserver() { useEffect(() => { function redirect(notification: Notifications.Notification) { const url = notification.request.content.data?.url; if (typeof url === 'string') { router.push(url); } } const response = Notifications.getLastNotificationResponse(); if (response?.notification) { redirect(response.notification); } const subscription = Notifications.addNotificationResponseReceivedListener(response => { redirect(response.notification); }); return () => { subscription.remove(); }; }, []); } export default function Layout() { useNotificationObserver(); return <Slot />; }
React Navigation 的手动链接配置可以配置为处理来自推送通知的传入重定向:
import React from 'react'; import { Linking } from 'react-native'; import * as Notifications from 'expo-notifications'; import { NavigationContainer } from '@react-navigation/native'; export default function App() { return ( <NavigationContainer linking={{ config: { // 链接配置 }, async getInitialURL() { // 首先,你可能想先执行默认的深度链接处理 // 检查应用是否通过深度链接打开 const url = await Linking.getInitialURL(); if (url != null) { return url; } // 处理来自 expo 推送通知的 URL const response = Notifications.getLastNotificationResponse(); return response?.notification.request.content.data.url; }, subscribe(listener) { const onReceiveURL = ({ url }: { url: string }) => listener(url); // 监听来自深度链接的传入链接 const eventListenerSubscription = Linking.addEventListener('url', onReceiveURL); // 监听 expo 推送通知 const subscription = Notifications.addNotificationResponseReceivedListener(response => { const url = response.notification.request.content.data.url; // 任何用于判断是否需要处理该 URL 的自定义逻辑 //... // 让 React Navigation 处理该 URL listener(url); }); return () => { // 清理事件监听器 eventListenerSubscription.remove(); subscription.remove(); }; }, }}> {/* 你的应用内容 */} </NavigationContainer> ); }
查看 React Navigation 文档了解更多细节。
配置
凭据
请遵循设置指南。
应用配置
要配置 expo-notifications,请在应用配置(app.json 或 app.config.js)中使用内置的 config plugin,用于 EAS Build 或通过 npx expo run:[android|ios]。该插件允许你配置以下在运行时无法设置、且需要构建新的应用二进制文件才能生效的属性:
Configurable properties
| Name | Default | Description |
|---|---|---|
icon | - | Only for: Android 用于推送通知图标的图片本地路径。96x96 的全白 png,带透明背景。 |
color | #ffffff | Only for: Android 通知栏中显示推送通知图片时的着色颜色。 |
defaultChannel | - | Only for: Android FCMv1 通知的默认频道。 |
sounds | - | 可用作自定义通知声音的本地声音文件路径数组(建议使用 .wav)。当专注模式不允许或静音模式开启时,将不会播放声音。 |
enableBackgroundRemoteNotifications | false | Only for: iOS 是否启用后台远程通知,如 Apple 文档 所述。这会更新 |
下面是一个在应用配置文件中使用该配置插件的示例:
{ "expo": { "plugins": [ [ "expo-notifications", { "icon": "./local/assets/notification_icon.png", "color": "#ffffff", "defaultChannel": "default", "sounds": [ "./local/assets/notification_sound.wav", "./local/assets/notification_sound_other.wav" ], "enableBackgroundRemoteNotifications": false } ] ] } }
iOS APNs entitlement 始终设置为 'development'。Xcode 会在发布构建生成的归档中自动将其改为 'production'。 了解更多。
Are you using this library in an existing React Native app?
了解如何在 expo-notifications 仓库中的安装说明 中配置原生项目。
权限
Android
-
在 Android 上,此模块需要订阅设备启动的权限。它用于在设备(重新)启动时设置计划通知。
RECEIVE_BOOT_COMPLETED权限会通过该库的 AndroidManifest.xml 自动添加。 -
从 Android 12(API level 31)开始,要在精确时间触发通知,你需要在 AndroidManifest.xml 中添加
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>。 阅读有关精确闹钟权限的更多内容。 -
在 Android 13 上,应用用户必须通过操作系统自动触发的权限提示选择接收通知。 在至少创建一个通知频道之前,不会显示此提示。必须在
getDevicePushTokenAsync或getExpoPushTokenAsync之前调用setNotificationChannelAsync才能获取推送令牌。你可以在 官方文档 中阅读更多关于 Android 13 新通知权限行为的信息。
| Android Permission | Description |
|---|---|
Allows an application to receive the Intent.ACTION_BOOT_COMPLETED that is broadcast after the system finishes booting.
| |
Allows applications to use exact alarm APIs. |
iOS
不需要使用说明,请参见与通知相关的权限。
解释 iOS 权限响应
在 iOS 上,发送通知的权限比 Android 更细粒度。这就是为什么你应当依赖 NotificationPermissionsStatus 的 ios.status 字段,而不是根级 status 字段。
此值将是以下之一,可在 Notifications.IosAuthorizationStatus 下访问:
NOT_DETERMINED:用户尚未就应用是否被允许安排通知做出选择DENIED:应用未被授权安排或接收通知AUTHORIZED:应用被授权安排或接收通知PROVISIONAL:应用被临时授权发布不打扰用户的通知EPHEMERAL:应用被授权在有限时间内安排或接收通知
通知事件监听器
通知事件包括传入通知、用户对通知执行的交互(这可以是点击通知,或通过通知类别与之交互),以及通知可能被丢弃的少数情况。
在 推送通知行为 部分中公开并记录了多个监听器。
无头(后台)通知
要在应用处于后台或未运行时处理通知,你需要执行以下操作:
然后发送一个满足以下条件的推送通知:
- 只包含
data键(不包含title、body) - 在 iOS 上设置
_contentAvailable: true—— 见 Expo 推送通知服务负载格式
后台通知配置 iOS
要在 iOS 上使用无头(后台)通知推送通知,应用的 Info.plist 文件中的 UIBackgroundModes 数组里需要包含 remote-notification 值。
如果你使用的是 CNG,请将配置插件的 enableBackgroundRemoteNotifications 属性 设置为 true,预构建会自动应用正确的配置。
在 iOS 上手动配置 UIBackgroundModes
如果你没有使用 Continuous Native Generation(CNG)或者你正在使用原生 iOS 项目,那么你需要将以下内容添加到你的 Expo.plist 文件中:
<key>UIBackgroundModes</key> <array> <string>remote-notification</string> </array>
附加信息
设置自定义通知声音
要为应用添加自定义推送通知声音,请将 expo-notifications 插件添加到你的 app.json 文件中,然后在 sounds 键下提供一个可用作自定义通知声音的本地声音文件路径数组。这些本地路径相对于你的项目而言是本地路径。
{ "expo": { "plugins": [ [ "expo-notifications", { "sounds": ["local/path/to/mySoundFile.wav"] } ] ] } }
构建应用后,这个文件数组将在 NotificationContentInput 和 NotificationChannelInput 中都可用。
你只需要提供基础文件名。下面是使用上述配置的示例:
await Notifications.setNotificationChannelAsync('new_emails', { name: '电子邮件通知', importance: Notifications.AndroidImportance.HIGH, sound: 'mySoundFile.wav', // 仅提供基础文件名 }); await Notifications.scheduleNotificationAsync({ content: { title: "You've got mail! 📬", sound: 'mySoundFile.wav', // 仅提供基础文件名 }, trigger: { type: Notifications.SchedulableTriggerInputTypes.TIME_INTERVAL, seconds: 2, channelId: 'new_emails', }, });
如果你愿意,也可以手动将通知文件添加到你的 Android 和 iOS 项目中:
在 Android 上手动添加通知声音
在 Android 8.0+ 上,为通知播放自定义声音不仅仅是为 NotificationContentInput 设置 sound 属性那么简单。
你还需要用合适的 sound 配置 NotificationChannel,并在发送/安排通知时使用它。
要让下面的示例生效,你需要将 email_sound.wav 文件放在 android/app/src/main/res/raw/ 中。
// 准备通知频道 await Notifications.setNotificationChannelAsync('new_emails', { name: '电子邮件通知', importance: Notifications.AndroidImportance.HIGH, sound: 'email_sound.wav', // <- 对于 Android 8.0+,见下面的 channelId 属性 }); // 例如:安排通知 await Notifications.scheduleNotificationAsync({ content: { title: "You've got mail! 📬", body: '打开通知即可阅读全部内容', sound: 'email_sound.wav', // <- 对于 Android 8.0 以下 }, trigger: { type: Notifications.SchedulableTriggerInputTypes.TIME_INTERVAL, seconds: 2, channelId: 'new_emails', // <- 对于 Android 8.0+,见上面的定义 }, });
在 iOS 上手动添加通知声音
在 iOS 上,只需将声音文件放入你的 Xcode 项目中(见下方截图),然后在 NotificationContentInput 中指定该声音文件即可,如下所示:
await Notifications.scheduleNotificationAsync({ content: { title: "You've got mail! 📬", body: '打开通知即可阅读全部内容', sound: 'notification.wav', }, trigger: { // ... }, });
推送通知负载规范
请参阅消息请求格式。
管理用于交互式通知的通知类别
通知类别允许你创建交互式推送通知,从而让用户可以直接通过按钮或文本回复来响应传入通知。类别定义了用户可以执行的一组操作,然后通过在 NotificationContent 中指定 categoryIdentifier 将这些操作应用到通知上。
在 iOS 上,通知类别还允许你进一步自定义通知。对于每个类别,不仅可以设置用户可执行的交互式操作,还可以配置诸如当用户为你的应用禁用通知预览时显示的占位文本等内容。
平台特定指南
处理通知渠道 Android 8+
从 Android 8.0(API 级别 26)开始,所有通知都必须分配到一个渠道。对于每个渠道, 你可以设置适用于该渠道中所有通知的视觉和听觉行为。 然后,用户可以更改这些设置,并决定你应用中的哪些通知渠道应该具有干扰性,或者是否根本可见, 正如 Android 开发者文档 所述。
如果你没有指定通知渠道,expo-notifications 会为你创建一个回退渠道,名为 Miscellaneous。
我们建议你始终为应用配置带有说明性名称的合适渠道,并始终将通知发送到这些渠道。
对于不支持此功能的平台(Android 8.0(26)以下版本和 iOS),调用这些方法不会有任何作用。
自定义通知图标和颜色 Android
你可以通过使用 Expo Prebuild 和 expo-notifications 配置插件 来在项目中配置通知的 icon 和 color 键。这些都是构建时设置,因此你需要使用 eas build -p android 或 npx expo run:android 重新编译原生 Android 应用才能看到更改。
对于通知图标,请确保遵循 Google 的设计指南 (图标必须为纯白色且背景透明),否则它可能不会按预期显示。
你还可以在 NotificationContentInput 中通过 color 属性直接为每条通知单独设置自定义通知颜色。
API
import * as Notifications from 'expo-notifications';
获取推送通知的令牌
| Parameter | Type | Description |
|---|---|---|
| listener | PushTokenListener | A function accepting a push token as an argument, it will be called whenever the push token changes. |
In rare situations, a push token may be changed by the push notification service while the app is running. When a token is rolled, the old one becomes invalid and sending notifications to it will fail. A push token listener will let you handle this situation gracefully by registering the new token with your backend right away.
EventSubscriptionAn EventSubscription object represents the subscription of the provided listener.
Example
import React from 'react'; import * as Notifications from 'expo-notifications'; import { registerDevicePushTokenAsync } from '../api'; export default function App() { React.useEffect(() => { const subscription = Notifications.addPushTokenListener(registerDevicePushTokenAsync); return () => subscription.remove(); }, []); return ( // Your app content ); }
Returns a native FCM, APNs token or a PushSubscription data
that can be used with another push notification service.
Promise<DevicePushToken>| Parameter | Type | Description |
|---|---|---|
| options(optional) | ExpoPushTokenOptions | Object allowing you to pass in push notification configuration. Default: {} |
Returns an Expo token that can be used to send a push notification to the device using Expo's push notifications service.
This method makes requests to the Expo's servers. It can get rejected in cases where the request itself fails
(for example, due to the device being offline, experiencing a network timeout, or other HTTPS request failures).
To provide offline support to your users, you should try/catch this method and implement retry logic to attempt
to get the push token later, once the device is back online.
For Expo's backend to be able to send notifications to your app, you will need to provide it with push notification keys. For more information, see credentials in the push notifications setup.
Promise<ExpoPushToken>Returns a Promise that resolves to an object representing acquired push token.
Example
import * as Notifications from 'expo-notifications'; export async function registerForPushNotificationsAsync(userId: string) { const expoPushToken = await Notifications.getExpoPushTokenAsync({ projectId: 'your-project-id', }); await fetch('https://example.com/', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ userId, expoPushToken, }), }); }
监听通知事件
| Parameter | Type | Description |
|---|---|---|
| listener | (event: Notification) => void | A function accepting a notification ( |
Listeners registered by this method will be called whenever a notification is received while the app is running.
EventSubscriptionAn EventSubscription object represents the subscription of the provided listener.
Example
import React from 'react'; import * as Notifications from 'expo-notifications'; export default function App() { React.useEffect(() => { const subscription = Notifications.addNotificationReceivedListener(notification => { console.log(notification); }); return () => subscription.remove(); }, []); return ( // Your app content ); }
| Parameter | Type | Description |
|---|---|---|
| listener | (event: NotificationResponse) => void | A function accepting notification response ( |
Listeners registered by this method will be called whenever a user interacts with a notification (for example, taps on it).
EventSubscriptionAn EventSubscription object represents the subscription of the provided listener.
Example
import React from 'react'; import { Linking } from 'react-native'; import * as Notifications from 'expo-notifications'; export default function Container() { React.useEffect(() => { const subscription = Notifications.addNotificationResponseReceivedListener(response => { const url = response.notification.request.content.data.url; Linking.openURL(url); }); return () => subscription.remove(); }, []); return ( // Your app content ); }
| Parameter | Type | Description |
|---|---|---|
| listener | () => void | A callback function. |
Listeners registered by this method will be called whenever some notifications have been dropped by the server.
Applicable only to Firebase Cloud Messaging which we use as a notifications service on Android. It corresponds to onDeletedMessages() callback.
More information can be found in Firebase docs.
EventSubscriptionAn EventSubscription object represents the subscription of the provided listener.
A React hook which returns the notification response that was received most recently (a notification response designates an interaction with a notification, such as tapping on it).
To clear the last notification response, use clearLastNotificationResponseAsync().
If you don't want to use a hook, you can use
Notifications.getLastNotificationResponseAsync()instead.
MaybeNotificationResponseThe hook may return one of these three types/values:
undefined- until we're sure of what to return,null- if no notification response has been received yet,- a
NotificationResponseobject - if a notification response was received.
Example
Responding to a notification tap by opening a URL that could be put into the notification's data
(opening the URL is your responsibility and is not a part of the expo-notifications API):
import * as Notifications from 'expo-notifications'; import { Linking } from 'react-native'; export default function App() { const lastNotificationResponse = Notifications.useLastNotificationResponse(); React.useEffect(() => { if ( lastNotificationResponse && lastNotificationResponse.notification.request.content.data.url && lastNotificationResponse.actionIdentifier === Notifications.DEFAULT_ACTION_IDENTIFIER ) { Linking.openURL(lastNotificationResponse.notification.request.content.data.url); } }, [lastNotificationResponse]); return ( // Your app content ); }
当应用运行时展示传入通知
| Parameter | Type | Description |
|---|---|---|
| handler | NotificationHandler | null | A single parameter which should be either |
When a notification is received while the app is running, using this function you can set a callback that will decide whether the notification should be shown to the user or not.
When a notification is received, handleNotification is called with the incoming notification as an argument.
The function should respond with a behavior object within 3 seconds, otherwise, the notification will be discarded.
If the notification is handled successfully, handleSuccess is called with the identifier of the notification,
otherwise (or on timeout) handleError will be called.
The default behavior when the handler is not set or does not respond in time is not to show the notification.
voidExample
import * as Notifications from 'expo-notifications'; Notifications.setNotificationHandler({ handleNotification: async () => ({ shouldShowBanner: true, shouldShowList: true, shouldPlaySound: false, shouldSetBadge: false, }), });
响应传入通知时运行 JavaScript
| Parameter | Type | Description |
|---|---|---|
| taskName | string | The string you passed to |
Call registerTaskAsync to set a callback (task) that runs when a notification is received while the app is in foreground, background, or terminated.
Only on Android, the task also runs in response to a notification action tap when the app is backgrounded or terminated.
When the app is terminated, only a Headless Background Notification triggers the task execution.
However, the OS may decide not to deliver the notification to your app in some cases (e.g. when the device is in Doze mode on Android, or when you send too many notifications - Apple recommends to not "send more than two or three per hour").
Under the hood, this function is run using expo-task-manager. You must define the task first, with TaskManager.defineTask and register it with registerTaskAsync.
Make sure you define and register the task in the module scope of a JS module which is required early by your app (e.g. in the index.ts file) - see this example.
expo-task-manager loads your app's JS bundle in the background and executes the task, as well as any side effects which may happen as a consequence of requiring any JS modules.
The callback function you define with TaskManager.defineTask receives an object with the following fields:
data: The remote payload delivered by either FCM (Android) or APNs (iOS). SeeNotificationTaskPayloadfor details.executionInfo: JSON object of additional info related to the task, including thetaskName.error: This field should always be undefined with a push-notification task.
From the callback function, you may return a BackgroundNotificationResult value to indicate the result of a background fetch operation on iOS.
Be advised that console.log statements may not be appropriate for debugging background tasks, as the output may not be visible depending on the platform and app state.
Promise<null>Example
import * as TaskManager from 'expo-task-manager'; import * as Notifications from 'expo-notifications'; const BACKGROUND_NOTIFICATION_TASK = 'BACKGROUND-NOTIFICATION-TASK'; TaskManager.defineTask<Notifications.NotificationTaskPayload>(BACKGROUND_NOTIFICATION_TASK, ({ data, executionInfo, error }) => { console.log('Received a notification task payload!'); const isNotificationResponse = 'actionIdentifier' in data; if (isNotificationResponse) { // Do something with the notification response from user } else { // Do something with the data from notification that was received } return BackgroundNotificationResult.NoData }); Notifications.registerTaskAsync(BACKGROUND_NOTIFICATION_TASK);
| Parameter | Type | Description |
|---|---|---|
| taskName | string | The string you passed to |
Used to unregister tasks registered with registerTaskAsync method.
Promise<null>获取与通知相关的权限信息
Calling this function checks current permissions settings related to notifications. It lets you verify whether the app is currently allowed to display alerts, play sounds, etc. There is no user-facing effect of calling this.
Promise<NotificationPermissionsStatus>It returns a Promise resolving to an object represents permission settings (NotificationPermissionsStatus).
On iOS, make sure you properly interpret the permissions response.
Example
import * as Notifications from 'expo-notifications'; export async function allowsNotificationsAsync() { const settings = await Notifications.getPermissionsAsync(); return ( settings.granted || settings.ios?.status === Notifications.IosAuthorizationStatus.PROVISIONAL ); }
| Parameter | Type | Description |
|---|---|---|
| permissions(optional) | NotificationPermissionsRequest | An object representing configuration for the request scope. |
Prompts the user for notification permissions according to request. Request defaults to asking the user to allow displaying alerts, setting badge count and playing sounds.
Promise<NotificationPermissionsStatus>It returns a Promise resolving to an object represents permission settings (NotificationPermissionsStatus).
On iOS, make sure you properly interpret the permissions response.
Example
import * as Notifications from 'expo-notifications'; export function requestPermissionsAsync() { return Notifications.requestPermissionsAsync({ ios: { allowAlert: true, allowBadge: true, allowSound: true, }, }); }
管理应用角标图标
Fetches the number currently set as the badge of the app icon on device's home screen. A 0 value means that the badge is not displayed.
Note: Not all Android launchers support application badges. If the launcher does not support icon badges, the method will always resolve to
0.
Promise<number>Returns a Promise resolving to a number that represents the current badge of the app icon.
| Parameter | Type | Description |
|---|---|---|
| badgeCount | number | The count which should appear on the badge. A value of |
| options(optional) | SetBadgeCountOptions | An object of options configuring behavior applied. |
Sets the badge of the app's icon to the specified number. Setting it to 0 clears the badge. On iOS, this method requires that you have requested
the user's permission for allowBadge via requestPermissionsAsync,
otherwise it will automatically return false.
Note: Not all Android launchers support application badges. If the launcher does not support icon badges, the method will resolve to
false.
Promise<boolean>It returns a Promise resolving to a boolean representing whether the setting of the badge succeeded.
安排通知
Cancels all scheduled notifications.
Promise<void>A Promise that resolves once all the scheduled notifications are successfully canceled, or if there are no scheduled notifications.
| Parameter | Type | Description |
|---|---|---|
| identifier | string | The notification identifier with which |
Cancels a single scheduled notification. The scheduled notification of given ID will not trigger.
Promise<void>A Promise resolves once the scheduled notification is successfully canceled or if there is no scheduled notification for a given identifier.
Example
import * as Notifications from 'expo-notifications'; async function scheduleAndCancel() { const identifier = await Notifications.scheduleNotificationAsync({ content: { title: 'Hey!', }, trigger: { seconds: 60, repeats: true }, }); await Notifications.cancelScheduledNotificationAsync(identifier); }
Fetches information about all scheduled notifications.
Promise<NotificationRequest[]>Returns a Promise resolving to an array of objects conforming to the Notification interface.
| Parameter | Type | Description |
|---|---|---|
| trigger | SchedulableNotificationTriggerInput | The schedulable notification trigger you would like to check next trigger date for (of type |
Allows you to check what will be the next trigger date for given notification trigger input.
Promise<number | null>If the return value is null, the notification won't be triggered. Otherwise, the return value is the Unix timestamp in milliseconds
at which the notification will be triggered.
Example
import * as Notifications from 'expo-notifications'; async function logNextTriggerDate() { try { const nextTriggerDate = await Notifications.getNextTriggerDateAsync({ hour: 9, minute: 0, }); console.log(nextTriggerDate === null ? 'No next trigger date' : new Date(nextTriggerDate)); } catch (e) { console.warn(`Couldn't have calculated next trigger date: ${e}`); } }
| Parameter | Type | Description |
|---|---|---|
| request | NotificationRequestInput | An object describing the notification to be triggered. |
Schedules a notification to be triggered in the future.
Note: This does not mean that the notification will be presented when it is triggered. For the notification to be presented you have to set a notification handler with
setNotificationHandlerthat will return an appropriate notification behavior. For more information see the example below.
Promise<string>Returns a Promise resolving to a string which is a notification identifier you can later use to cancel the notification or to identify an incoming notification.
Example
Schedule the notification that will trigger once, in one minute from now
import * as Notifications from 'expo-notifications'; Notifications.scheduleNotificationAsync({ content: { title: "Time's up!", body: 'Change sides!', }, trigger: { type: Notifications.SchedulableTriggerInputTypes.TIME_INTERVAL, seconds: 60, }, });
Schedule the notification that will trigger repeatedly, every 20 minutes
import * as Notifications from 'expo-notifications'; Notifications.scheduleNotificationAsync({ content: { title: 'Remember to drink water!', }, trigger: { type: Notifications.SchedulableTriggerInputTypes.TIME_INTERVAL, seconds: 60 * 20, repeats: true, }, });
Schedule the notification that will trigger once, at the beginning of next hour
import * as Notifications from 'expo-notifications'; const date = new Date(Date.now() + 60 * 60 * 1000); date.setMinutes(0); date.setSeconds(0); Notifications.scheduleNotificationAsync({ content: { title: 'Happy new hour!', }, trigger: { type: Notifications.SchedulableTriggerInputTypes.DATE, date }, });
关闭通知
Removes all application's notifications displayed in the notification tray (Notification Center).
Promise<void>A Promise which resolves once the request to dismiss the notifications is successfully dispatched to the notifications manager.
| Parameter | Type | Description |
|---|---|---|
| notificationIdentifier | string | The notification identifier, obtained either via |
Removes notification displayed in the notification tray (Notification Center).
Promise<void>A Promise which resolves once the request to dismiss the notification is successfully dispatched to the notifications manager.
Fetches information about all notifications present in the notification tray (Notification Center).
This method is not supported on Android below 6.0 (API level 23) – on these devices it will resolve to an empty array.
Promise<Notification[]>A Promise which resolves with a list of notifications (Notification) currently present in the notification tray (Notification Center).
管理通知渠道(Android 特定)
| Parameter | Type | Description |
|---|---|---|
| channelId | string | The channel identifier. |
Removes the notification channel.
Promise<void>A Promise which resolving once the channel is removed (or if there was no channel for given identifier).
| Parameter | Type | Description |
|---|---|---|
| groupId | string | The channel group identifier. |
Removes the notification channel group and all notification channels that belong to it.
Promise<void>A Promise which resolves once the channel group is removed (or if there was no channel group for given identifier).
| Parameter | Type | Description |
|---|---|---|
| channelId | string | The channel's identifier. |
Fetches information about a single notification channel.
Promise<NotificationChannel | null>A Promise which resolves to the channel object (of type NotificationChannel) or to null
if there was no channel found for this identifier. On platforms that do not support notification channels, it will always resolve to null.
| Parameter | Type | Description |
|---|---|---|
| groupId | string | The channel group's identifier. |
Fetches information about a single notification channel group.
Promise<NotificationChannelGroup | null>A Promise which resolves to the channel group object (of type NotificationChannelGroup)
or to null if there was no channel group found for this identifier. On platforms that do not support notification channels,
it will always resolve to null.
Fetches information about all known notification channel groups.
Promise<NotificationChannelGroup[]>A Promise which resoles to an array of channel groups. On platforms that do not support notification channel groups, it will always resolve to an empty array.
Fetches information about all known notification channels.
Promise<NotificationChannel[]>A Promise which resolves to an array of channels. On platforms that do not support notification channels, it will always resolve to an empty array.
| Parameter | Type | Description |
|---|---|---|
| channelId | string | The channel identifier. |
| channel | NotificationChannelInput | Object representing the channel's configuration. |
Assigns the channel configuration to a channel of a specified name (creating it if need be). This method lets you assign given notification channel to a notification channel group.
Note: After a channel has been created, you can modify only its name and description. This limitation is imposed by the Android OS.
Note: For some settings to be applied on all Android versions, it may be necessary to duplicate the configuration across both a single notification and its respective notification channel.
For example, for a notification to play a custom sound on Android versions below 8.0,
the custom notification sound has to be set on the notification (through the NotificationContentInput),
and for the custom sound to play on Android versions above 8.0, the relevant notification channel must have the custom sound configured
(through the NotificationChannelInput). For more information,
see Set custom notification sounds on Android.
Promise<NotificationChannel | null>A Promise which resolving to the object (of type NotificationChannel) describing the modified channel
or to null if the platform does not support notification channels.
| Parameter | Type | Description |
|---|---|---|
| groupId | string | The channel group's identifier. |
| group | NotificationChannelGroupInput | Object representing the channel group configuration. |
Assigns the channel group configuration to a channel group of a specified name (creating it if need be).
Promise<NotificationChannelGroup | null>A Promise resolving to the object (of type NotificationChannelGroup)
describing the modified channel group or to null if the platform does not support notification channels.
管理通知分类(交互式通知)
| Parameter | Type | Description |
|---|---|---|
| identifier | string | Identifier initially provided to |
Deletes the category associated with the provided identifier.
Promise<boolean>A Promise which resolves to true if the category was successfully deleted, or false if it was not.
An example of when this method would return false is if you try to delete a category that doesn't exist.
Fetches information about all known notification categories.
Promise<NotificationCategory[]>A Promise which resolves to an array of NotificationCategorys. On platforms that do not support notification channels,
it will always resolve to an empty array.
| Parameter | Type | Description |
|---|---|---|
| identifier | string | A string to associate as the ID of this category. You will pass this string in as the
|
| actions | NotificationAction[] | An array of |
| options(optional) | NotificationCategoryOptions | An optional object of additional configuration options for your category. |
Sets the new notification category.
Promise<NotificationCategory>A Promise which resolves to the category you just have created.
Constants
Methods
Clears the notification response that was received most recently. May be used when an app selects a route based on the notification response, and it is undesirable to continue selecting the route after the response has already been handled.
If a component is using the useLastNotificationResponse hook,
this call will also clear the value returned by the hook.
voidDeprecated: Use
clearLastNotificationResponseinstead.
Clears the notification response that was received most recently. May be used when an app selects a route based on the notification response, and it is undesirable to continue selecting the route after the response has already been handled.
If a component is using the useLastNotificationResponse hook,
this call will also clear the value returned by the hook.
Promise<void>A promise that resolves if the native call was successful.
Gets the notification response that was received most recently (a notification response designates an interaction with a notification, such as tapping on it).
null- if no notification response has been received yet- a
NotificationResponseobject - if a notification response was received
NotificationResponse | nullDeprecated: Use
getLastNotificationResponseinstead.
Gets the notification response received most recently (a notification response designates an interaction with a notification, such as tapping on it).
null- if no notification response has been received yet- a
NotificationResponseobject - if a notification response was received
Promise<NotificationResponse | null>| Parameter | Type | Description |
|---|---|---|
| topic | string | The topic name to subscribe to. |
Subscribes the device to a push notification topic. This allows the device to receive notifications sent to that topic.
Promise<null>a Promise which resolves to null once the device is subscribed to the topic.
Promise<void>| Parameter | Type | Description |
|---|---|---|
| topic | string | The topic name to unsubscribe from. |
Unsubscribes the device from a push notification topic. The device will no longer receive notifications sent to that topic.
Promise<null>a Promise which resolves to null once the device is unsubscribed from the topic.
Interfaces
| Property | Type | Description |
|---|---|---|
| contentType | AndroidAudioContentType | - |
| flags | {
enforceAudibility: boolean,
requestHardwareAudioVideoSynchronization: boolean
} | - |
| usage | AndroidAudioUsage | - |
Extends: Region
A region used to detect the presence of iBeacon devices. Based on Core Location CLBeaconRegion class.
| Property | Type | Description |
|---|---|---|
| beaconIdentityConstraint(optional) | {
major: number | null,
minor: number | null,
uuid: string
} | The beacon identity constraint that defines the beacon region. |
| major | number | null | The major value from the beacon identity constraint that defines the beacon region. |
| minor | number | null | The minor value from the beacon identity constraint that defines the beacon region. |
| notifyEntryStateOnDisplay | boolean | A Boolean value that indicates whether Core Location sends beacon notifications when the device’s display is on. |
| type | 'beacon' | - |
| uuid(optional) | string | The UUID value from the beacon identity constraint that defines the beacon region. |
A trigger related to a UNCalendarNotificationTrigger.
| Property | Type | Description |
|---|---|---|
| dateComponents | {
calendar: string,
day: number,
era: number,
hour: number,
isLeapMonth: boolean,
isRepeatedDay: boolean,
minute: number,
month: number,
nanosecond: number,
quarter: number,
second: number,
timeZone: string,
weekday: number,
weekdayOrdinal: number,
weekOfMonth: number,
weekOfYear: number,
year: number,
yearForWeekOfYear: number
} | - |
| repeats | boolean | - |
| type | 'calendar' | - |
Extends: Region
A circular geographic region, specified as a center point and radius. Based on Core Location CLCircularRegion class.
| Property | Type | Description |
|---|---|---|
| center | {
latitude: number,
longitude: number
} | The center point of the geographic area. |
| radius | number | The radius (measured in meters) that defines the geographic area’s outer boundary. |
| type | 'circular' | - |
A trigger related to a daily notification.
The same functionality will be achieved on iOS with a
CalendarNotificationTrigger.
| Property | Type | Description |
|---|---|---|
| hour | number | - |
| minute | number | - |
| type | 'daily' | - |
A subscription object that allows to conveniently remove an event listener from the emitter.
Object which contains the Expo push token in the data field. Use the value from data to send notifications via Expo Notifications service.
| Property | Type | Description |
|---|---|---|
| data | string | The acquired push token. |
| type | 'expo' | Always set to |
| Property | Type | Description |
|---|---|---|
| applicationId(optional) | string | The ID of the application to which the token should be attributed.
Defaults to |
| baseUrl(optional) | string | Endpoint URL override. |
| development(optional) | boolean | Only for: iOS On iOS, there are two push notification services: "sandbox" and "production".
This defines whether the push token is supposed to be used with the sandbox platform notification service.
Defaults to |
| deviceId(optional) | string | - |
| devicePushToken(optional) | DevicePushToken | The device push token with which to register at the backend.
Defaults to a token fetched with |
| projectId(optional) | string | The ID of the project to which the token should be attributed.
Defaults to When using EAS Build, this value is automatically set. However, it is
recommended to set it manually. Once you have EAS Build configured, you can find
the value in app.json under |
| type(optional) | string | Request body override. |
| url(optional) | string | Request URL override. |
A Firebase RemoteMessage that caused the notification to be delivered to the app.
| Property | Type | Description |
|---|---|---|
| collapseKey | string | null | - |
| data | Record<string, string> | - |
| from | string | null | - |
| messageId | string | null | - |
| messageType | string | null | - |
| notification | FirebaseRemoteMessageNotification | null | - |
| originalPriority | number | - |
| priority | number | - |
| sentTime | number | - |
| to | string | null | - |
| ttl | number | - |
| Property | Type | Description |
|---|---|---|
| body | string | null | - |
| bodyLocalizationArgs | string[] | null | - |
| bodyLocalizationKey | string | null | - |
| channelId | string | null | - |
| clickAction | string | null | - |
| color | string | null | - |
| eventTime | number | null | - |
| icon | string | null | - |
| imageUrl | string | null | - |
| lightSettings | number[] | null | - |
| link | string | null | - |
| localOnly | boolean | - |
| notificationCount | number | null | - |
| notificationPriority | number | null | - |
| sound | string | null | - |
| sticky | boolean | - |
| tag | string | null | - |
| ticker | string | null | - |
| title | string | null | - |
| titleLocalizationArgs | string[] | null | - |
| titleLocalizationKey | string | null | - |
| usesDefaultLightSettings | boolean | - |
| usesDefaultSound | boolean | - |
| usesDefaultVibrateSettings | boolean | - |
| vibrateTimings | number[] | null | - |
| visibility | number | null | - |
Available configuration for permission request on iOS platform.
See Apple documentation for UNAuthorizationOptions to learn more.
| Property | Type | Description |
|---|---|---|
| allowAlert(optional) | boolean | The ability to display alerts. |
| allowBadge(optional) | boolean | The ability to update the app’s badge. |
| allowCriticalAlerts(optional) | boolean | The ability to play sounds for critical alerts. |
| allowDisplayInCarPlay(optional) | boolean | The ability to display notifications in a CarPlay environment. |
| allowProvisional(optional) | boolean | The ability to post noninterrupting notifications provisionally to the Notification Center. |
| allowSound(optional) | boolean | The ability to play sounds. |
| provideAppNotificationSettings(optional) | boolean | An option indicating the system should display a button for in-app notification settings. |
A trigger related to a UNLocationNotificationTrigger.
| Property | Type | Description |
|---|---|---|
| region | CircularRegion | BeaconRegion | - |
| repeats | boolean | - |
| type | 'location' | - |
A trigger related to a monthly notification.
The same functionality will be achieved on iOS with a
CalendarNotificationTrigger.
| Property | Type | Description |
|---|---|---|
| day | number | - |
| hour | number | - |
| minute | number | - |
| type | 'monthly' | - |
An object which represents a single notification that has been triggered by some request (NotificationRequest) at some point in time.
| Property | Type | Description |
|---|---|---|
| date | number | - |
| request | NotificationRequest | - |
| Property | Type | Description |
|---|---|---|
| buttonTitle | string | The title of the button triggering this action. |
| identifier | string | A unique string that identifies this action. If a user takes this action (for example, selects this button in the system's Notification UI),
your app will receive this |
| options(optional) | {
isAuthenticationRequired: boolean,
isDestructive: boolean,
opensAppToForeground: boolean
} | Object representing the additional configuration options. |
| textInput(optional) | {
placeholder: string,
submitButtonTitle: string
} | Object which, if provided, will result in a button that prompts the user for a text response. |
An object which represents behavior that should be applied to the incoming notification. On Android, this influences whether the notification is shown, a sound is played, and priority. On iOS, this maps directly to UNNotificationPresentationOptions.
On Android, setting
shouldPlaySound: falsewill result in the drop-down notification alert not showing, no matter what the priority is. This setting will also override any channel-specific sounds you may have configured.
| Property | Type | Description |
|---|---|---|
| priority(optional) | AndroidNotificationPriority | - |
| shouldPlaySound | boolean | - |
| shouldSetBadge | boolean | Only for: -iOS |
| shouldShowAlert(optional) | boolean |
|
| shouldShowBanner | boolean | - |
| shouldShowList | boolean | - |
Defines a group of notification actions and their behavior. Categories allow you to create custom action buttons that appear with notifications, enabling users to respond to notifications.
Categories must be registered with setNotificationCategoryAsync
before they can be used. When scheduling a notification, reference the category by its identifier in the
NotificationContentInput.categoryIdentifier field.
| Property | Type | Description |
|---|---|---|
| actions | NotificationAction[] | - |
| identifier | string | - |
| options(optional) | NotificationCategoryOptions | - |
An object which represents a notification channel.
| Property | Type | Description |
|---|---|---|
| audioAttributes | AudioAttributes | - |
| bypassDnd | boolean | - |
| description | string | null | - |
| enableLights | boolean | - |
| enableVibrate | boolean | - |
| groupId(optional) | string | null | - |
| id | string | - |
| importance | AndroidImportance | - |
| lightColor | string | - |
| lockscreenVisibility | AndroidNotificationVisibility | - |
| name | string | null | - |
| showBadge | boolean | - |
| sound | 'default' | 'custom' | null | - |
| vibrationPattern | number[] | null | - |
An object which represents a notification channel group.
| Property | Type | Description |
|---|---|---|
| channels | NotificationChannel[] | - |
| description(optional) | string | null | - |
| id | string | - |
| isBlocked(optional) | boolean | - |
| name | string | null | - |
An object which represents a notification channel group to be set.
| Property | Type | Description |
|---|---|---|
| description(optional) | string | null | - |
| name | string | null | - |
Extends: ProxyNativeModule
| Property | Type | Description |
|---|---|---|
| deleteNotificationChannelGroupAsync(optional) | (groupId: string) => Promise<void> | - |
| getNotificationChannelGroupAsync(optional) | (groupId: string) => Promise<NotificationChannelGroup | null> | - |
| getNotificationChannelGroupsAsync(optional) | () => Promise<NotificationChannelGroup[]> | - |
| setNotificationChannelGroupAsync(optional) | (groupId: string, group: NotificationChannelGroupInput) => Promise<NotificationChannelGroup | null> | - |
Extends: ProxyNativeModule
| Property | Type | Description |
|---|---|---|
| deleteNotificationChannelAsync(optional) | (channelId: string) => Promise<void> | - |
| getNotificationChannelAsync(optional) | (channelId: string) => Promise<NotificationChannel | null> | - |
| getNotificationChannelsAsync(optional) | () => Promise<NotificationChannel[] | null> | - |
| setNotificationChannelAsync(optional) | (channelId: string, channelConfiguration: NotificationChannelInput) => Promise<NotificationChannel | null> | - |
| Property | Type | Description |
|---|---|---|
| handleError(optional) | (notificationId: string, error: NotificationHandlingError) => void | A function called whenever calling |
| handleNotification | (notification: Notification) => Promise<NotificationBehavior> | A function accepting an incoming notification returning a |
| handleSuccess(optional) | (notificationId: string) => void | A function called whenever an incoming notification is handled successfully. |
An interface representing the permissions request scope configuration. Each option corresponds to a different native platform authorization option.
| Property | Type | Description |
|---|---|---|
| android(optional) | object | On Android, all available permissions are granted by default, and if a user declines any permission, an app cannot prompt the user to change. |
| ios(optional) | IosNotificationPermissionsRequest | Available configuration for permission request on iOS platform. |
Extends: PermissionResponse
An object obtained by permissions get and request functions.
| Property | Type | Description |
|---|---|---|
| android(optional) | {
importance: number,
interruptionFilter: number
} | - |
| ios(optional) | {
alertStyle: IosAlertStyle,
allowsAlert: boolean | null,
allowsAnnouncements: boolean | null,
allowsBadge: boolean | null,
allowsCriticalAlerts: boolean | null,
allowsDisplayInCarPlay: boolean | null,
allowsDisplayInNotificationCenter: boolean | null,
allowsDisplayOnLockScreen: boolean | null,
allowsPreviews: IosAllowsPreviews | null,
allowsSound: boolean | null,
providesAppNotificationSettings: boolean | null,
status: IosAuthorizationStatus
} | - |
An object represents a request to present a notification. It has content — how it's being represented, and a trigger — what triggers the notification.
Many notifications (Notification) may be triggered with the same request (for example, a repeating notification).
| Property | Type | Description |
|---|---|---|
| content | NotificationContent | - |
| identifier | string | - |
| trigger | NotificationTrigger | - |
An object which represents a notification request you can pass into scheduleNotificationAsync.
| Property | Type | Description |
|---|---|---|
| content | NotificationContentInput | - |
| identifier(optional) | string | - |
| trigger | NotificationTriggerInput | - |
An object which represents user's interaction with the notification.
Note: If the user taps on a notification,
actionIdentifierwill be equal toNotifications.DEFAULT_ACTION_IDENTIFIER.
| Property | Type | Description |
|---|---|---|
| actionIdentifier | string | - |
| notification | Notification | - |
| userText(optional) | string | - |
The region used to determine when the system sends the notification.
| Property | Type | Description |
|---|---|---|
| identifier | string | The identifier for the region object. |
| notifyOnEntry | boolean | Indicates whether notifications are generated upon entry into the region. |
| notifyOnExit | boolean | Indicates whether notifications are generated upon exit from the region. |
| type | string | - |
A trigger related to an elapsed time interval. May be repeating (see repeats field).
| Property | Type | Description |
|---|---|---|
| repeats | boolean | - |
| seconds | number | - |
| type | 'timeInterval' | - |
Represents a notification trigger that is unknown to expo-notifications and that it didn't know how to serialize for JS.
| Property | Type | Description |
|---|---|---|
| type | 'unknown' | - |
A trigger related to a weekly notification.
The same functionality will be achieved on iOS with a
CalendarNotificationTrigger.
| Property | Type | Description |
|---|---|---|
| hour | number | - |
| minute | number | - |
| type | 'weekly' | - |
| weekday | number | - |
A trigger related to a yearly notification.
The same functionality will be achieved on iOS with a
CalendarNotificationTrigger.
| Property | Type | Description |
|---|---|---|
| day | number | - |
| hour | number | - |
| minute | number | - |
| month | number | - |
| type | 'yearly' | - |
Types
Type: Partial<AudioAttributes>
This trigger input will cause the notification to be delivered once or many times
(controlled by the value of repeats)
when the date components match the specified values.
Corresponds to native
UNCalendarNotificationTrigger.
| Property | Type | Description |
|---|---|---|
| channelId(optional) | string | - |
| day(optional) | number | - |
| hour(optional) | number | - |
| minute(optional) | number | - |
| month(optional) | number | - |
| repeats(optional) | boolean | - |
| second(optional) | number | - |
| seconds(optional) | number | - |
| timezone(optional) | string | - |
| type | SchedulableTriggerInputTypes.CALENDAR | - |
| weekday(optional) | number | - |
| weekdayOrdinal(optional) | number | - |
| weekOfMonth(optional) | number | - |
| weekOfYear(optional) | number | - |
| year(optional) | number | - |
A trigger that will cause the notification to be delivered immediately.
| Property | Type | Description |
|---|---|---|
| channelId | string | - |
This trigger input will cause the notification to be delivered once per day
when the hour and minute date components match the specified values.
| Property | Type | Description |
|---|---|---|
| channelId(optional) | string | - |
| hour | number | - |
| minute | number | - |
| type | SchedulableTriggerInputTypes.DAILY | - |
This trigger input will cause the notification to be delivered once
on the specified value of the date property. The value of repeats will be ignored
for this trigger type.
| Property | Type | Description |
|---|---|---|
| channelId(optional) | string | - |
| date | Date | number | - |
| type | SchedulableTriggerInputTypes.DATE | - |
Literal Type: union
In simple terms, an object of type: Platform.OS and data: any. The data type depends on the environment - on a native device it will be a string,
which you can then use to send notifications via Firebase Cloud Messaging (Android) or APNs (iOS).
Acceptable values are: ExplicitlySupportedDevicePushToken | ImplicitlySupportedDevicePushToken
Type: NativeDevicePushToken
| Property | Type | Description |
|---|---|---|
| data | any | The push token as a string for a native platform. |
| type | Exclude<Platform.OS, ExplicitlySupportedDevicePushToken[type]> | Either |
Literal Type: string
The notification’s importance and required delivery timing. Possible values:
- 'passive' - the system adds the notification to the notification list without lighting up the screen or playing a sound
- 'active' - the system presents the notification immediately, lights up the screen, and can play a sound
- 'timeSensitive' - The system presents the notification immediately, lights up the screen, can play a sound, and breaks through system notification controls
- 'critical - the system presents the notification immediately, lights up the screen, and bypasses the mute switch to play a sound
Acceptable values are: 'passive' | 'active' | 'timeSensitive' | 'critical'
This trigger input will cause the notification to be delivered once per month
when the day, hour, and minute date components match the specified values.
Note: All properties are specified in JavaScript
Dateobject's ranges (i.e. January is represented as 0).
| Property | Type | Description |
|---|---|---|
| channelId(optional) | string | - |
| day | number | - |
| hour | number | - |
| minute | number | - |
| type | SchedulableTriggerInputTypes.MONTHLY | - |
Literal Type: union
Acceptable values are: IosNotificationPermissionsRequest | object
| Property | Type | Description |
|---|---|---|
| allowAnnouncement(optional) | boolean |
Default: false |
| allowInCarPlay(optional) | boolean | Indicates whether to allow CarPlay to display notifications of this type. Apps must be approved for CarPlay to make use of this feature. Default: false |
| categorySummaryFormat(optional) | string | A format string for the summary description used when the system groups the category’s notifications. |
| customDismissAction(optional) | boolean | Indicates whether to send actions for handling when the notification is dismissed (the user must explicitly dismiss the notification interface - ignoring a notification or flicking away a notification banner does not trigger this action). Default: false |
| intentIdentifiers(optional) | string[] | Array of Intent Class Identifiers. When a notification is delivered, the presence of an intent identifier lets the system know that the notification is potentially related to the handling of a request made through Siri. Default: [] |
| previewPlaceholder(optional) | string | Customizable placeholder for the notification preview text. This is shown if the user has disabled notification previews for the app.
Defaults to the localized iOS system default placeholder ( |
| showSubtitle(optional) | boolean | Indicates whether to show the notification's subtitle, even if the user has disabled notification previews for the app. Default: false |
| showTitle(optional) | boolean | Indicates whether to show the notification's title, even if the user has disabled notification previews for the app. Default: false |
Type: RequiredBy<Omit<NotificationChannel, 'id' | 'audioAttributes' | 'sound'> & {
audioAttributes: AudioAttributesInput,
sound: string | null
}, 'name' | 'importance'>
An object which represents a notification channel to be set.
An object representing notification's content when reading a notification (on the "output", when it is presented by the system). For the input type, see NotificationContentInput.
Type: NotificationContentIos | NotificationContentAndroid extended by:
| Property | Type | Description |
|---|---|---|
| body | string | null | Notification body - the main content of the notification. |
| categoryIdentifier | string | null | The identifier of the notification’s category. |
| data(optional) | Record<string, unknown> | Data associated with the notification, not displayed |
| sound | 'default' | 'defaultCritical' | 'custom' | 'defaultRingtone' | null | - |
| subtitle | string | null | On Android: On iOS: |
| title | string | null | Notification title - the bold text displayed above the rest of the content. |
See Android developer documentation for more information on specific fields.
| Property | Type | Description |
|---|---|---|
| badge(optional) | number | Application badge number associated with the notification. |
| color(optional) | string | Accent color (in |
| priority(optional) | AndroidNotificationPriority | Relative priority for this notification. Priority is an indication of how much of the user's valuable attention should be consumed by this notification. Low-priority notifications may be hidden from the user in certain situations, while the user might be interrupted for a higher-priority notification. The system will make a determination about how to interpret this priority when presenting the notification. |
| vibrationPattern(optional) | number[] | The pattern with which to vibrate. |
| Property | Type | Description |
|---|---|---|
| hideThumbnail(optional) | boolean | - |
| identifier | string | null | - |
| thumbnailClipArea(optional) | {
height: number,
width: number,
x: number,
y: number
} | - |
| thumbnailTime(optional) | number | - |
| type | string | null | - |
| typeHint(optional) | string | - |
| url | string | null | - |
An object which represents notification content that you pass in as a part of NotificationRequestInput.
| Property | Type | Description |
|---|---|---|
| attachments(optional) | NotificationContentAttachmentIos[] | Only for: iOS The visual and audio attachments to display alongside the notification’s main content. |
| autoDismiss(optional) | boolean | Only for: Android If set to See Android developer documentation for more details. |
| badge(optional) | number | Application badge number associated with the notification. |
| body(optional) | string | null | The main content of the notification. |
| categoryIdentifier(optional) | string | Only for: iOS The identifier of the notification’s category. |
| color(optional) | string | Only for: Android Accent color (in |
| data(optional) | Record<string, unknown> | Data associated with the notification, not displayed. |
| interruptionLevel(optional) | InterruptionLevel | Only for: iOS The notification’s importance and required delivery timing. Possible values:
|
| launchImageName(optional) | string | The name of the image or storyboard to use when your app launches because of the notification. |
| priority(optional) | string | Only for: Android Relative priority for this notification. Priority is an indication of how much of the user's valuable attention should be consumed by this notification. Low-priority notifications may be hidden from the user in certain situations, while the user might be interrupted for a higher-priority notification. The system will make a determination about how to interpret this priority when presenting the notification. |
| sound(optional) | boolean | 'default' | 'defaultCritical' | 'defaultRingtone' | string & undefined | The notification sound. Use On iOS, you can also provide a custom sound filename including the extension. The file needs to be added
to the |
| sticky(optional) | boolean | Only for: Android If set to See Android developer documentation and Firebase documentation for more details. |
| subtitle(optional) | string | null | On Android: On iOS: |
| title(optional) | string | null | Notification title - the bold text displayed above the rest of the content. |
| vibrate(optional) | number[] | Only for: Android The pattern with which to vibrate. |
See Apple documentation for more information on specific fields.
| Property | Type | Description |
|---|---|---|
| attachments | NotificationContentAttachmentIos[] | The visual and audio attachments to display alongside the notification’s main content. |
| badge | number | null | The number that your app’s icon displays. |
| interruptionLevel(optional) | InterruptionLevel | - |
| launchImageName | string | null | The name of the image or storyboard to use when your app launches because of the notification. |
| summaryArgument(optional) | string | null | The text the system adds to the notification summary to provide additional context. |
| summaryArgumentCount(optional) | number | The number the system adds to the notification summary when the notification represents multiple items. |
| targetContentIdentifier(optional) | string | The value your app uses to determine which scene to display to handle the notification. |
| threadIdentifier | string | null | The identifier that groups related notifications. |
Literal Type: union
Acceptable values are: NotificationTimeoutError | Error
Payload for the background notification handler task. Read more.
Type: NotificationResponse or object shaped as below:
| Property | Type | Description |
|---|---|---|
| aps(optional) | Record<string, unknown> | Only for: iOS Detailed, raw object describing the remote notification. See more. |
| data | {
dataString: string
} |
|
| notification | Record<string, unknown> | null | Object describing the remote notification. |
Literal Type: union
A union type containing different triggers which may cause the notification to be delivered to the application.
Acceptable values are: PushNotificationTrigger | LocationNotificationTrigger | NotificationTriggerInput | UnknownNotificationTrigger
Literal Type: union
A type which represents possible triggers with which you can schedule notifications.
A null trigger means that the notification should be scheduled for delivery immediately.
Acceptable values are: null | ChannelAwareTriggerInput | SchedulableNotificationTriggerInput
Literal Type: union
Permission expiration time. Currently, all permissions are granted permanently.
Acceptable values are: 'never' | number
An object obtained by permissions get and request functions.
| Property | Type | Description |
|---|---|---|
| canAskAgain | boolean | Indicates if user can be asked again for specific permission. If not, one should be directed to the Settings app in order to enable/disable the permission. |
| expires | PermissionExpiration | Determines time when the permission expires. |
| granted | boolean | A convenience boolean that indicates if the permission is granted. |
| status | PermissionStatus | Determines the status of the permission. |
| Property | Type | Description |
|---|---|---|
| payload(optional) | Record<string, unknown> | Only for: -iOS |
| remoteMessage(optional) | FirebaseRemoteMessage | Only for: -Android |
| type | 'push' | - |
A function accepting a device push token (DevicePushToken) as an argument.
Note: You should not call
getDevicePushTokenAsyncinside this function, as it triggers the listener and may lead to an infinite loop.
| Parameter | Type |
|---|---|
| token | DevicePushToken |
void
Literal Type: union
Input for time-based, schedulable triggers.
For these triggers you can check the next trigger date with getNextTriggerDateAsync.
If you pass in a number (Unix timestamp) or Date, it will be processed as a
trigger input of type SchedulableTriggerInputTypes.DATE. Otherwise, the input must be
an object, with a type value set to one of the allowed values in SchedulableTriggerInputTypes.
If the input is an object, date components passed in will be validated, and
an error is thrown if they are outside their allowed range (for example, the minute and
second components must be between 0 and 59 inclusive).
Acceptable values are: CalendarTriggerInput | TimeIntervalTriggerInput | DailyTriggerInput | WeeklyTriggerInput | MonthlyTriggerInput | YearlyTriggerInput | DateTriggerInput
This trigger input will cause the notification to be delivered once or many times
(depends on the repeats field) after seconds time elapse.
On iOS, when
repeatsistrue, the time interval must be 60 seconds or greater. Otherwise, the notification won't be triggered.
| Property | Type | Description |
|---|---|---|
| channelId(optional) | string | - |
| repeats(optional) | boolean | - |
| seconds | number | - |
| type | SchedulableTriggerInputTypes.TIME_INTERVAL | - |
This trigger input will cause the notification to be delivered once every week
when the weekday, hour, and minute date components match the specified values.
Note: Weekdays are specified with a number from
1through7, with1indicating Sunday.
| Property | Type | Description |
|---|---|---|
| channelId(optional) | string | - |
| hour | number | - |
| minute | number | - |
| type | SchedulableTriggerInputTypes.WEEKLY | - |
| weekday | number | - |
This trigger input will cause the notification to be delivered once every year
when the day, month, hour, and minute date components match the specified values.
Note: All properties are specified in JavaScript
Dateobject's ranges (i.e. January is represented as 0).
| Property | Type | Description |
|---|---|---|
| channelId(optional) | string | - |
| day | number | - |
| hour | number | - |
| minute | number | - |
| month | number | - |
| type | SchedulableTriggerInputTypes.YEARLY | - |
Enums
AndroidImportance.UNSPECIFIED = 1Use DEFAULT instead. This value is present for compatibility reasons.
An enum corresponding to values appropriate for Android's Notification#priority field.
Constants that indicate the result of a background fetch operation.
Corresponds to UIBackgroundFetchResult.
Schedulable trigger inputs (that are not a plain date value or time value) must have the "type" property set to one of these values.