0.27.7 • Published 3 days ago

expo-notifications v0.27.7

Weekly downloads
22,469
License
MIT
Repository
github
Last release
3 days ago

expo-notifications

Provides an API to fetch push notification tokens and to present, schedule, receive and respond to notifications.

Features

  • 📣 schedule a one-off notification for a specific date, or some time from now,
  • 🔁 schedule a notification repeating in some time interval (or a calendar date match on iOS),
  • 1️⃣ get and set application badge icon number,
  • 📲 fetch a native device push token so you can send push notifications with FCM and APNS,
  • 😎 fetch an Expo push token so you can send push notifications with Expo,
  • 📬 listen to incoming notifications,
  • 👆 listen to interactions with notifications (tapping or dismissing),
  • 🎛 handle notifications when the app is in foreground,
  • 🔕 imperatively dismiss notifications from Notification Center/tray,
  • 🗂 create, update, delete Android notification channels.

API documentation

The following methods are exported by the expo-notifications module:

Installation in managed Expo projects

This library is not yet usable within managed projects it is likely to be included in an upcoming Expo SDK release.

Installation in bare React Native projects

For bare React Native projects, you must ensure that you have installed and configured the react-native-unimodules package before continuing.

Add the package to your npm dependencies

expo install expo-notifications

Configure for iOS

Run pod install in the ios directory after installing the npm package.

Configure for Android

Ensure that your project is configured for Firebase (to verify if it is, check if android/app folder contains a google-services.json file).

Contributing

Contributions are very welcome! Please refer to guidelines described in the contributing guide.


API

Android push notification payload specification

When sending a push notification, put an object conforming to the following type as data of the notification:

export interface FirebaseData {
  title?: string;
  message?: string;
  subtitle?: string;
  sound?: boolean | string;
  vibrate?: boolean | number[];
  priority?: AndroidNotificationPriority;
  badge?: number;
}

Fetching tokens for push notifications

getExpoPushTokenAsync(options: ExpoTokenOptions): ExpoPushToken

Returns an Expo token that can be used to send a push notification to this device using Expo push notifications service. Read more in the Push Notifications guide.

Note: For Expo backend to be able to send notifications to your app, you will need to provide it with push notification keys. This can be done using expo-cli (expo credentials:manager). Read more in the “Upload notifications credentials” guide. TODO

Arguments

This function accepts an optional object allowing you to pass in configuration, consisting of fields (all are optional, but some may have to be defined if configuration cannot be inferred):

  • experienceId (string) -- The ID of the experience to which the token should be attributed. Defaults to Constants.manifest.id exposed by expo-constants. You may need to define it in bare workflow, where expo-constants doesn't expose the manifest.
  • devicePushToken (DevicePushToken) -- The device push token with which to register at the backend. Defaults to a token fetched with getDevicePushTokenAsync().
  • applicationId (string) -- The ID of the application to which the token should be attributed. Defaults to Application.applicationId exposed by expo-application.
  • deviceId (string) -- The ID of the application installation. expo-notifications is capable of generating one for you and it defaults to it. Most probably you won't need to customize that.
  • type (string) -- Type of token sent to the server. Inferred from devicePushToken. Most probably you won't need to customize that.
  • development (boolean) -- Makes sense only on iOS, where 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 Application.getIosPushNotificationServiceEnvironmentAsync() exposed by expo-application or false. Most probably you won't need to customize that.
  • baseUrl (string) -- Base URL upon which the function will build a URL to which it will send the device push token. If url is defined, this option won't have any effect. Defaults to a production Expo backend URL. Most probably you won't need to change that.
  • url (string) -- Endpoint URL to which the function will send the device push token. Most probably you won't need to customize that. Setting url overrides baseUrl.

Returns

Returns a Promise that resolves to an object with the following fields:

  • type (string) -- Always expo.
  • data (string) -- The push token as a string.

Examples

Fetching the Expo push token and uploading it to a server
import Constants from 'expo-constants';
import * as Notifications from 'expo-notifications';

export async function registerForPushNotificationsAsync(userId: string) {
  let experienceId = undefined;
  if (!Constants.manifest) {
    // Absence of the manifest means we're in bare workflow
    experienceId = '@username/example';
  }
  const expoPushToken = await Notifications.getExpoPushTokenAsync({
    experienceId,
  });
  await fetch('https://example.com/', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      userId,
      expoPushToken,
    }),
  });
}

getDevicePushTokenAsync(): DevicePushToken

Returns a native APNS, FCM token or a PushSubscription data that can be used with another push notification service.

Returns

A Promise that resolves to an object with the following fields:

  • type (string) -- Either ios, android or web.
  • data (string or object) -- Either the push token as a string (for type == "ios" | "android") or an object conforming to the type below (for type == "web"):
    {
      endpoint: string;
      keys: {
        p256dh: string;
        auth: string;
      }
    }

addPushTokenListener(listener: PushTokenListener): Subscription

In rare situations a push token may be changed 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.

Arguments

A single and required argument is a function accepting a push token as an argument. It will be called whenever the push token changes.

Returns

A Subscription object representing the subscription of the provided listener.

Examples

Registering a push token listener using a React hook

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
  );
}

removePushTokenSubscription(subscription: Subscription): void

Removes a push token subscription returned by a addPushTokenListener call.

Arguments

A single and required argument is a subscription returned by addPushTokenListener.

removeAllPushTokenListeners(): void

Removes all push token subscriptions that may have been registered with addPushTokenListener.

Listening to notification events

addNotificationReceivedListener(listener: (event: Notification) => void): void

Listeners registered by this method will be called whenever a notification is received while the app is running.

Arguments

A single and required argument is a function accepting a notification (Notification) as an argument.

Returns

A Subscription object representing the subscription of the provided listener.

Examples

Registering a notification listener using a React hook

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
  );
}

addNotificationsDroppedListener(listener: () => void): void

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 notifications service on Android. It corresponds to onDeletedMessages() callback. More information can be found in Firebase docs.

Arguments

A single and required argument is a function–callback.

Returns

A Subscription object representing the subscription of the provided listener.

addNotificationResponseReceivedListener(listener: (event: NotificationResponse) => void): void

Listeners registered by this method will be called whenever a user interacts with a notification (eg. taps on it).

Arguments

A single and required argument is a function accepting notification response (NotificationResponse) as an argument.

Returns

A Subscription object representing the subscription of the provided listener.

Examples

Registering a notification listener using a React hook

import React from 'react';
import { Linking } from 'react-native';
import * as Notifications from 'expo-notifications';

export default function Container({ navigation }) {
  React.useEffect(() => {
    const subscription = Notifications.addNotificationResponseReceivedListener(response => {
      const url = response.notification.request.content.data.url;
      Linking.openUrl(url);
    });
    return () => subscription.remove();
  }, [navigation]);

  return (
    // Your app content
  );
}

removeNotificationSubscription(subscription: Subscription): void

Removes a notification subscription returned by a addNotification*Listener call.

Arguments

A single and required argument is a subscription returned by addNotification*Listener.

removeAllNotificationListeners(): void

Removes all notification subscriptions that may have been registered with addNotification*Listener.

Handling incoming notifications when the app is in foreground

setNotificationHandler(handler: NotificationHandler | null): void

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.

Arguments

The function receives a single argument which should be either null (if you want to clear the handler) or an object of fields:

  • handleNotification ((Notification) => Promise) -- (required) a function accepting an incoming notification returning a Promise resolving to a behavior (NotificationBehavior) applicable to the notification
  • handleSuccess ((notificationId: string) => void) -- (optional) a function called whenever an incoming notification is handled successfully
  • handleError ((error: Error) => void) -- (optional) a function called whenever handling of an incoming notification fails

Examples

Implementing a notification handler that always shows the notification when it is received

import * as Notifications from 'expo-notifications';

Notifications.setNotificationHandler({
  handleNotification: async () => ({
    shouldShowAlert: true,
    shouldPlaySound: false,
    shouldSetBadge: false,
  }),
});

Fetching information about notifications-related permissions

getPermissionsAsync(): Promise<NotificationPermissionsStatus>

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.

Returns

It returns a Promise resolving to an object representing permission settings (NotificationPermissionsStatus).

Examples

Check if the app is allowed to send any type of notifications (interrupting and non-interrupting–provisional on iOS)

import * as Notifications from 'expo-notifications';

export function allowsNotificationsAsync() {
  const settings = await Notifications.getPermissionsAsync();
  return (
    settings.granted || settings.ios?.status === Notifications.IosAuthorizationStatus.PROVISIONAL
  );
}

requestPermissionsAsync(request?: NotificationPermissionsRequest): Promise<NotificationPermissionsStatus>

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.

Arguments

An optional object of conforming to the following interface:

{
  android?: {};
  ios?: {
    allowAlert?: boolean;
    allowBadge?: boolean;
    allowSound?: boolean;
    allowDisplayInCarPlay?: boolean;
    allowCriticalAlerts?: boolean;
    provideAppNotificationSettings?: boolean;
    allowProvisional?: boolean;
    allowAnnouncements?: boolean;
  }
}

Each option corresponds to a different native platform authorization option (a list of iOS options is available here, on Android all available permissions are granted by default and if a user declines any permission an app can't prompt the user to change).

Returns

It returns a Promise resolving to an object representing permission settings (NotificationPermissionsStatus).

Examples

Prompts the user to allow the app to show alerts, play sounds, set badge count and let Siri read out messages through AirPods

import * as Notifications from 'expo-notifications';

export function requestPermissionsAsync() {
  return await Notifications.requestPermissionsAsync({
    ios: {
      allowAlert: true,
      allowBadge: true,
      allowSound: true,
      allowAnnouncements: true,
    },
  });
}

Managing application badge icon

getBadgeCountAsync(): Promise<number>

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.

Returns

It returns a Promise resolving to a number representing current badge of the app icon.

setBadgeCountAsync(badgeCount: number, options?: SetBadgeCountOptions): Promise<boolean>

Sets the badge of the app's icon to the specified number. Setting to 0 clears the badge.

Note: Not all Android launchers support application badges. If the launcher does not support icon badges, the method will resolve to false.

Arguments

The function accepts a number as the first argument. A value of 0 will clear the badge.

As a second, optional argument you can pass in an object of options configuring behavior applied in Web environment. The object should be of format:

{
  web?: badgin.Options
}

where the type badgin.Options is an object described in the badgin's documentation.

Returns

It returns a Promise resolving to a boolean representing whether setting of the badge succeeded.

Scheduling notifications

getAllScheduledNotificationsAsync(): Promise<Notification[]>

Fetches information about all scheduled notifications.

Returns

It returns a Promise resolving to an array of objects conforming to the Notification interface.

presentNotificationAsync(notificationRequest: NotificationRequest): Promise<void>

Schedules a notification for immediate trigger.

Note: Please note that this does not mean that the notification will be presented. For the notification to be presented you have to set a notification handler with setNotificationHandler that will return an appropriate notification behavior. For more information see the example below.

Arguments

The only argument to this function is a NotificationRequest.

Returns

It returns a Promise resolving once the notification is successfully scheduled.

Examples

Presenting the notification to the user
import * as Notifications from 'expo-notifications';

// First, set the handler that will cause the notification
// to show the alert

Notifications.setNotificationHandler({
  handleNotification: async () => ({
    shouldShowAlert: true,
    shouldPlaySound: false,
    shouldSetBadge: false,
  }),
});

// Second, call the method

Notifications.presentNotificationAsync({
  title: 'Look at that notification',
  message: "I'm so proud of myself!",
});

scheduleNotificationAsync(notificationRequest: NotificationRequest, trigger: NotificationTrigger): Promise<string>

Schedules a notification to be triggered in the future.

Note: Please note that this does not mean that the notification will be presented when it is triggereed. For the notification to be presented you have to set a notification handler with setNotificationHandler that will return an appropriate notification behavior. For more information see the example below.

Arguments

  1. A NotificationRequest describing the notification to be triggered.
  2. A NotificationTrigger describing when should the notification trigger.

Returns

It returns a Promise resolving to a string --- a notification identifier you can later use to cancel the notification or to identify an incoming notification.

Examples

Scheduling the notification that will trigger once, in one minute from now
import * as Notifications from 'expo-notifications';

Notifications.scheduleNotificationAsync(
  {
    title: "Time's up!",
    message: 'Change sides!',
  },
  {
    seconds: 60,
  }
);
Scheduling the notification that will trigger repeatedly, every 20 minutes
import * as Notifications from 'expo-notifications';

Notifications.scheduleNotificationAsync({
  title: 'Remember to drink water!,
}, {
  seconds: 60 * 20,
  repeats: true
});
Scheduling the notification that will trigger once, at the beginning of next hour
import * as Notifications from 'expo-notifications';

const triggerDate = new Date(Date.now() + 60 * 60 * 1000);
triggerDate.setMinutes(0);
triggerDate.setSeconds(0);

Notifications.scheduleNotificationAsync(
  {
    title: 'Happy new hour!',
  },
  triggerDate
);

cancelScheduledNotificationAsync(identifier: string): Promise<void>

Cancels a single scheduled notification. The scheduled notification of given ID will not trigger.

Arguments

The notification identifier with which scheduleNotificationAsync resolved when the notification has been scheduled.

Returns

A Promise resolving once the scheduled notification is successfully cancelled or if there is no scheduled notification for given identifier.

Examples

Scheduling and then canceling the notification
import * as Notifications from 'expo-notifications';

async function scheduleAndCancel() {
  const identifier = await Notifications.scheduleNotificationAsync(
    {
      title: 'Hey!',
    },
    { seconds: 5, repeats: true }
  );
  await Notifications.cancelScheduledNotificationAsync(identifier);
}

cancelAllScheduledNotificationsAsync(): Promise<void>

Cancels all scheduled notifications.

Returns

A Promise resolving once all the scheduled notifications are successfully cancelled or if there are no scheduled notifications.

Dismissing notifications

dismissNotificationAsync(identifier: string): Promise<void>

Removes notification displayed in the notification tray (Notification Center).

Arguments

The first and only argument to the function is the notification identifier, obtained either in setNotificationHandler or in the listener added with addNotificationReceivedListener.

Returns

Resolves once the request to dismiss the notification is successfully dispatched to the notifications manager.

dismissAllNotificationsAsync(): Promise<void>

Removes all application's notifications displayed in the notification tray (Notification Center).

Returns

Resolves once the request to dismiss the notifications is successfully dispatched to the notifications manager.

Managing notification channels (Android-specific)

Starting in Android 8.0 (API level 26), all notifications must be assigned to a channel. For each channel, you can set the visual and auditory behavior that is applied to all notifications in that channel. Then, users can change these settings and decide which notification channels from your app should be intrusive or visible at all. (source: developer.android.com)

If you do not specify a notification channel, expo-notifications will create a fallback channel for you, named Miscellaneous. We encourage you to always ensure appropriate channels with informative names are set up for the application and to always send notifications to these channels.

Calling these methods is a no-op for platforms that do not support this feature (iOS, Web and Android below version 8.0 (26)).

getNotificationChannelsAsync(): Promise<NotificationChannel[]>

Fetches information about all known notification channels.

Returns

A Promise resolving to an array of channels. On platforms that do not support notification channels, it will always resolve to an empty array.

getNotificationChannelAsync(identifier: string): Promise<NotificationChannel | null>

Fetches information about a single notification channel.

Arguments

The only argument to this method is the channel's identifier.

Returns

A Promise resolving 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.

setNotificationChannelAsync(identifier: string, channel: NotificationChannelInput): Promise<NotificationChannel | null>

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.

Arguments

First argument to the method is the channel identifier.

Second argument is the channel's configuration of type NotificationChannelInput

Returns

A Promise resolving to the object (of type NotificationChannel) describing the modified channel or to null if the platform does not support notification channels.

deleteNotificationChannelAsync(identifier: string): Promise<void>

Removes the notification channel.

Arguments

First and only argument to the method is the channel identifier.

Returns

A Promise resolving once the channel is removed (or if there was no channel for given identifier).

getNotificationChannelGroupsAsync(): Promise<NotificationChannelGroup[]>

Fetches information about all known notification channel groups.

Returns

A Promise resolving to an array of channel groups. On platforms that do not support notification channel groups, it will always resolve to an empty array.

getNotificationChannelGroupAsync(identifier: string): Promise<NotificationChannelGroup | null>

Fetches information about a single notification channel group.

Arguments

The only argument to this method is the channel group's identifier.

Returns

A Promise resolving 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.

setNotificationChannelGroupAsync(identifier: string, channel: NotificationChannelGroupInput): Promise<NotificationChannelGroup | null>

Assigns the channel group configuration to a channel group of a specified name (creating it if need be).

Arguments

First argument to the method is the channel group identifier.

Second argument is the channel group's configuration of type NotificationChannelGroupInput

Returns

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.

deleteNotificationChannelGroupAsync(identifier: string): Promise<void>

Removes the notification channel group and all notification channels that belong to it.

Arguments

First and only argument to the method is the channel group identifier.

Returns

A Promise resolving once the channel group is removed (or if there was no channel group for given identifier).

Types

DevicePushToken

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); on web it will be a registration object (VAPID).

export interface NativeDevicePushToken {
  type: 'ios' | 'android';
  data: string;
}

export interface WebDevicePushToken {
  type: 'web';
  data: {
    endpoint: string;
    keys: {
      p256dh: string;
      auth: string;
    };
  };
}

export type DevicePushToken = NativeDevicePushToken | WebDevicePushToken;

PushTokenListener

A function accepting a device push token (DevicePushToken) as an argument.

Note: You should not call getDevicePushTokenAsync inside this function, as it triggers the listener and may lead to an infinite loop.

ExpoPushToken

Borrowing from DevicePushToken a little bit, it's an object of type: 'expo' and data: string. You can use the data value to send notifications via Expo Notifications service.

export interface ExpoPushToken {
  type: 'expo';
  data: string;
}

Subscription

A common-in-React-Native type to abstract an active subscription. Call .remove() to remove the subscription. You can then discard the object.

export type Subscription = {
  remove: () => void;
};

Notification

An object representing a single notification that has been triggered by some request (NotificationRequest) at some point in time.

export interface Notification {
  date: number;
  request: NotificationRequest;
}

NotificationRequest

An object representing 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 (eg. a repeating notification).

export interface NotificationRequest {
  identifier: string;
  content: NotificationContent;
  trigger: NotificationTrigger;
}

NotificationContent

An object representing notification's content.

export type NotificationContent = {
  // Notification title - the bold text displayed above the rest of the content
  title: string | null;
  // On iOS - subtitle - the bold text displayed between title and the rest of the content
  // On Android - subText - the display depends on the platform
  subtitle: string | null;
  // Notification body - the main content of the notification
  body: string | null;
  // Data associated with the notification, not displayed
  data: { [key: string]: unknown };
  // Application badge number associated with the notification
  badge: number | null;
} & (
  | {
      // iOS-specific additions
      // See https://developer.apple.com/documentation/usernotifications/unnotificationcontent?language=objc
      // for more information on specific fields.
      sound: 'default' | 'defaultCritical' | 'custom' | null;
      launchImageName: string | null;
      attachments: {
        identifier: string | null;
        url: string | null;
        type: string | null;
      }[];
      summaryArgument?: string | null;
      summaryArgumentCount?: number;
      categoryIdentifier: string | null;
      threadIdentifier: string | null;
      targetContentIdentifier?: string;
    }
  | {
      // Android-specific additions
      // See https://developer.android.com/reference/android/app/Notification.html#fields
      // for more information on specific fields.
      sound?: 'default' | string | null;
      priority?: AndroidNotificationPriority;
      vibrationPattern?: number[];
    }
);

NotificationContentInput

An object representing notification content that you pass in to presentNotificationAsync and scheduleNotificationAsync

export interface NotificationContentInput {
  // Fields corresponding to NotificationContent
  title?: string;
  subtitle?: string;
  body?: string;
  data?: { [key: string]: unknown };
  badge?: number;
  sound?: boolean | string;
  // Android-specific fields
  // See https://developer.android.com/reference/android/app/Notification.html#fields
  // for more information on specific fields.
  vibrate?: boolean | number[];
  priority?: AndroidNotificationPriority;
  // iOS-specific fields
  // See https://developer.apple.com/documentation/usernotifications/unmutablenotificationcontent?language=objc
  // for more information on specific fields.
  launchImageName?: string;
  attachments?: {
    url: string;
    identifier?: string;

    typeHint?: string;
    hideThumbnail?: boolean;
    thumbnailClipArea?: { x: number; y: number; width: number; height: number };
    thumbnailTime?: number;
  }[];
}

AndroidNotificationPriority

An enum corresponding to values appropriate for Android's Notification#priority field.

export enum AndroidNotificationPriority {
  MIN = 'min',
  LOW = 'low',
  DEFAULT = 'default',
  HIGH = 'high',
  MAX = 'max',
}

NotificationTrigger

A union type containing different triggers which may cause the notification to be delivered to the application.

export type NotificationTrigger =
  | PushNotificationTrigger
  | CalendarNotificationTrigger
  | LocationNotificationTrigger
  | TimeIntervalNotificationTrigger
  | UnknownNotificationTrigger;

PushNotificationTrigger

An object representing a notification delivered by a push notification system.

On Android under remoteMessage field a JS version of the Firebase RemoteMessage may be accessed.

export interface PushNotificationTrigger {
  type: 'push';
  remoteMessage?: FirebaseRemoteMessage;
}

FirebaseRemoteMessage

A Firebase RemoteMessage that caused the notification to be delivered to the app.

export interface FirebaseRemoteMessage {
  collapseKey: string | null;
  data: { [key: string]: string };
  from: string | null;
  messageId: string | null;
  messageType: string | null;
  originalPriority: number;
  priority: number;
  sentTime: number;
  to: string | null;
  ttl: number;
  notification: null | {
    body: string | null;
    bodyLocalizationArgs: string[] | null;
    bodyLocalizationKey: string | null;
    channelId: string | null;
    clickAction: string | null;
    color: string | null;
    usesDefaultLightSettings: boolean;
    usesDefaultSound: boolean;
    usesDefaultVibrateSettings: boolean;
    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;
    vibrateTimings: number[] | null;
    visibility: number | null;
  };
}

TimeIntervalNotificationTrigger

A trigger related to an elapsed time interval. May be repeating (see repeats field).

export interface TimeIntervalNotificationTrigger {
  type: 'timeInterval';
  repeats: boolean;
  seconds: number;
}

CalendarNotificationTrigger

A trigger related to a UNCalendarNotificationTrigger, available only on iOS.

export interface CalendarNotificationTrigger {
  type: 'calendar';
  repeats: boolean;
  dateComponents: {
    era?: number;
    year?: number;
    month?: number;
    day?: number;
    hour?: number;
    minute?: number;
    second?: number;
    weekday?: number;
    weekdayOrdinal?: number;
    quarter?: number;
    weekOfMonth?: number;
    weekOfYear?: number;
    yearForWeekOfYear?: number;
    nanosecond?: number;
    isLeapMonth: boolean;
    timeZone?: string;
    calendar?: string;
  };
}

LocationNotificationTrigger

A trigger related to a UNLocationNotificationTrigger, available only on iOS.

export interface LocationNotificationTrigger {
  type: 'location';
  repeats: boolean;
  region: CircularRegion | BeaconRegion;
}

interface Region {
  type: string;
  identifier: string;
  notifyOnEntry: boolean;
  notifyOnExit: boolean;
}

export interface CircularRegion extends Region {
  type: 'circular';
  radius: number;
  center: {
    latitude: number;
    longitude: number;
  };
}

export interface BeaconRegion extends Region {
  type: 'beacon';
  notifyEntryStateOnDisplay: boolean;
  major: number | null;
  minor: number | null;
  uuid?: string;
  beaconIdentityConstraint?: {
    uuid: string;
    major: number | null;
    minor: number | null;
  };
}

UnknownNotificationTrigger

Represents a notification trigger that is unknown to expo-notifications and that it didn't know how to serialize for JS.

export interface UnknownNotificationTrigger {
  type: 'unknown';
}

NotificationTriggerInput

A type representing possible triggers with which you can schedule notifications. A null trigger means that the notification should be scheduled for delivery immediately.

export type NotificationTriggerInput =
  | null
  | DateTriggerInput
  | TimeIntervalTriggerInput
  | CalendarTriggerInput;

DateTriggerInput

A trigger that will cause the notification to be delivered once at the specified Date. If you pass in a number it will be interpreted as a UNIX timestamp.

export type DateTriggerInput = Date | number;

TimeIntervalTriggerInput

A trigger that will cause the notification to be delivered once or many times (depends on the repeats field) after seconds time elapse.

export interface TimeIntervalTriggerInput {
  repeats?: boolean;
  seconds: number;
}

CalendarTriggerInput

A trigger that will cause the notification to be delivered once or many times when the date components match the specified values. Corresponds to native UNCalendarNotificationTrigger.

Note: This type of trigger is only available on iOS.

export interface CalendarTriggerInput {
  repeats?: boolean;
  timezone?: string;

  year?: number;
  month?: number;
  weekday?: number;
  weekOfMonth?: number;
  weekOfYear?: number;
  weekdayOrdinal?: number;
  day?: number;

  hour?: number;
  minute?: number;
  second?: number;
}

NotificationResponse

An object representing user's interaction with the notification.

Note: If the user taps on a notification actionIdentifier will be equal to Notifications.DEFAULT_ACTION_IDENTIFIER.

export interface NotificationResponse {
  notification: Notification;
  actionIdentifier: string;
  userText?: string;
}

NotificationBehavior

An object representing behavior that should be applied to the incoming notification.

export interface NotificationBehavior {
  shouldShowAlert: boolean;
  shouldPlaySound: boolean;
  shouldSetBadge: boolean;
  priority?: AndroidNotificationPriority;
}

NotificationChannel

An object representing a notification channel (feature available only on Android).

export enum AndroidNotificationVisibility { UNKNOWN, PUBLIC, PRIVATE, SECRET }

export enum AndroidAudioContentType { UNKNOWN, SPEECH, MUSIC, MOVIE, SONIFICATION }

export enum AndroidImportance {
  UNKNOWN,
  UNSPECIFIED,
  NONE,
  MIN,
  LOW,
  DEEFAULT,
  HIGH,
  MAX,
}

export enum AndroidAudioUsage {
  UNKNOWN,
  MEDIA,
  VOICE_COMMUNICATION,
  VOICE_COMMUNICATION_SIGNALLING,
  ALARM,
  NOTIFICATION,
  NOTIFICATION_RINGTONE,
  NOTIFICATION_COMMUNICATION_REQUEST,
  NOTIFICATION_COMMUNICATION_INSTANT,
  NOTIFICATION_COMMUNICATION_DELAYED,
  NOTIFICATION_EVENT,
  ASSISTANCE_ACCESSIBILITY,
  ASSISTANCE_NAVIGATION_GUIDANCE,
  ASSISTANCE_SONIFICATION,
  GAME,
}

export interface AudioAttributes {
  usage: AndroidAudioUsage;
  contentType: AndroidAudioContentType;
  flags: {
    enforceAudibility: boolean;
    requestHardwareAudioVideoSynchronization: boolean;
  };
}

export interface NotificationChannel {
  id: string;
  name: string | null;
  importance: AndroidImportance;
  bypassDnd: boolean;
  description: string | null;
  groupId?: string | null;
  lightColor: string;
  lockscreenVisibility: AndroidNotificationVisibility;
  showBadge: boolean;
  soundUri: string | null;
  audioAttributes: AudioAttributes;
  vibrationPattern: number[] | null;
  enableLights: boolean;
  enableVibrate: boolean;
}

NotificationChannelInput

An object representing a notification channel to be set.

export interface NotificationChannelInput {
  name: string | null;
  importance: AndroidImportance;
  // Optional attributes
  bypassDnd?: boolean;
  description?: string | null;
  groupId?: string | null;
  lightColor?: string;
  lockscreenVisibility?: AndroidNotificationVisibility;
  showBadge?: boolean;
  soundUri?: string | null;
  audioAttributes?: Partial<AudioAttributes>;
  vibrationPattern?: number[] | null;
  enableLights?: boolean;
  enableVibrate?: boolean;
}

NotificationChannelGroup

An object representing a notification channel group (feature available only on Android).

export interface NotificationChannelGroup {
  id: string;
  name: string | null;
  description?: string | null;
  isBlocked?: boolean;
  channels: NotificationChannel[];
}

NotificationChannelGroupInput

An object representing a notification channel group to be set.

export interface NotificationChannelGroupInput {
  name: string | null;
  description?: string | null;
}
0.28.1

3 days ago

0.28.0

7 days ago

0.27.7

11 days ago

0.27.6

3 months ago

0.27.5

3 months ago

0.27.4

3 months ago

0.27.3

4 months ago

0.27.2

4 months ago

0.27.1

4 months ago

0.27.0

5 months ago

0.25.0

6 months ago

0.26.0

5 months ago

0.23.0

8 months ago

0.24.2

7 months ago

0.24.1

7 months ago

0.24.0

7 months ago

0.20.1

10 months ago

0.20.0

10 months ago

0.21.0

9 months ago

0.22.0

9 months ago

0.19.0

12 months ago

0.18.1

1 year ago

0.18.0

1 year ago

0.17.0

2 years ago

0.15.4

2 years ago

0.15.3

2 years ago

0.16.0

2 years ago

0.16.1

2 years ago

0.15.0

2 years ago

0.15.1

2 years ago

0.15.2

2 years ago

0.14.0

2 years ago

0.14.1

2 years ago

0.13.2

3 years ago

0.13.3

3 years ago

0.13.1

3 years ago

0.13.0

3 years ago

0.12.3

3 years ago

0.12.2

3 years ago

0.12.1

3 years ago

0.12.0

3 years ago

0.11.6

3 years ago

0.11.5

3 years ago

0.11.4

3 years ago

0.11.3

3 years ago

0.11.2

3 years ago

0.11.1

3 years ago

0.11.0

3 years ago

0.10.0

3 years ago

0.9.0

3 years ago

0.8.2

3 years ago

0.8.1

3 years ago

0.8.0

3 years ago

0.7.2

4 years ago

0.7.1

4 years ago

0.7.0

4 years ago

0.6.0

4 years ago

0.5.0

4 years ago

0.4.0

4 years ago

0.3.3

4 years ago

0.3.2

4 years ago

0.3.1

4 years ago

0.3.0

4 years ago

0.2.0

4 years ago

0.1.7

4 years ago

0.1.6

4 years ago

0.1.5

4 years ago

0.1.4

4 years ago

0.1.3

4 years ago

0.1.3-rc.0

4 years ago

0.1.2

4 years ago

0.1.2-alpha.0

4 years ago

0.1.0

4 years ago

0.1.1

4 years ago

0.1.0-alpha.5

4 years ago

0.1.0-alpha.4

4 years ago

0.1.0-alpha.7

4 years ago

0.1.0-alpha.6

4 years ago

0.1.0-alpha.8

4 years ago

0.1.0-alpha.3

4 years ago

0.1.0-alpha.2

4 years ago

0.1.0-alpha.1

4 years ago

0.1.0-alpha.0

4 years ago