From 4e2d7287d19997f97e34b4df4175c8727cd8afec Mon Sep 17 00:00:00 2001
From: Expo Bot <34669131+expo-bot@users.noreply.github.com>
Date: Thu, 27 Aug 2026 03:02:48 -0700
Subject: [PATCH 01/19] Fix `BottomSheet` with a custom background making the
Android system bars light (#49394)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
> [!WARNING]
> **Agent-authored and NOT human-reviewed.** An automated `/verify
--fix` run for #49385 wrote this change and checked it in a sandbox; the
reasoning and evidence are in the outcome comment on that issue. Review
it as you would any external contribution.
Requested by @chrfalch · [investigation
run](https://github.com/expo/expo/actions/runs/32959146056) · refs
#49385
A `BottomSheet` with a custom background color turned the Android status
bar and navigation bar light, even in a dark app.
`ModalBottomSheetView.kt` resolves the content color with Material3's
`contentColorFor()`, which returns `LocalContentColor` for a container
color that is not a color-scheme role — and that is `Color.Black`.
Material3 themes the sheet window's system bars from the content color,
so a dark sheet asked for light system bars.
The default content color is now derived from the container color's
luminance when it matches no color-scheme role. An explicit
`contentColor`, a role color, and the theme's own container color all
resolve exactly as before. The content color also drives
`LocalContentColor` inside the sheet, so Compose content on a dark
custom background changes from black to white.
On a hosted Android emulator, a dark sheet made the status bar icons
turn black and vanish on the stock build; they stay white with this
change. The explicit-`contentColor`, light-background and theme-default
arms are identical on both builds.
Cause
expo-ui resolves the content color here:
https://github.com/expo/expo/blob/bde9b918e1614d69768c1f65a419f1c90a1272f5/packages/expo-ui/android/src/main/java/expo/modules/ui/ModalBottomSheetView.kt#L137-L138
The chain, in
`androidx.compose.material3:material3-android:1.5.0-alpha17` (the
version this package declares):
1. `contentColorFor(x)` is
`MaterialTheme.colorScheme.contentColorFor(x).takeOrElse {
LocalContentColor.current }`.
2. `ColorScheme.contentColorFor` returns `Color.Unspecified` for any
color that is not a color-scheme role.
3. `MaterialTheme` does not provide `LocalContentColor`. Its declared
default is `Color.Black`.
4. The sheet's own dialog window then sets `isAppearanceLightStatusBars`
and `isAppearanceLightNavigationBars` to `contentColor.isDark()`, where
`isDark()` is `luminance() <= 0.5`.
So any custom container color produced `Color.Black` and requested light
system bars. A custom container color reaches this code from
`backgroundStyle` on `@expo/ui/community/bottom-sheet`
(https://github.com/expo/expo/blob/bde9b918e1614d69768c1f65a419f1c90a1272f5/packages/expo-ui/src/community/bottom-sheet/BottomSheet.android.tsx#L75)
and from `containerColor` on the `jetpack-compose` `ModalBottomSheet`.
Sheets without a custom background were never affected:
`BottomSheetDefaults.ContainerColor` is `surfaceContainerLow`, which
maps to `onSurface` in both schemes.
The expression has resolved the content color this way since
`containerColor` and `contentColor` were added in
https://github.com/expo/expo/commit/ff70cc33c870996cbfd88656446e4c4c7f9b42e9
(https://github.com/expo/expo/pull/43972), when the file was still named
`BottomSheetView.kt`.
Verification
Repro app: `create-expo-app` blank template with `userInterfaceStyle:
"dark"`, `expo@57.0.16`, `react-native@0.86.2`, `@expo/ui@57.0.13`. Two
EAS Android development builds of the same app, installed one after the
other on the same hosted emulator session; the second one carries this
change as a `patch-package` patch and compiles expo-ui from source.
The emulator draws no navigation bar — its accessibility tree has no
Back, Home or Recents node, and app content reaches the bottom edge — so
the measured quantity is the status bar icon color. Material3 sets
`isAppearanceLightStatusBars` and `isAppearanceLightNavigationBars` from
the same expression, so the status bar is a read-out of the same flag.
The white navigation bar in the linked report was not reproduced pixel
for pixel.
| arm | setup | stock build | build with this change |
| --- | --- | --- | --- |
| A | community `BottomSheet`, `backgroundStyle` `#101014` | black
icons, invisible | white icons, visible |
| B | `ModalBottomSheet`, `containerColor` `#101014` | black icons,
invisible | white icons, visible |
| C | `ModalBottomSheet`, `#101014` + `contentColor` `#FFFFFF` | white
icons, visible | white icons, visible |
| E | `ModalBottomSheet`, `containerColor` `#FFFFFF` | black icons,
correct | black icons, correct |
| F | `Host colorScheme="dark"`, theme default container color | white
icons, visible | white icons, visible |
| G | `Host colorScheme="light"`, theme default container color | black
icons, correct | black icons, correct |
Arm C isolates the mechanism: it differs from arm B only in the content
color. Arms C, E, F and G are the guards for this default change — an
explicit `contentColor`, a light custom background, and the theme's own
container color under both schemes — and they are identical on both
builds.
The device appearance setting changed between the two installs; no arm
depends on it, because A/B/C/E set their colors explicitly and F/G force
the scheme through `Host colorScheme`. An earlier arm that relied on the
emulator's own dark mode was dropped for that reason. No arm put Compose
content inside a sheet, so the `LocalContentColor` change described
above is reasoned from the code and not measured.
Checks run
In a checkout of this repository at
`bde9b918e1614d69768c1f65a419f1c90a1272f5` with the change applied, in
`packages/expo-ui`:
- `pnpm run typecheck` — exit 0
- `pnpm run lint` — 0 warnings, 0 errors over 345 files
- `pnpm test` — 31 suites, 174 tests, 17 snapshots, all passing
These are JavaScript checks and do not compile Kotlin. The Kotlin
compiles: the EAS Android build that carries this change builds expo-ui
from source and finished successfully.
Not covered
- No physical Samsung A55 and no One UI device, and the emulator draws
no navigation bar. How One UI paints a light navigation bar appearance
was not observed by this run.
- Android only. The iOS `BottomSheet` is a separate implementation and
is untouched.
- The `LocalContentColor` change inside the sheet was not measured on
device.
Options considered
1. **Add a `contentColor` prop to the community `BottomSheet` and
forward it, as the report proposes.** Touches
`src/community/bottom-sheet/types.ts` and `BottomSheet.android.tsx`, and
adds a prop that `@gorhom/bottom-sheet` does not have, so the component
stops mirroring the API it is compatible with. It also leaves the
default wrong, so every app with a dark `backgroundStyle` still has to
opt out. Rejected: it is an API addition that works around the defect
instead of fixing it, and `jetpack-compose`'s `ModalBottomSheet` already
accepts `contentColor` for anyone who wants to set it explicitly.
2. **Pass `isAppearanceLightStatusBars` /
`isAppearanceLightNavigationBars` through
`ModalBottomSheetProperties`.** Material3 accepts both, so the system
bars could be set directly. This needs two new record fields, two new JS
props and documentation for them, and it still needs a sensible default,
which is the same luminance decision made in a second place. Rejected:
more surface area for the same decision.
3. **Do nothing and document that a custom `backgroundStyle` needs a
matching `contentColor`.** No runtime risk. Rejected: the resulting
default is a black content color under a dark sheet, which is not a
defensible default in any theme, and it makes every app pay for a
library defect.
4. **Derive the default content color from the container color's
luminance when it matches no color-scheme role.** Chosen: it fixes the
cause in one expression, changes nothing for an explicit `contentColor`,
for a theme-role color, or for the default container color, and the four
guard arms above confirm that on device.
---------
Co-authored-by: expo-bot
---
packages/expo-ui/CHANGELOG.md | 1 +
.../java/expo/modules/ui/ModalBottomSheetView.kt | 13 ++++++++++++-
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/packages/expo-ui/CHANGELOG.md b/packages/expo-ui/CHANGELOG.md
index 14738480b61cf0..ba4950b8e41bb3 100644
--- a/packages/expo-ui/CHANGELOG.md
+++ b/packages/expo-ui/CHANGELOG.md
@@ -28,6 +28,7 @@
### 🐛 Bug fixes
+- [Android] Fix the system status bar and navigation bar turning light while a `BottomSheet` or `ModalBottomSheet` with a custom dark background is open. A custom container color matches no color-scheme role, so the default content color fell back to black and Material3 themed the sheet window's system bars from it. The default content color is now derived from the container color's luminance, so it also contrasts with a custom background. ([#49394](https://github.com/expo/expo/pull/49394) by [@expo-bot](https://github.com/expo-bot))
- [iOS] Fixed a crash when a focused `TextField` or `SecureField` is unmounted inside a list row that is being removed, for example closing a modal with the keyboard up on a field nested in `SwipeActions`. Hosted text inputs now blur before React removes their native views. ([#49348](https://github.com/expo/expo/issues/49348) by [@nishan](https://github.com/intergalacticspacehighway)) ([#49357](https://github.com/expo/expo/pull/49357) by [@expo-tuft[bot]](https://github.com/apps/expo-tuft))
- Fixed the keyboard staying open when tapping outside a text field hosted by ``. A parent `ScrollView`'s tap-to-dismiss, its `keyboardShouldPersistTaps` setting, and `Keyboard.dismiss()` now reach hosted text fields. React Native treats the whole `` as the input, so a tap on other content inside the same host still keeps the keyboard open. ([#48788](https://github.com/expo/expo/pull/48788) by [@intergalacticspacehighway](https://github.com/intergalacticspacehighway))
- [Android] Fix the dev menu not opening with the menu key (Cmd+M) while a `BottomSheet` is open. Material3 shows the sheet in its own dialog window, so key events did not reach the activity. The sheet now forwards them, as React Native's `Modal` does, unless a view in the sheet is accepting text. ([#49215](https://github.com/expo/expo/pull/49215) by [@expo-bot](https://github.com/expo-bot))
diff --git a/packages/expo-ui/android/src/main/java/expo/modules/ui/ModalBottomSheetView.kt b/packages/expo-ui/android/src/main/java/expo/modules/ui/ModalBottomSheetView.kt
index e90edd3fd682f1..8b531bb20aba0f 100644
--- a/packages/expo-ui/android/src/main/java/expo/modules/ui/ModalBottomSheetView.kt
+++ b/packages/expo-ui/android/src/main/java/expo/modules/ui/ModalBottomSheetView.kt
@@ -10,6 +10,7 @@ import android.view.KeyEvent
import android.view.inputmethod.InputMethodManager
import androidx.compose.material3.BottomSheetDefaults
import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ModalBottomSheet
import androidx.compose.material3.ModalBottomSheetProperties
import androidx.compose.material3.contentColorFor
@@ -18,6 +19,9 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.ui.graphics.Color as ComposeColor
+import androidx.compose.ui.graphics.luminance
+import androidx.compose.ui.graphics.takeOrElse
import androidx.compose.ui.platform.LocalView
import androidx.compose.ui.window.DialogWindowProvider
import expo.modules.kotlin.records.Field
@@ -135,7 +139,14 @@ fun FunctionalComposableScope.ModalBottomSheetContent(
}
val resolvedContainerColor = props.containerColor.composeOrNull ?: BottomSheetDefaults.ContainerColor
- val resolvedContentColor = props.contentColor.composeOrNull ?: contentColorFor(resolvedContainerColor)
+ // Material3 themes the sheet window's system bars from the content color, so it has to contrast
+ // with the container color. contentColorFor() returns LocalContentColor for a container color that
+ // is not a color-scheme role, and that is black outside a Surface. A dark custom container color
+ // then asked for light system bars, which turned the navigation bar white.
+ val resolvedContentColor = props.contentColor.composeOrNull
+ ?: MaterialTheme.colorScheme.contentColorFor(resolvedContainerColor).takeOrElse {
+ if (resolvedContainerColor.luminance() > 0.5f) ComposeColor.Black else ComposeColor.White
+ }
val resolvedScrimColor = props.scrimColor.composeOrNull ?: BottomSheetDefaults.ScrimColor
val dragHandleSlotView = findChildSlotView(view, "dragHandle")
From b908c11986ca32bdb06841c5c268a88424849050 Mon Sep 17 00:00:00 2001
From: Alan Hughes <30924086+alanjhughes@users.noreply.github.com>
Date: Thu, 27 Aug 2026 11:27:15 +0100
Subject: [PATCH 02/19] [android][expo-go] Build the codegen CLI when the
submodule is missing it (#49384)
---
apps/expo-go/android/build.gradle | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/apps/expo-go/android/build.gradle b/apps/expo-go/android/build.gradle
index a8d7e0cd5defac..3ea5df6a8540b9 100644
--- a/apps/expo-go/android/build.gradle
+++ b/apps/expo-go/android/build.gradle
@@ -91,6 +91,20 @@ project(":packages:react-native:ReactAndroid").afterEvaluate { reactAndroid ->
reactAndroid.tasks.named("buildCodegenCLI").configure { it.enabled = false }
}
+// Every module's generateCodegenSchemaFromJavaScript reads react-native-codegen/lib
+// directly, so build it once when it is missing.
+def labCodegenDir = file("$rootDir/../../../react-native-lab/react-native/packages/react-native-codegen")
+tasks.register("buildLabCodegenCli", Exec) {
+ onlyIf { !new File(labCodegenDir, "lib/cli/combine/combine-js-to-schema-cli.js").exists() }
+ workingDir labCodegenDir
+ commandLine "bash", "scripts/oss/build.sh"
+}
+allprojects {
+ tasks.matching { it.name == "generateCodegenSchemaFromJavaScript" }.configureEach {
+ it.dependsOn(":buildLabCodegenCli")
+ }
+}
+
// Expo Go ships a release build that keeps the JS debugger. React Native gates those native defines
// behind REACT_NATIVE_DEBUG_OPTIMIZED, and its CMake guard only passes automatically when
// CMAKE_BUILD_TYPE is Debug. Release maps to RelWithDebInfo, which does not match, so set the flag
From 36a2ad6fae8debf72d105ad0de579ea47d9ce1e0 Mon Sep 17 00:00:00 2001
From: Vojtech Novak
Date: Thu, 27 Aug 2026 12:30:27 +0200
Subject: [PATCH 03/19] [ios][notifications] Support local notification
grouping via threadIdentifier (#49429)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
# Why
Part 1 of 2 for notification grouping via `threadIdentifier` (#28580).
This PR adds the iOS support;
`NotificationContentRecord` already declared and read back
`threadIdentifier`, but silently dropped it when building the native
notification — so the input never reached the system.
# How
- `NotificationContentRecord.toUNMutableNotificationContent` now sets
`threadIdentifier` on `UNMutableNotificationContent`, so scheduled local
notifications group natively in the notification center.
- `BackgroundEventTransformer` extracts `thread-id` from push payloads
and maps it to `threadIdentifier` in the emitted data, mirroring the
existing `categoryId` handling.
# Test Plan
- Swift Testing unit tests for the `thread-id` extraction in
`BackgroundEventTransformer`.
- Manual verification in `apps/notification-tester` on an iOS 27
simulator, driven by agent-device: scheduled 3 notifications each in
`chat-alice` and `chat-bob` threads plus one without a thread. The
notification center shows "Alice 3 notifications" and "Bob 3
notifications" stacks and one standalone notification;
# Checklist
- [x] I added a `changelog.md` entry and rebuilt the package sources
according to [this short
guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting)
- [ ] This diff will work correctly for `npx expo prebuild` & EAS Build
(no config plugin changes).
- [ ] Conforms with the [Documentation Writing Style
Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md)
Co-authored-by: Claude Fable 5
---
.../notification-tester/src/app/scenarios.tsx | 51 +++++++++++++++++++
.../data/unversioned/expo-notifications.json | 2 +-
packages/expo-notifications/CHANGELOG.md | 1 +
.../BackgroundEventTransformer.swift | 9 +++-
.../Notifications/NotificationRecords.swift | 4 ++
.../BackgroundEventTransformerTests.swift | 26 ++++++++++
.../src/Notifications.types.ts | 5 ++
7 files changed, 95 insertions(+), 3 deletions(-)
diff --git a/apps/notification-tester/src/app/scenarios.tsx b/apps/notification-tester/src/app/scenarios.tsx
index a44f87d7947764..cbd45e60b0c981 100644
--- a/apps/notification-tester/src/app/scenarios.tsx
+++ b/apps/notification-tester/src/app/scenarios.tsx
@@ -37,6 +37,57 @@ export default function ScenariosPage() {
}}
/>
+ Notification grouping (threadIdentifier)
+ {
+ for (let i = 1; i <= 3; i++) {
+ await Notifications.scheduleNotificationAsync({
+ content: {
+ title: `Alice`,
+ body: `Message ${i} from Alice`,
+ threadIdentifier: 'chat-alice',
+ },
+ trigger: null,
+ });
+ }
+ }}
+ />
+ {
+ for (let i = 1; i <= 3; i++) {
+ await Notifications.scheduleNotificationAsync({
+ content: {
+ title: `Bob`,
+ body: `Message ${i} from Bob`,
+ threadIdentifier: 'chat-bob',
+ },
+ trigger: null,
+ });
+ }
+ }}
+ />
+ {
+ await Notifications.scheduleNotificationAsync({
+ content: {
+ title: 'No thread',
+ body: 'This notification has no threadIdentifier',
+ },
+ trigger: null,
+ });
+ }}
+ />
+ {
+ const result = await Notifications.getPresentedNotificationsAsync();
+ alert(`Presented notifications: ${JSON.stringify(result, null, 2)}`);
+ }}
+ />
+
Send push notification with deep link The same functionality will be achieved on iOS with a "},{"kind":"code","text":"`CalendarNotificationTrigger`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"hour","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"minute","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"daily"}}]},{"name":"EventSubscription","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"A subscription object that allows to conveniently remove an event listener from the emitter."}]},"children":[{"name":"remove","variant":"declaration","kind":2048,"signatures":[{"name":"remove","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Removes an event listener for which the subscription has been created.\nAfter calling this function, the listener will no longer receive any events from the emitter."}]},"type":{"type":"intrinsic","name":"void"}}]}]},{"name":"ExpoPushToken","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"Object which contains the Expo push token in the "},{"kind":"code","text":"`data`"},{"kind":"text","text":" field. Use the value from "},{"kind":"code","text":"`data`"},{"kind":"text","text":" to send notifications via Expo Notifications service."}]},"children":[{"name":"data","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The acquired push token."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Always set to "},{"kind":"code","text":"`\"expo\"`"},{"kind":"text","text":"."}]},"type":{"type":"literal","value":"expo"}}]},{"name":"ExpoPushTokenOptions","variant":"declaration","kind":256,"children":[{"name":"applicationId","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The ID of the application to which the token should be attributed.\nDefaults to ["},{"kind":"code","text":"`Application.applicationId`"},{"kind":"text","text":"]("},{"kind":"relative-link","text":"./application/#applicationapplicationid"},{"kind":"text","text":") exposed by "},{"kind":"code","text":"`expo-application`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"baseUrl","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Endpoint URL override."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"development","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"On iOS, there are two push notification services: \"sandbox\" and \"production\".\nThis defines whether the push token is supposed to be used with the sandbox platform notification service.\nDefaults to ["},{"kind":"code","text":"`Application.getIosPushNotificationServiceEnvironmentAsync()`"},{"kind":"text","text":"]("},{"kind":"relative-link","text":"./application/#applicationgetiospushnotificationserviceenvironmentasync"},{"kind":"text","text":")\nexposed by "},{"kind":"code","text":"`expo-application`"},{"kind":"text","text":" or "},{"kind":"code","text":"`false`"},{"kind":"text","text":". Most probably you won't need to customize that.\nYou may want to customize that if you don't want to install "},{"kind":"code","text":"`expo-application`"},{"kind":"text","text":" and still use the sandbox APNs."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"deviceId","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"devicePushToken","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The device push token with which to register at the backend.\nDefaults to a token fetched with ["},{"kind":"code","text":"`getDevicePushTokenAsync()`"},{"kind":"text","text":"](#getdevicepushtokenasync)."}]},"type":{"type":"reference","name":"DevicePushToken","package":"expo-notifications"}},{"name":"projectId","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The ID of the project to which the token should be attributed.\nDefaults to ["},{"kind":"code","text":"`Constants.expoConfig.extra.eas.projectId`"},{"kind":"text","text":"]("},{"kind":"relative-link","text":"./constants/#easconfig"},{"kind":"text","text":") exposed by "},{"kind":"code","text":"`expo-constants`"},{"kind":"text","text":".\n\nWhen using EAS Build, this value is automatically set. However, it is\n**recommended** to set it manually. Once you have EAS Build configured, you can find\nthe value in **app.json** under "},{"kind":"code","text":"`extra.eas.projectId`"},{"kind":"text","text":". You can copy and paste it into your code.\nIf you are not using EAS Build, it will fallback to ["},{"kind":"code","text":"`Constants.expoConfig?.extra?.eas?.projectId`"},{"kind":"text","text":"]("},{"kind":"relative-link","text":"./constants/#manifest"},{"kind":"text","text":")."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"type","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Request body override."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"url","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Request URL override."}]},"type":{"type":"intrinsic","name":"string"}}]},{"name":"FirebaseRemoteMessage","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"A Firebase "},{"kind":"code","text":"`RemoteMessage`"},{"kind":"text","text":" that caused the notification to be delivered to the app."}]},"children":[{"name":"collapseKey","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"data","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"string"}],"name":"Record","package":"typescript"}},{"name":"from","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"messageId","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"messageType","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"notification","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"reference","name":"FirebaseRemoteMessageNotification","package":"expo-notifications"},{"type":"literal","value":null}]}},{"name":"originalPriority","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"priority","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"sentTime","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"to","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"ttl","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]},{"name":"FirebaseRemoteMessageNotification","variant":"declaration","kind":256,"children":[{"name":"body","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"bodyLocalizationArgs","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"array","elementType":{"type":"intrinsic","name":"string"}},{"type":"literal","value":null}]}},{"name":"bodyLocalizationKey","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"channelId","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"clickAction","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"color","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"eventTime","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"literal","value":null}]}},{"name":"icon","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"imageUrl","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"lightSettings","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"array","elementType":{"type":"intrinsic","name":"number"}},{"type":"literal","value":null}]}},{"name":"link","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"localOnly","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"notificationCount","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"literal","value":null}]}},{"name":"notificationPriority","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"literal","value":null}]}},{"name":"sound","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"sticky","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"tag","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"ticker","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"title","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"titleLocalizationArgs","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"array","elementType":{"type":"intrinsic","name":"string"}},{"type":"literal","value":null}]}},{"name":"titleLocalizationKey","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"usesDefaultLightSettings","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"usesDefaultSound","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"usesDefaultVibrateSettings","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"vibrateTimings","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"array","elementType":{"type":"intrinsic","name":"number"}},{"type":"literal","value":null}]}},{"name":"visibility","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"literal","value":null}]}}]},{"name":"IosNotificationPermissionsRequest","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"Available configuration for permission request on iOS platform.\nSee Apple documentation for ["},{"kind":"code","text":"`UNAuthorizationOptions`"},{"kind":"text","text":"](https://developer.apple.com/documentation/usernotifications/unauthorizationoptions) to learn more."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"children":[{"name":"allowAlert","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The ability to display alerts."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"allowBadge","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The ability to update the app’s badge."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"allowCriticalAlerts","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The ability to play sounds for critical alerts."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"allowDisplayInCarPlay","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The ability to display notifications in a CarPlay environment."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"allowProvisional","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The ability to post noninterrupting notifications provisionally to the Notification Center."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"allowSound","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The ability to play sounds."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"provideAppNotificationSettings","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"An option indicating the system should display a button for in-app notification settings."}]},"type":{"type":"intrinsic","name":"boolean"}}]},{"name":"LocationNotificationTrigger","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"A trigger related to a ["},{"kind":"code","text":"`UNLocationNotificationTrigger`"},{"kind":"text","text":"](https://developer.apple.com/documentation/usernotifications/unlocationnotificationtrigger?language=objc)."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"children":[{"name":"region","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"reference","name":"CircularRegion","package":"expo-notifications"},{"type":"reference","name":"BeaconRegion","package":"expo-notifications"}]}},{"name":"repeats","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"location"}}]},{"name":"MonthlyNotificationTrigger","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"A trigger related to a monthly notification.\n> The same functionality will be achieved on iOS with a "},{"kind":"code","text":"`CalendarNotificationTrigger`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"day","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"hour","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"minute","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"monthly"}}]},{"name":"NativeDevicePushToken","variant":"declaration","kind":256,"children":[{"name":"data","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"ios"},{"type":"literal","value":"android"}]}}]},{"name":"Notification","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"An object which represents a single notification that has been triggered by some request (["},{"kind":"code","text":"`NotificationRequest`"},{"kind":"text","text":"](#notificationrequest)) at some point in time."}]},"children":[{"name":"date","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"request","variant":"declaration","kind":1024,"type":{"type":"reference","name":"NotificationRequest","package":"expo-notifications"}}]},{"name":"NotificationAction","variant":"declaration","kind":256,"children":[{"name":"buttonTitle","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The title of the button triggering this action."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"identifier","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"A unique string that identifies this action. If a user takes this action (for example, selects this button in the system's Notification UI),\nyour app will receive this "},{"kind":"code","text":"`actionIdentifier`"},{"kind":"text","text":" via the ["},{"kind":"code","text":"`NotificationResponseReceivedListener`"},{"kind":"text","text":"](#addnotificationresponsereceivedlistenerlistener)."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"options","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Object representing the additional configuration options."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"isAuthenticationRequired","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Boolean indicating whether triggering the action will require authentication from the user."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"isDestructive","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Boolean indicating whether the button title will be highlighted a different color (usually red).\nThis usually signifies a destructive action such as deleting data."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"opensAppToForeground","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Boolean indicating whether triggering this action foregrounds the app.\nIf "},{"kind":"code","text":"`false`"},{"kind":"text","text":" and your app is killed (not just backgrounded), ["},{"kind":"code","text":"`NotificationResponseReceived`"},{"kind":"text","text":" listeners](#addnotificationresponsereceivedlistenerlistener)\nwill not be triggered when a user selects this action."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"type":{"type":"intrinsic","name":"boolean"}}]}}},{"name":"textInput","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Object which, if provided, will result in a button that prompts the user for a text response."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"placeholder","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"A string that serves as a placeholder until the user begins typing. Defaults to no placeholder string."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"submitButtonTitle","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"A string which will be used as the title for the button used for submitting the text response."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"string"}}]}}}]},{"name":"NotificationBehavior","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"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 ["},{"kind":"code","text":"`UNNotificationPresentationOptions`"},{"kind":"text","text":"](https://developer.apple.com/documentation/usernotifications/unnotificationpresentationoptions).\n> On Android, setting "},{"kind":"code","text":"`shouldPlaySound: false`"},{"kind":"text","text":" will result in the drop-down notification alert **not** showing, no matter what the priority is.\n> This setting will also override any channel-specific sounds you may have configured."}]},"children":[{"name":"priority","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"AndroidNotificationPriority","package":"expo-notifications"}},{"name":"shouldPlaySound","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"shouldSetBadge","variant":"declaration","kind":1024,"comment":{"summary":[],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"shouldShowAlert","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@deprecated","content":[{"kind":"text","text":"instead, specify "},{"kind":"code","text":"`shouldShowBanner`"},{"kind":"text","text":" and / or "},{"kind":"code","text":"`shouldShowList`"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"shouldShowBanner","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"shouldShowList","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}}]},{"name":"NotificationCategory","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"Defines a group of notification actions and their behavior. Categories allow you to create custom\naction buttons that appear with notifications, enabling users to respond to notifications.\n\nCategories must be registered with ["},{"kind":"code","text":"`setNotificationCategoryAsync`"},{"kind":"text","text":"](#setnotificationcategoryasyncidentifier-actions-options)\nbefore they can be used. When scheduling a notification, reference the category by its "},{"kind":"code","text":"`identifier`"},{"kind":"text","text":" in the\n["},{"kind":"code","text":"`NotificationContentInput.categoryIdentifier`"},{"kind":"text","text":"](#notificationcontentinput) field."}]},"children":[{"name":"actions","variant":"declaration","kind":1024,"type":{"type":"array","elementType":{"type":"reference","name":"NotificationAction","package":"expo-notifications"}}},{"name":"identifier","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}},{"name":"options","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"NotificationCategoryOptions","package":"expo-notifications"}}]},{"name":"NotificationChannel","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"An object which represents a notification channel."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"audioAttributes","variant":"declaration","kind":1024,"type":{"type":"reference","name":"AudioAttributes","package":"expo-notifications"}},{"name":"bypassDnd","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"description","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"enableLights","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"enableVibrate","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"groupId","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"id","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}},{"name":"importance","variant":"declaration","kind":1024,"type":{"type":"reference","name":"AndroidImportance","package":"expo-notifications"}},{"name":"lightColor","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}},{"name":"lockscreenVisibility","variant":"declaration","kind":1024,"type":{"type":"reference","name":"AndroidNotificationVisibility","package":"expo-notifications"}},{"name":"name","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"showBadge","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"sound","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"default"},{"type":"literal","value":"custom"},{"type":"literal","value":null}]}},{"name":"vibrationPattern","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"array","elementType":{"type":"intrinsic","name":"number"}},{"type":"literal","value":null}]}}]},{"name":"NotificationChannelGroup","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"An object which represents a notification channel group."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"channels","variant":"declaration","kind":1024,"type":{"type":"array","elementType":{"type":"reference","name":"NotificationChannel","package":"expo-notifications"}}},{"name":"description","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"id","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}},{"name":"isBlocked","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}},{"name":"name","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}}]},{"name":"NotificationChannelGroupInput","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"An object which represents a notification channel group to be set."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"description","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"name","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}}]},{"name":"NotificationChannelGroupManager","variant":"declaration","kind":256,"children":[{"name":"addListener","variant":"declaration","kind":1024,"flags":{"isOptional":true,"isInherited":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"eventName","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"void"}}]}},"inheritedFrom":{"type":"reference","name":"ProxyNativeModule.addListener"}},{"name":"deleteNotificationChannelGroupAsync","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"groupId","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]}}},{"name":"getNotificationChannelGroupAsync","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"groupId","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"reference","name":"NotificationChannelGroup","package":"expo-notifications"},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}}]}}},{"name":"getNotificationChannelGroupsAsync","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"array","elementType":{"type":"reference","name":"NotificationChannelGroup","package":"expo-notifications"}}],"name":"Promise","package":"typescript"}}]}}},{"name":"removeListeners","variant":"declaration","kind":1024,"flags":{"isOptional":true,"isInherited":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"count","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"intrinsic","name":"void"}}]}},"inheritedFrom":{"type":"reference","name":"ProxyNativeModule.removeListeners"}},{"name":"setNotificationChannelGroupAsync","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"groupId","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}},{"name":"group","variant":"param","kind":32768,"type":{"type":"reference","name":"NotificationChannelGroupInput","package":"expo-notifications"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"reference","name":"NotificationChannelGroup","package":"expo-notifications"},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}}]}}}],"indexSignatures":[{"name":"__index","variant":"signature","kind":8192,"parameters":[{"name":"key","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"any"}}],"extendedTypes":[{"type":"reference","target":{"packageName":"expo-modules-core","packagePath":"src/NativeModulesProxy.types.ts","qualifiedName":"ProxyNativeModule"},"name":"ProxyNativeModule","package":"expo-modules-core"}]},{"name":"NotificationChannelManager","variant":"declaration","kind":256,"children":[{"name":"addListener","variant":"declaration","kind":1024,"flags":{"isOptional":true,"isInherited":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"eventName","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"void"}}]}},"inheritedFrom":{"type":"reference","name":"ProxyNativeModule.addListener"}},{"name":"deleteNotificationChannelAsync","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"channelId","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]}}},{"name":"getNotificationChannelAsync","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"channelId","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"reference","name":"NotificationChannel","package":"expo-notifications"},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}}]}}},{"name":"getNotificationChannelsAsync","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"array","elementType":{"type":"reference","name":"NotificationChannel","package":"expo-notifications"}},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}}]}}},{"name":"removeListeners","variant":"declaration","kind":1024,"flags":{"isOptional":true,"isInherited":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"count","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"intrinsic","name":"void"}}]}},"inheritedFrom":{"type":"reference","name":"ProxyNativeModule.removeListeners"}},{"name":"setNotificationChannelAsync","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"channelId","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}},{"name":"channelConfiguration","variant":"param","kind":32768,"type":{"type":"reference","name":"NotificationChannelInput","package":"expo-notifications"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"reference","name":"NotificationChannel","package":"expo-notifications"},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}}]}}}],"indexSignatures":[{"name":"__index","variant":"signature","kind":8192,"parameters":[{"name":"key","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"any"}}],"extendedTypes":[{"type":"reference","target":{"packageName":"expo-modules-core","packagePath":"src/NativeModulesProxy.types.ts","qualifiedName":"ProxyNativeModule"},"name":"ProxyNativeModule","package":"expo-modules-core"}]},{"name":"NotificationHandler","variant":"declaration","kind":256,"children":[{"name":"handleError","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"A function called whenever calling "},{"kind":"code","text":"`handleNotification()`"},{"kind":"text","text":" for an incoming notification fails."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"notificationId","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Identifier of the notification."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"error","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"An error which occurred in form of "},{"kind":"code","text":"`NotificationHandlingError`"},{"kind":"text","text":" object."}]},"type":{"type":"reference","name":"NotificationHandlingError","package":"expo-notifications"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"handleNotification","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"A function accepting an incoming notification returning a "},{"kind":"code","text":"`Promise`"},{"kind":"text","text":" resolving to a behavior (["},{"kind":"code","text":"`NotificationBehavior`"},{"kind":"text","text":"](#notificationbehavior))\napplicable to the notification"}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"notification","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"An object representing the notification."}]},"type":{"type":"reference","name":"Notification","package":"expo-notifications"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"reference","name":"NotificationBehavior","package":"expo-notifications"}],"name":"Promise","package":"typescript"}}]}}},{"name":"handleSuccess","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"A function called whenever an incoming notification is handled successfully."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"notificationId","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Identifier of the notification."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"void"}}]}}}]},{"name":"NotificationPermissionsRequest","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"An interface representing the permissions request scope configuration.\nEach option corresponds to a different native platform authorization option."}]},"children":[{"name":"android","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"On Android, all available permissions are granted by default, and if a user declines any permission, an app cannot prompt the user to change."}]},"type":{"type":"intrinsic","name":"object"}},{"name":"ios","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Available configuration for permission request on iOS platform."}]},"type":{"type":"reference","name":"IosNotificationPermissionsRequest","package":"expo-notifications"}}]},{"name":"NotificationPermissionsStatus","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"An object obtained by permissions get and request functions."}]},"children":[{"name":"android","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"importance","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"interruptionFilter","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"canAskAgain","variant":"declaration","kind":1024,"flags":{"isInherited":true},"comment":{"summary":[{"kind":"text","text":"Indicates if user can be asked again for specific permission.\nIf not, one should be directed to the Settings app\nin order to enable/disable the permission."}]},"type":{"type":"intrinsic","name":"boolean"},"inheritedFrom":{"type":"reference","name":"PermissionResponse.canAskAgain"}},{"name":"expires","variant":"declaration","kind":1024,"flags":{"isInherited":true},"comment":{"summary":[{"kind":"text","text":"Determines time when the permission expires."}]},"type":{"type":"reference","name":"PermissionExpiration","package":"expo-modules-core"},"inheritedFrom":{"type":"reference","name":"PermissionResponse.expires"}},{"name":"granted","variant":"declaration","kind":1024,"flags":{"isInherited":true},"comment":{"summary":[{"kind":"text","text":"A convenience boolean that indicates if the permission is granted."}]},"type":{"type":"intrinsic","name":"boolean"},"inheritedFrom":{"type":"reference","name":"PermissionResponse.granted"}},{"name":"ios","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"alertStyle","variant":"declaration","kind":1024,"type":{"type":"reference","name":"IosAlertStyle","package":"expo-notifications"}},{"name":"allowsAlert","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"literal","value":null}]}},{"name":"allowsAnnouncements","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"literal","value":null}]}},{"name":"allowsBadge","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"literal","value":null}]}},{"name":"allowsCriticalAlerts","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"literal","value":null}]}},{"name":"allowsDisplayInCarPlay","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"literal","value":null}]}},{"name":"allowsDisplayInNotificationCenter","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"literal","value":null}]}},{"name":"allowsDisplayOnLockScreen","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"literal","value":null}]}},{"name":"allowsPreviews","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"reference","name":"IosAllowsPreviews","package":"expo-notifications"},{"type":"literal","value":null}]}},{"name":"allowsSound","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"literal","value":null}]}},{"name":"providesAppNotificationSettings","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"literal","value":null}]}},{"name":"status","variant":"declaration","kind":1024,"type":{"type":"reference","name":"IosAuthorizationStatus","package":"expo-notifications"}}]}}},{"name":"status","variant":"declaration","kind":1024,"flags":{"isInherited":true},"comment":{"summary":[{"kind":"text","text":"Determines the status of the permission."}]},"type":{"type":"reference","name":"PermissionStatus","package":"expo-modules-core"},"inheritedFrom":{"type":"reference","name":"PermissionResponse.status"}}],"extendedTypes":[{"type":"reference","name":"PermissionResponse","package":"expo-modules-core"}]},{"name":"NotificationRequest","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"An object represents a request to present a notification. It has content — how it's being represented, and a trigger — what triggers the notification.\nMany notifications (["},{"kind":"code","text":"`Notification`"},{"kind":"text","text":"](#notification)) may be triggered with the same request (for example, a repeating notification)."}]},"children":[{"name":"content","variant":"declaration","kind":1024,"type":{"type":"reference","name":"NotificationContent","package":"expo-notifications"}},{"name":"identifier","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}},{"name":"trigger","variant":"declaration","kind":1024,"type":{"type":"reference","name":"NotificationTrigger","package":"expo-notifications"}}]},{"name":"NotificationRequestInput","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"An object which represents a notification request you can pass into "},{"kind":"code","text":"`scheduleNotificationAsync`"},{"kind":"text","text":"."}]},"children":[{"name":"content","variant":"declaration","kind":1024,"type":{"type":"reference","name":"NotificationContentInput","package":"expo-notifications"}},{"name":"identifier","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"trigger","variant":"declaration","kind":1024,"type":{"type":"reference","name":"NotificationTriggerInput","package":"expo-notifications"}}]},{"name":"NotificationResponse","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"An object which represents user's interaction with the notification.\n> **Note:** If the user taps on a notification, "},{"kind":"code","text":"`actionIdentifier`"},{"kind":"text","text":" will be equal to ["},{"kind":"code","text":"`Notifications.DEFAULT_ACTION_IDENTIFIER`"},{"kind":"text","text":"](#notificationsdefault_action_identifier)."}]},"children":[{"name":"actionIdentifier","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}},{"name":"notification","variant":"declaration","kind":1024,"type":{"type":"reference","name":"Notification","package":"expo-notifications"}},{"name":"userText","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}}]},{"name":"Region","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"The region used to determine when the system sends the notification."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"children":[{"name":"identifier","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The identifier for the region object."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"notifyOnEntry","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Indicates whether notifications are generated upon entry into the region."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"notifyOnExit","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Indicates whether notifications are generated upon exit from the region."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}}],"extendedBy":[{"type":"reference","name":"CircularRegion"},{"type":"reference","name":"BeaconRegion"}]},{"name":"TimeIntervalNotificationTrigger","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"A trigger related to an elapsed time interval. May be repeating (see "},{"kind":"code","text":"`repeats`"},{"kind":"text","text":" field)."}]},"children":[{"name":"repeats","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"seconds","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"timeInterval"}}]},{"name":"UnknownNotificationTrigger","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"Represents a notification trigger that is unknown to "},{"kind":"code","text":"`expo-notifications`"},{"kind":"text","text":" and that it didn't know how to serialize for JS."}]},"children":[{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"unknown"}}]},{"name":"WeeklyNotificationTrigger","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"A trigger related to a weekly notification.\n> The same functionality will be achieved on iOS with a "},{"kind":"code","text":"`CalendarNotificationTrigger`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"hour","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"minute","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"weekly"}},{"name":"weekday","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]},{"name":"YearlyNotificationTrigger","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"A trigger related to a yearly notification.\n> The same functionality will be achieved on iOS with a "},{"kind":"code","text":"`CalendarNotificationTrigger`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"day","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"hour","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"minute","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"month","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"yearly"}}]},{"name":"AudioAttributesInput","variant":"declaration","kind":2097152,"comment":{"summary":[],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reference","name":"AudioAttributes","package":"expo-notifications"}],"name":"Partial","package":"typescript"}},{"name":"CalendarTriggerInput","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"This trigger input will cause the notification to be delivered once or many times\n(controlled by the value of "},{"kind":"code","text":"`repeats`"},{"kind":"text","text":")\nwhen the date components match the specified values.\nCorresponds to native\n["},{"kind":"code","text":"`UNCalendarNotificationTrigger`"},{"kind":"text","text":"](https://developer.apple.com/documentation/usernotifications/uncalendarnotificationtrigger?language=objc)."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"children":[{"name":"channelId","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"day","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"hour","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"minute","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"month","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"repeats","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}},{"name":"second","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"seconds","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"timezone","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"reference","name":"SchedulableTriggerInputTypes.CALENDAR","package":"expo-notifications"}},{"name":"weekday","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"weekdayOrdinal","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"weekOfMonth","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"weekOfYear","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"year","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]},{"name":"ChannelAwareTriggerInput","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"A trigger that will cause the notification to be delivered immediately."}]},"children":[{"name":"channelId","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}}]},{"name":"DailyTriggerInput","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"This trigger input will cause the notification to be delivered once per day\nwhen the "},{"kind":"code","text":"`hour`"},{"kind":"text","text":" and "},{"kind":"code","text":"`minute`"},{"kind":"text","text":" date components match the specified values."}]},"children":[{"name":"channelId","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"hour","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"minute","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"reference","name":"SchedulableTriggerInputTypes.DAILY","package":"expo-notifications"}}]},{"name":"DateTriggerInput","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"This trigger input will cause the notification to be delivered once\non the specified value of the "},{"kind":"code","text":"`date`"},{"kind":"text","text":" property. The value of "},{"kind":"code","text":"`repeats`"},{"kind":"text","text":" will be ignored\nfor this trigger type."}]},"children":[{"name":"channelId","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"date","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Date"},"name":"Date","package":"typescript"},{"type":"intrinsic","name":"number"}]}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"reference","name":"SchedulableTriggerInputTypes.DATE","package":"expo-notifications"}}]},{"name":"DevicePushToken","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"In simple terms, an object of "},{"kind":"code","text":"`type: Platform.OS`"},{"kind":"text","text":" and "},{"kind":"code","text":"`data: any`"},{"kind":"text","text":". The "},{"kind":"code","text":"`data`"},{"kind":"text","text":" type depends on the environment - on a native device it will be a string,\nwhich you can then use to send notifications via Firebase Cloud Messaging (Android) or APNs (iOS)."}]},"type":{"type":"union","types":[{"type":"reference","name":"ExplicitlySupportedDevicePushToken","package":"expo-notifications"},{"type":"reference","name":"ImplicitlySupportedDevicePushToken","package":"expo-notifications"}]}},{"name":"ExplicitlySupportedDevicePushToken","variant":"declaration","kind":2097152,"type":{"type":"reference","name":"NativeDevicePushToken","package":"expo-notifications"}},{"name":"ImplicitlySupportedDevicePushToken","variant":"declaration","kind":2097152,"children":[{"name":"data","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The push token as a string for a native platform."}]},"type":{"type":"intrinsic","name":"any"}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Either "},{"kind":"code","text":"`android`"},{"kind":"text","text":" or "},{"kind":"code","text":"`ios`"},{"kind":"text","text":"."}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Exclude"},"typeArguments":[{"type":"query","queryType":{"type":"reference","target":{"packageName":"expo-modules-core","packagePath":"src/Platform.ts","qualifiedName":"__object.OS"},"name":"Platform.OS","package":"expo-modules-core","qualifiedName":"__object.OS","preferValues":true}},{"type":"indexedAccess","indexType":{"type":"literal","value":"type"},"objectType":{"type":"reference","name":"ExplicitlySupportedDevicePushToken","package":"expo-notifications"}}],"name":"Exclude","package":"typescript"}}]},{"name":"InterruptionLevel","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"The notification’s importance and required delivery timing.\nPossible values:\n- 'passive' - the system adds the notification to the notification list without lighting up the screen or playing a sound\n- 'active' - the system presents the notification immediately, lights up the screen, and can play a sound\n- 'timeSensitive' - The system presents the notification immediately, lights up the screen, can play a sound, and breaks through system notification controls\n- 'critical - the system presents the notification immediately, lights up the screen, and bypasses the mute switch to play a sound"}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"passive"},{"type":"literal","value":"active"},{"type":"literal","value":"timeSensitive"},{"type":"literal","value":"critical"}]}},{"name":"MonthlyTriggerInput","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"This trigger input will cause the notification to be delivered once per month\nwhen the "},{"kind":"code","text":"`day`"},{"kind":"text","text":", "},{"kind":"code","text":"`hour`"},{"kind":"text","text":", and "},{"kind":"code","text":"`minute`"},{"kind":"text","text":" date components match the specified values.\n> **Note:** All properties are specified in JavaScript "},{"kind":"code","text":"`Date`"},{"kind":"text","text":" object's ranges (i.e. January is represented as 0)."}]},"children":[{"name":"channelId","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"day","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"hour","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"minute","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"reference","name":"SchedulableTriggerInputTypes.MONTHLY","package":"expo-notifications"}}]},{"name":"NativeNotificationPermissionsRequest","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"reference","name":"IosNotificationPermissionsRequest","package":"expo-notifications"},{"type":"intrinsic","name":"object"}]}},{"name":"NotificationCategoryOptions","variant":"declaration","kind":2097152,"comment":{"summary":[],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"children":[{"name":"allowAnnouncement","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@deprecated","content":[{"kind":"text","text":"the option is ignored by iOS. This option will be removed in a future release.\nIndicates whether to allow notifications to be automatically read by Siri when the user is using AirPods."}]},{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"allowInCarPlay","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Indicates whether to allow CarPlay to display notifications of this type. **Apps must be approved for CarPlay to make use of this feature.**"}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"categorySummaryFormat","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"A format string for the summary description used when the system groups the category’s notifications."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"customDismissAction","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Indicates whether to send actions for handling when the notification is dismissed (the user must explicitly dismiss\nthe notification interface - ignoring a notification or flicking away a notification banner does not trigger this action)."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"intentIdentifiers","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Array of [Intent Class Identifiers](https://developer.apple.com/documentation/sirikit/intent_class_identifiers). When a notification is delivered,\nthe presence of an intent identifier lets the system know that the notification is potentially related to the handling of a request made through Siri."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"[]"}]}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"name":"previewPlaceholder","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Customizable placeholder for the notification preview text. This is shown if the user has disabled notification previews for the app.\nDefaults to the localized iOS system default placeholder ("},{"kind":"code","text":"`Notification`"},{"kind":"text","text":")."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"showSubtitle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Indicates whether to show the notification's subtitle, even if the user has disabled notification previews for the app."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"showTitle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Indicates whether to show the notification's title, even if the user has disabled notification previews for the app."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}}]},{"name":"NotificationChannelInput","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"An object which represents a notification channel to be set."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"reference","typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Omit"},"typeArguments":[{"type":"reference","name":"NotificationChannel","package":"expo-notifications"},{"type":"union","types":[{"type":"literal","value":"id"},{"type":"literal","value":"audioAttributes"},{"type":"literal","value":"sound"}]}],"name":"Omit","package":"typescript"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"audioAttributes","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"AudioAttributesInput","package":"expo-notifications"}},{"name":"sound","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}}]}}]},{"type":"union","types":[{"type":"literal","value":"name"},{"type":"literal","value":"importance"}]}],"name":"RequiredBy","package":"expo-notifications"}},{"name":"NotificationContent","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"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 ["},{"kind":"code","text":"`NotificationContentInput`"},{"kind":"text","text":"](#notificationcontentinput)."}]},"type":{"type":"intersection","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"body","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Notification body - the main content of the notification."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"categoryIdentifier","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The identifier of the notification’s category."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"data","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Data associated with the notification, not displayed"}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"unknown"}],"name":"Record","package":"typescript"}},{"name":"sound","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"default"},{"type":"literal","value":"defaultCritical"},{"type":"literal","value":"custom"},{"type":"literal","value":"defaultRingtone"},{"type":"literal","value":null}]}},{"name":"subtitle","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"On Android: "},{"kind":"code","text":"`subText`"},{"kind":"text","text":" - the display depends on the device.\n\nOn iOS: "},{"kind":"code","text":"`subtitle`"},{"kind":"text","text":" - the bold text displayed between title and the rest of the content."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"title","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Notification title - the bold text displayed above the rest of the content."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}}]}},{"type":"union","types":[{"type":"reference","name":"NotificationContentIos","package":"expo-notifications"},{"type":"reference","name":"NotificationContentAndroid","package":"expo-notifications"}]}]}},{"name":"NotificationContentAndroid","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"See [Android developer documentation](https://developer.android.com/reference/android/app/Notification#fields) for more information on specific fields."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"badge","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Application badge number associated with the notification."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Accent color (in "},{"kind":"code","text":"`#AARRGGBB`"},{"kind":"text","text":" or "},{"kind":"code","text":"`#RRGGBB`"},{"kind":"text","text":" format) to be applied by the standard Style templates when presenting this notification."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"priority","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Relative priority for this notification. Priority is an indication of how much of the user's valuable attention should be consumed by this notification.\nLow-priority notifications may be hidden from the user in certain situations, while the user might be interrupted for a higher-priority notification.\nThe system will make a determination about how to interpret this priority when presenting the notification."}]},"type":{"type":"reference","name":"AndroidNotificationPriority","package":"expo-notifications"}},{"name":"vibrationPattern","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The pattern with which to vibrate."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"number"}}}]},{"name":"NotificationContentAttachmentIos","variant":"declaration","kind":2097152,"comment":{"summary":[],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"children":[{"name":"hideThumbnail","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}},{"name":"identifier","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"thumbnailClipArea","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"height","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"width","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"thumbnailTime","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"typeHint","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"url","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}}]},{"name":"NotificationContentInput","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"An object which represents notification content that you pass in as a part of "},{"kind":"code","text":"`NotificationRequestInput`"},{"kind":"text","text":"."}]},"children":[{"name":"attachments","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The visual and audio attachments to display alongside the notification’s main content."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"array","elementType":{"type":"reference","name":"NotificationContentAttachmentIos","package":"expo-notifications"}}},{"name":"autoDismiss","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If set to "},{"kind":"code","text":"`false`"},{"kind":"text","text":", the notification will not be automatically dismissed when clicked.\nThe setting will be used when the value is not provided or is invalid is set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", and the notification\nwill be dismissed automatically anyway. Corresponds directly to Android's "},{"kind":"code","text":"`setAutoCancel`"},{"kind":"text","text":" behavior.\n\nSee [Android developer documentation](https://developer.android.com/reference/android/app/Notification.Builder#setAutoCancel(boolean))\nfor more details."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"badge","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Application badge number associated with the notification."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"body","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The main content of the notification."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"categoryIdentifier","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The identifier of the notification’s category."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"string"}},{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Accent color (in "},{"kind":"code","text":"`#AARRGGBB`"},{"kind":"text","text":" or "},{"kind":"code","text":"`#RRGGBB`"},{"kind":"text","text":" format) to be applied by the standard Style templates when presenting this notification."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"intrinsic","name":"string"}},{"name":"data","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Data associated with the notification, not displayed."}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"unknown"}],"name":"Record","package":"typescript"}},{"name":"interruptionLevel","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The notification’s importance and required delivery timing.\nPossible values:\n- 'passive' - the system adds the notification to the notification list without lighting up the screen or playing a sound\n- 'active' - the system presents the notification immediately, lights up the screen, and can play a sound\n- 'timeSensitive' - The system presents the notification immediately, lights up the screen, can play a sound, and breaks through system notification controls\n- 'critical - the system presents the notification immediately, lights up the screen, and bypasses the mute switch to play a sound"}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","name":"InterruptionLevel","package":"expo-notifications"}},{"name":"launchImageName","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the image or storyboard to use when your app launches because of the notification."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"priority","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Relative priority for this notification. Priority is an indication of how much of the user's valuable attention should be consumed by this notification.\nLow-priority notifications may be hidden from the user in certain situations, while the user might be interrupted for a higher-priority notification.\nThe system will make a determination about how to interpret this priority when presenting the notification."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"intrinsic","name":"string"}},{"name":"sound","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The notification sound. Use "},{"kind":"code","text":"`false`"},{"kind":"text","text":" for a silent notification.\nOn Android version 8 and later, control the sounds via [notification channels](#setnotificationchannelasyncchannelid-channel).\n"},{"kind":"code","text":"`defaultCritical`"},{"kind":"text","text":" and "},{"kind":"code","text":"`defaultRingtone`"},{"kind":"text","text":" are applicable only on iOS, with "},{"kind":"code","text":"`defaultCritical`"},{"kind":"text","text":" requiring the critical alerts entitlement.\n\nOn iOS, you can also provide a custom sound filename including the extension. The file needs to be added\nto the "},{"kind":"code","text":"`expo-notifications`"},{"kind":"text","text":" config plugin "},{"kind":"code","text":"`sounds`"},{"kind":"text","text":" array in your app config."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"literal","value":"default"},{"type":"literal","value":"defaultCritical"},{"type":"literal","value":"defaultRingtone"},{"type":"intersection","types":[{"type":"intrinsic","name":"string"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536}}]}]}},{"name":"sticky","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the notification cannot be dismissed by swipe. This setting defaults\nto "},{"kind":"code","text":"`false`"},{"kind":"text","text":" if not provided or is invalid. Corresponds directly to Android's "},{"kind":"code","text":"`isOngoing`"},{"kind":"text","text":" behavior.\nIn Firebase terms this property of a notification is called "},{"kind":"code","text":"`sticky`"},{"kind":"text","text":".\n\nSee [Android developer documentation](https://developer.android.com/reference/android/app/Notification.Builder#setOngoing(boolean))\nand [Firebase documentation](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#AndroidNotification.FIELDS.sticky)\nfor more details."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"subtitle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"On Android: "},{"kind":"code","text":"`subText`"},{"kind":"text","text":" - the display depends on the device.\n\nOn iOS: "},{"kind":"code","text":"`subtitle`"},{"kind":"text","text":" - the bold text displayed between title and the rest of the content."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"title","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Notification title - the bold text displayed above the rest of the content."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"vibrate","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The pattern with which to vibrate."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"number"}}}]},{"name":"NotificationContentIos","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"See [Apple documentation](https://developer.apple.com/documentation/usernotifications/unnotificationcontent?language=objc) for more information on specific fields."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"children":[{"name":"attachments","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The visual and audio attachments to display alongside the notification’s main content."}]},"type":{"type":"array","elementType":{"type":"reference","name":"NotificationContentAttachmentIos","package":"expo-notifications"}}},{"name":"badge","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The number that your app’s icon displays."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"literal","value":null}]}},{"name":"interruptionLevel","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"InterruptionLevel","package":"expo-notifications"}},{"name":"launchImageName","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The name of the image or storyboard to use when your app launches because of the notification."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"summaryArgument","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The text the system adds to the notification summary to provide additional context."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"summaryArgumentCount","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The number the system adds to the notification summary when the notification represents multiple items."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"targetContentIdentifier","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The value your app uses to determine which scene to display to handle the notification."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"threadIdentifier","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The identifier that groups related notifications."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}}]},{"name":"NotificationHandlingError","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"reference","name":"NotificationTimeoutError","package":"expo-notifications"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Error"},"name":"Error","package":"typescript"}]}},{"name":"NotificationTaskPayload","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Payload for the background notification handler task.\nSee [Run JavaScript in response to incoming notifications](#run-javascript-in-response-to-incoming-notifications)."}]},"type":{"type":"union","types":[{"type":"reference","name":"NotificationResponse","package":"expo-notifications"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"aps","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Detailed, raw object describing the remote notification. See [Apple's payload key reference](https://developer.apple.com/documentation/usernotifications/generating-a-remote-notification#Payload-key-reference)."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"unknown"}],"name":"Record","package":"typescript"}},{"name":"data","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"code","text":"`dataString`"},{"kind":"text","text":" carries the data payload of the notification as JSON string."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"dataString","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}}],"indexSignatures":[{"name":"__index","variant":"signature","kind":8192,"parameters":[{"name":"key","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"unknown"}}]}}},{"name":"notification","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Object describing the remote notification. "},{"kind":"code","text":"`null`"},{"kind":"text","text":" for headless background notifications."}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"unknown"}],"name":"Record","package":"typescript"},{"type":"literal","value":null}]}}]}}]}},{"name":"NotificationTrigger","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"A union type containing different triggers which may cause the notification to be delivered to the application."}]},"type":{"type":"union","types":[{"type":"reference","name":"PushNotificationTrigger","package":"expo-notifications"},{"type":"reference","name":"LocationNotificationTrigger","package":"expo-notifications"},{"type":"reference","name":"NotificationTriggerInput","package":"expo-notifications"},{"type":"reference","name":"UnknownNotificationTrigger","package":"expo-notifications"}]}},{"name":"NotificationTriggerInput","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"A type which represents possible triggers with which you can schedule notifications.\nA "},{"kind":"code","text":"`null`"},{"kind":"text","text":" trigger means that the notification should be scheduled for delivery immediately."}]},"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","name":"ChannelAwareTriggerInput","package":"expo-notifications"},{"type":"reference","name":"SchedulableNotificationTriggerInput","package":"expo-notifications"}]}},{"name":"PermissionExpiration","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Permission expiration time. Currently, all permissions are granted permanently."}]},"type":{"type":"union","types":[{"type":"literal","value":"never"},{"type":"intrinsic","name":"number"}]}},{"name":"PermissionResponse","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"An object obtained by permissions get and request functions."}]},"children":[{"name":"canAskAgain","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Indicates if user can be asked again for specific permission.\nIf not, one should be directed to the Settings app\nin order to enable/disable the permission."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"expires","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Determines time when the permission expires."}]},"type":{"type":"reference","name":"PermissionExpiration","package":"expo-modules-core"}},{"name":"granted","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"A convenience boolean that indicates if the permission is granted."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"status","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Determines the status of the permission."}]},"type":{"type":"reference","name":"PermissionStatus","package":"expo-modules-core"}}],"extendedBy":[{"type":"reference","name":"NotificationPermissionsStatus"}]},{"name":"PushNotificationTrigger","variant":"declaration","kind":2097152,"children":[{"name":"payload","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"unknown"}],"name":"Record","package":"typescript"}},{"name":"remoteMessage","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"reference","name":"FirebaseRemoteMessage","package":"expo-notifications"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"push"}}]},{"name":"PushTokenListener","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"A function accepting a device push token (["},{"kind":"code","text":"`DevicePushToken`"},{"kind":"text","text":"](#devicepushtoken)) as an argument.\n> **Note:** You should not call "},{"kind":"code","text":"`getDevicePushTokenAsync`"},{"kind":"text","text":" inside this function, as it triggers the listener and may lead to an infinite loop."}],"blockTags":[{"tag":"@header","content":[{"kind":"text","text":"fetch"}]}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"token","variant":"param","kind":32768,"type":{"type":"reference","name":"DevicePushToken","package":"expo-notifications"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"SchedulableNotificationTriggerInput","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Input for time-based, schedulable triggers.\nFor these triggers you can check the next trigger date with ["},{"kind":"code","text":"`getNextTriggerDateAsync`"},{"kind":"text","text":"](#getnexttriggerdateasynctrigger).\nIf you pass in a "},{"kind":"code","text":"`number`"},{"kind":"text","text":" (Unix timestamp) or "},{"kind":"code","text":"`Date`"},{"kind":"text","text":", it will be processed as a\ntrigger input of type ["},{"kind":"code","text":"`SchedulableTriggerInputTypes.DATE`"},{"kind":"text","text":"](#date). Otherwise, the input must be\nan object, with a "},{"kind":"code","text":"`type`"},{"kind":"text","text":" value set to one of the allowed values in ["},{"kind":"code","text":"`SchedulableTriggerInputTypes`"},{"kind":"text","text":"](#schedulabletriggerinputtypes).\nIf the input is an object, date components passed in will be validated, and\nan error is thrown if they are outside their allowed range (for example, the "},{"kind":"code","text":"`minute`"},{"kind":"text","text":" and\n"},{"kind":"code","text":"`second`"},{"kind":"text","text":" components must be between 0 and 59 inclusive)."}]},"type":{"type":"union","types":[{"type":"reference","name":"CalendarTriggerInput","package":"expo-notifications"},{"type":"reference","name":"TimeIntervalTriggerInput","package":"expo-notifications"},{"type":"reference","name":"DailyTriggerInput","package":"expo-notifications"},{"type":"reference","name":"WeeklyTriggerInput","package":"expo-notifications"},{"type":"reference","name":"MonthlyTriggerInput","package":"expo-notifications"},{"type":"reference","name":"YearlyTriggerInput","package":"expo-notifications"},{"type":"reference","name":"DateTriggerInput","package":"expo-notifications"}]}},{"name":"Subscription","variant":"declaration","kind":2097152,"comment":{"summary":[],"blockTags":[{"tag":"@deprecated","content":[{"kind":"text","text":"use the ["},{"kind":"code","text":"`EventSubscription`"},{"kind":"text","text":"](#eventsubscription) type instead"}]}]},"type":{"type":"reference","name":"EventSubscription","package":"expo-modules-core"}},{"name":"TimeIntervalTriggerInput","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"This trigger input will cause the notification to be delivered once or many times\n(depends on the "},{"kind":"code","text":"`repeats`"},{"kind":"text","text":" field) after "},{"kind":"code","text":"`seconds`"},{"kind":"text","text":" time elapse.\n> **On iOS**, when "},{"kind":"code","text":"`repeats`"},{"kind":"text","text":" is "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the time interval must be 60 seconds or greater.\nOtherwise, the notification won't be triggered."}]},"children":[{"name":"channelId","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"repeats","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}},{"name":"seconds","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"reference","name":"SchedulableTriggerInputTypes.TIME_INTERVAL","package":"expo-notifications"}}]},{"name":"WeeklyTriggerInput","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"This trigger input will cause the notification to be delivered once every week\nwhen the "},{"kind":"code","text":"`weekday`"},{"kind":"text","text":", "},{"kind":"code","text":"`hour`"},{"kind":"text","text":", and "},{"kind":"code","text":"`minute`"},{"kind":"text","text":" date components match the specified values.\n> **Note:** Weekdays are specified with a number from "},{"kind":"code","text":"`1`"},{"kind":"text","text":" through "},{"kind":"code","text":"`7`"},{"kind":"text","text":", with "},{"kind":"code","text":"`1`"},{"kind":"text","text":" indicating Sunday."}]},"children":[{"name":"channelId","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"hour","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"minute","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"reference","name":"SchedulableTriggerInputTypes.WEEKLY","package":"expo-notifications"}},{"name":"weekday","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]},{"name":"YearlyTriggerInput","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"This trigger input will cause the notification to be delivered once every year\nwhen the "},{"kind":"code","text":"`day`"},{"kind":"text","text":", "},{"kind":"code","text":"`month`"},{"kind":"text","text":", "},{"kind":"code","text":"`hour`"},{"kind":"text","text":", and "},{"kind":"code","text":"`minute`"},{"kind":"text","text":" date components match the specified values.\n> **Note:** All properties are specified in JavaScript "},{"kind":"code","text":"`Date`"},{"kind":"text","text":" object's ranges (i.e. January is represented as 0)."}]},"children":[{"name":"channelId","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"day","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"hour","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"minute","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"month","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"reference","name":"SchedulableTriggerInputTypes.YEARLY","package":"expo-notifications"}}]},{"name":"DEFAULT_ACTION_IDENTIFIER","variant":"declaration","kind":32,"flags":{"isConst":true},"type":{"type":"literal","value":"expo.modules.notifications.actions.DEFAULT"},"defaultValue":"'expo.modules.notifications.actions.DEFAULT'"},{"name":"addNotificationReceivedListener","variant":"declaration","kind":64,"signatures":[{"name":"addNotificationReceivedListener","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Listeners registered by this method will be called whenever a notification is received while the app is running."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"An ["},{"kind":"code","text":"`EventSubscription`"},{"kind":"text","text":"](#eventsubscription) object represents the subscription of the provided listener."}]},{"tag":"@example","name":"Registering a notification listener using a React hook:","content":[{"kind":"code","text":"```jsx\nimport React from 'react';\nimport * as Notifications from 'expo-notifications';\n\nexport default function App() {\n React.useEffect(() => {\n const subscription = Notifications.addNotificationReceivedListener(notification => {\n console.log(notification);\n });\n return () => subscription.remove();\n }, []);\n\n return (\n // Your app content\n );\n}\n```"}]},{"tag":"@header","content":[{"kind":"text","text":"listen"}]}]},"parameters":[{"name":"listener","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A function accepting a notification (["},{"kind":"code","text":"`Notification`"},{"kind":"text","text":"](#notification)) as an argument."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"event","variant":"param","kind":32768,"type":{"type":"reference","name":"Notification","package":"expo-notifications"}}],"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"EventSubscription","package":"expo-modules-core"}}]},{"name":"addNotificationResponseReceivedListener","variant":"declaration","kind":64,"signatures":[{"name":"addNotificationResponseReceivedListener","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Listeners registered by this method will be called whenever a user interacts with a notification (for example, taps on it)."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"An ["},{"kind":"code","text":"`EventSubscription`"},{"kind":"text","text":"](#eventsubscription) object represents the subscription of the provided listener."}]},{"tag":"@example","name":"Register a notification responder listener:","content":[{"kind":"code","text":"```jsx\nimport React from 'react';\nimport { Linking } from 'react-native';\nimport * as Notifications from 'expo-notifications';\n\nexport default function Container() {\n React.useEffect(() => {\n const subscription = Notifications.addNotificationResponseReceivedListener(response => {\n const url = response.notification.request.content.data.url;\n Linking.openURL(url);\n });\n return () => subscription.remove();\n }, []);\n\n return (\n // Your app content\n );\n}\n```"}]},{"tag":"@header","content":[{"kind":"text","text":"listen"}]}]},"parameters":[{"name":"listener","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A function accepting notification response (["},{"kind":"code","text":"`NotificationResponse`"},{"kind":"text","text":"](#notificationresponse)) as an argument."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"event","variant":"param","kind":32768,"type":{"type":"reference","name":"NotificationResponse","package":"expo-notifications"}}],"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"EventSubscription","package":"expo-modules-core"}}]},{"name":"addNotificationsDroppedListener","variant":"declaration","kind":64,"signatures":[{"name":"addNotificationsDroppedListener","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Listeners registered by this method will be called whenever some notifications have been dropped by the server.\nApplicable only to Firebase Cloud Messaging which we use as a notifications service on Android. It corresponds to "},{"kind":"code","text":"`onDeletedMessages()`"},{"kind":"text","text":" callback.\nMore information can be found in [Firebase docs](https://firebase.google.com/docs/cloud-messaging/android/receive#override-ondeletedmessages)."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"An ["},{"kind":"code","text":"`EventSubscription`"},{"kind":"text","text":"](#eventsubscription) object represents the subscription of the provided listener."}]},{"tag":"@header","content":[{"kind":"text","text":"listen"}]}]},"parameters":[{"name":"listener","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A callback function."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"EventSubscription","package":"expo-modules-core"}}]},{"name":"addPushTokenListener","variant":"declaration","kind":64,"signatures":[{"name":"addPushTokenListener","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"In rare situations, a push token may be changed by the push notification service while the app is running.\nWhen a token is rolled, the old one becomes invalid and sending notifications to it will fail.\nA push token listener will let you handle this situation gracefully by registering the new token with your backend right away."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"An ["},{"kind":"code","text":"`EventSubscription`"},{"kind":"text","text":"](#eventsubscription) object represents the subscription of the provided listener."}]},{"tag":"@header","content":[{"kind":"text","text":"fetch"}]},{"tag":"@example","name":"Registering a push token listener using a React hook.","content":[{"kind":"code","text":"```jsx\nimport React from 'react';\nimport * as Notifications from 'expo-notifications';\n\nimport { registerDevicePushTokenAsync } from '../api';\n\nexport default function App() {\n React.useEffect(() => {\n const subscription = Notifications.addPushTokenListener(registerDevicePushTokenAsync);\n return () => subscription.remove();\n }, []);\n\n return (\n // Your app content\n );\n}\n```"}]}]},"parameters":[{"name":"listener","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A function accepting a push token as an argument, it will be called whenever the push token changes."}]},"type":{"type":"reference","name":"PushTokenListener","package":"expo-notifications"}}],"type":{"type":"reference","name":"EventSubscription","package":"expo-modules-core"}}]},{"name":"cancelAllScheduledNotificationsAsync","variant":"declaration","kind":64,"signatures":[{"name":"cancelAllScheduledNotificationsAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Cancels all scheduled notifications."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise that resolves once all the scheduled notifications are successfully canceled, or if there are no scheduled notifications."}]},{"tag":"@header","content":[{"kind":"text","text":"schedule"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]},{"name":"cancelScheduledNotificationAsync","variant":"declaration","kind":64,"signatures":[{"name":"cancelScheduledNotificationAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Cancels a single scheduled notification. The scheduled notification of given ID will not trigger."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise resolves once the scheduled notification is successfully canceled or if there is no scheduled notification for a given identifier."}]},{"tag":"@example","name":"Schedule and then cancel the notification:","content":[{"kind":"code","text":"```ts\nimport * as Notifications from 'expo-notifications';\n\nasync function scheduleAndCancel() {\n const identifier = await Notifications.scheduleNotificationAsync({\n content: {\n title: 'Hey!',\n },\n trigger: { seconds: 60, repeats: true },\n });\n await Notifications.cancelScheduledNotificationAsync(identifier);\n}\n```"}]},{"tag":"@header","content":[{"kind":"text","text":"schedule"}]}]},"parameters":[{"name":"identifier","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The notification identifier with which "},{"kind":"code","text":"`scheduleNotificationAsync`"},{"kind":"text","text":" method resolved when the notification has been scheduled."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]},{"name":"clearLastNotificationResponse","variant":"declaration","kind":64,"signatures":[{"name":"clearLastNotificationResponse","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Clears the notification response that was received most recently. May be used\nwhen an app selects a route based on the notification response, and it is undesirable\nto continue selecting the route after the response has already been handled.\n\nIf a component is using the ["},{"kind":"code","text":"`useLastNotificationResponse`"},{"kind":"text","text":"](#uselastnotificationresponse) hook,\nthis call will also clear the value returned by the hook."}]},"type":{"type":"intrinsic","name":"void"}}]},{"name":"clearLastNotificationResponseAsync","variant":"declaration","kind":64,"signatures":[{"name":"clearLastNotificationResponseAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Clears the notification response that was received most recently. May be used\nwhen an app selects a route based on the notification response, and it is undesirable\nto continue selecting the route after the response has already been handled.\n\nIf a component is using the ["},{"kind":"code","text":"`useLastNotificationResponse`"},{"kind":"text","text":"](#uselastnotificationresponse) hook,\nthis call will also clear the value returned by the hook."}],"blockTags":[{"tag":"@deprecated","content":[{"kind":"text","text":"Use "},{"kind":"code","text":"`clearLastNotificationResponse`"},{"kind":"text","text":" instead."}]},{"tag":"@returns","content":[{"kind":"text","text":"A promise that resolves if the native call was successful."}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]},{"name":"deleteNotificationCategoryAsync","variant":"declaration","kind":64,"signatures":[{"name":"deleteNotificationCategoryAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Deletes the category associated with the provided identifier."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves to "},{"kind":"code","text":"`true`"},{"kind":"text","text":" if the category was successfully deleted, or "},{"kind":"code","text":"`false`"},{"kind":"text","text":" if it was not.\nAn example of when this method would return "},{"kind":"code","text":"`false`"},{"kind":"text","text":" is if you try to delete a category that doesn't exist."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]},{"tag":"@header","content":[{"kind":"text","text":"categories"}]}]},"parameters":[{"name":"identifier","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Identifier initially provided to "},{"kind":"code","text":"`setNotificationCategoryAsync`"},{"kind":"text","text":" when creating the category."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"Promise","package":"typescript"}}]},{"name":"deleteNotificationChannelAsync","variant":"declaration","kind":64,"signatures":[{"name":"deleteNotificationChannelAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Removes the notification channel."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves once the channel is removed (or if there was no channel for given identifier)."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@header","content":[{"kind":"text","text":"channels"}]}]},"parameters":[{"name":"channelId","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The channel identifier."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]},{"name":"deleteNotificationChannelGroupAsync","variant":"declaration","kind":64,"signatures":[{"name":"deleteNotificationChannelGroupAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Removes the notification channel group and all notification channels that belong to it."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves once the channel group is removed (or if there was no channel group for given identifier)."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@header","content":[{"kind":"text","text":"channels"}]}]},"parameters":[{"name":"groupId","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The channel group identifier."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]},{"name":"dismissAllNotificationsAsync","variant":"declaration","kind":64,"signatures":[{"name":"dismissAllNotificationsAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Removes all application's notifications displayed in the notification tray (Notification Center)."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves once the request to dismiss the notifications is successfully dispatched to the notifications manager."}]},{"tag":"@header","content":[{"kind":"text","text":"dismiss"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]},{"name":"dismissNotificationAsync","variant":"declaration","kind":64,"signatures":[{"name":"dismissNotificationAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Removes notification displayed in the notification tray (Notification Center)."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves once the request to dismiss the notification is successfully dispatched to the notifications manager."}]},{"tag":"@header","content":[{"kind":"text","text":"dismiss"}]}]},"parameters":[{"name":"notificationIdentifier","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The notification identifier, obtained either via "},{"kind":"code","text":"`setNotificationHandler`"},{"kind":"text","text":" method or in the listener added with "},{"kind":"code","text":"`addNotificationReceivedListener`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]},{"name":"getAllScheduledNotificationsAsync","variant":"declaration","kind":64,"signatures":[{"name":"getAllScheduledNotificationsAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Fetches information about all scheduled notifications."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"Returns a Promise resolving to an array of objects conforming to the ["},{"kind":"code","text":"`Notification`"},{"kind":"text","text":"](#notification) interface."}]},{"tag":"@header","content":[{"kind":"text","text":"schedule"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"array","elementType":{"type":"reference","name":"NotificationRequest","package":"expo-notifications"}}],"name":"Promise","package":"typescript"}}]},{"name":"getBadgeCountAsync","variant":"declaration","kind":64,"signatures":[{"name":"getBadgeCountAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Fetches the number currently set as the badge of the app icon on device's home screen. A "},{"kind":"code","text":"`0`"},{"kind":"text","text":" value means that the badge is not displayed.\n> **Note:** Not all Android launchers support application badges. If the launcher does not support icon badges, the method will always resolve to "},{"kind":"code","text":"`0`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"Returns a Promise resolving to a number that represents the current badge of the app icon."}]},{"tag":"@header","content":[{"kind":"text","text":"badge"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"number"}],"name":"Promise","package":"typescript"}}]},{"name":"getDevicePushTokenAsync","variant":"declaration","kind":64,"signatures":[{"name":"getDevicePushTokenAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Returns a native FCM, APNs token or a ["},{"kind":"code","text":"`PushSubscription`"},{"kind":"text","text":" data](https://developer.mozilla.org/en-US/docs/Web/API/PushSubscription)\nthat can be used with another push notification service."}],"blockTags":[{"tag":"@header","content":[{"kind":"text","text":"fetch"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"reference","name":"DevicePushToken","package":"expo-notifications"}],"name":"Promise","package":"typescript"}}]},{"name":"getExpoPushTokenAsync","variant":"declaration","kind":64,"signatures":[{"name":"getExpoPushTokenAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Returns an Expo token that can be used to send a push notification to the device using Expo's push notifications service.\n\nThis method makes requests to the Expo's servers. It can get rejected in cases where the request itself fails\n(for example, due to the device being offline, experiencing a network timeout, or other HTTPS request failures).\nTo provide offline support to your users, you should "},{"kind":"code","text":"`try/catch`"},{"kind":"text","text":" this method and implement retry logic to attempt\nto get the push token later, once the device is back online.\n\n> For Expo's backend to be able to send notifications to your app, you will need to provide it with push notification keys.\nFor more information, see [credentials](/push-notifications/push-notifications-setup/#get-credentials-for-development-builds) in the push notifications setup."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"Returns a "},{"kind":"code","text":"`Promise`"},{"kind":"text","text":" that resolves to an object representing acquired push token."}]},{"tag":"@header","content":[{"kind":"text","text":"fetch"}]},{"tag":"@example","content":[{"kind":"code","text":"```ts\nimport * as Notifications from 'expo-notifications';\n\nexport async function registerForPushNotificationsAsync(userId: string) {\n const expoPushToken = await Notifications.getExpoPushTokenAsync({\n projectId: 'your-project-id',\n });\n\n await fetch('https://example.com/', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n userId,\n expoPushToken,\n }),\n });\n}\n```"}]}]},"parameters":[{"name":"options","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Object allowing you to pass in push notification configuration."}]},"type":{"type":"reference","name":"ExpoPushTokenOptions","package":"expo-notifications"},"defaultValue":"{}"}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"reference","name":"ExpoPushToken","package":"expo-notifications"}],"name":"Promise","package":"typescript"}}]},{"name":"getLastNotificationResponse","variant":"declaration","kind":64,"signatures":[{"name":"getLastNotificationResponse","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Gets the notification response that was received most recently\n(a notification response designates an interaction with a notification, such as tapping on it).\n\n- "},{"kind":"code","text":"`null`"},{"kind":"text","text":" - if no notification response has been received yet\n- a ["},{"kind":"code","text":"`NotificationResponse`"},{"kind":"text","text":"](#notificationresponse) object - if a notification response was received"}]},"type":{"type":"union","types":[{"type":"reference","name":"NotificationResponse","package":"expo-notifications"},{"type":"literal","value":null}]}}]},{"name":"getLastNotificationResponseAsync","variant":"declaration","kind":64,"signatures":[{"name":"getLastNotificationResponseAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Gets the notification response received most recently\n(a notification response designates an interaction with a notification, such as tapping on it).\n\n- "},{"kind":"code","text":"`null`"},{"kind":"text","text":" - if no notification response has been received yet\n- a ["},{"kind":"code","text":"`NotificationResponse`"},{"kind":"text","text":"](#notificationresponse) object - if a notification response was received"}],"blockTags":[{"tag":"@deprecated","content":[{"kind":"text","text":"Use "},{"kind":"code","text":"`getLastNotificationResponse`"},{"kind":"text","text":" instead."}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"reference","name":"NotificationResponse","package":"expo-notifications"},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}}]},{"name":"getNextTriggerDateAsync","variant":"declaration","kind":64,"signatures":[{"name":"getNextTriggerDateAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Allows you to check what will be the next trigger date for given notification trigger input."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"If the return value is "},{"kind":"code","text":"`null`"},{"kind":"text","text":", the notification won't be triggered. Otherwise, the return value is the Unix timestamp in milliseconds\nat which the notification will be triggered."}]},{"tag":"@example","name":"Calculate next trigger date for a notification trigger:","content":[{"kind":"code","text":"```ts\nimport * as Notifications from 'expo-notifications';\n\nasync function logNextTriggerDate() {\n try {\n const nextTriggerDate = await Notifications.getNextTriggerDateAsync({\n hour: 9,\n minute: 0,\n });\n console.log(nextTriggerDate === null ? 'No next trigger date' : new Date(nextTriggerDate));\n } catch (e) {\n console.warn(`Couldn't have calculated next trigger date: ${e}`);\n }\n}\n```"}]},{"tag":"@header","content":[{"kind":"text","text":"schedule"}]}]},"parameters":[{"name":"trigger","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The schedulable notification trigger you would like to check next trigger date for (of type ["},{"kind":"code","text":"`SchedulableNotificationTriggerInput`"},{"kind":"text","text":"](#schedulablenotificationtriggerinput))."}]},"type":{"type":"reference","name":"SchedulableNotificationTriggerInput","package":"expo-notifications"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}}]},{"name":"getNotificationCategoriesAsync","variant":"declaration","kind":64,"signatures":[{"name":"getNotificationCategoriesAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Fetches information about all known notification categories."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves to an array of "},{"kind":"code","text":"`NotificationCategory`"},{"kind":"text","text":"s. On platforms that do not support notification channels,\nit will always resolve to an empty array."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]},{"tag":"@header","content":[{"kind":"text","text":"categories"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"array","elementType":{"type":"reference","name":"NotificationCategory","package":"expo-notifications"}}],"name":"Promise","package":"typescript"}}]},{"name":"getNotificationChannelAsync","variant":"declaration","kind":64,"signatures":[{"name":"getNotificationChannelAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Fetches information about a single notification channel."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves to the channel object (of type ["},{"kind":"code","text":"`NotificationChannel`"},{"kind":"text","text":"](#notificationchannel)) or to "},{"kind":"code","text":"`null`"},{"kind":"text","text":"\nif there was no channel found for this identifier. On platforms that do not support notification channels, it will always resolve to "},{"kind":"code","text":"`null`"},{"kind":"text","text":"."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@header","content":[{"kind":"text","text":"channels"}]}]},"parameters":[{"name":"channelId","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The channel's identifier."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"reference","name":"NotificationChannel","package":"expo-notifications"},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}}]},{"name":"getNotificationChannelGroupAsync","variant":"declaration","kind":64,"signatures":[{"name":"getNotificationChannelGroupAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Fetches information about a single notification channel group."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves to the channel group object (of type ["},{"kind":"code","text":"`NotificationChannelGroup`"},{"kind":"text","text":"](#notificationchannelgroup))\nor to "},{"kind":"code","text":"`null`"},{"kind":"text","text":" if there was no channel group found for this identifier. On platforms that do not support notification channels,\nit will always resolve to "},{"kind":"code","text":"`null`"},{"kind":"text","text":"."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@header","content":[{"kind":"text","text":"channels"}]}]},"parameters":[{"name":"groupId","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The channel group's identifier."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"reference","name":"NotificationChannelGroup","package":"expo-notifications"},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}}]},{"name":"getNotificationChannelGroupsAsync","variant":"declaration","kind":64,"signatures":[{"name":"getNotificationChannelGroupsAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Fetches information about all known notification channel groups."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves to an array of channel groups. On platforms that do not support notification channel groups,\nit will always resolve to an empty array."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@header","content":[{"kind":"text","text":"channels"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"array","elementType":{"type":"reference","name":"NotificationChannelGroup","package":"expo-notifications"}}],"name":"Promise","package":"typescript"}}]},{"name":"getNotificationChannelsAsync","variant":"declaration","kind":64,"signatures":[{"name":"getNotificationChannelsAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Fetches information about all known notification channels."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves to an array of channels. On platforms that do not support notification channels,\nit will always resolve to an empty array."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@header","content":[{"kind":"text","text":"channels"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"array","elementType":{"type":"reference","name":"NotificationChannel","package":"expo-notifications"}}],"name":"Promise","package":"typescript"}}]},{"name":"getPermissionsAsync","variant":"declaration","kind":64,"signatures":[{"name":"getPermissionsAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Calling this function checks current permissions settings related to notifications.\nIt lets you verify whether the app is currently allowed to display alerts, play sounds, etc.\nThere is no user-facing effect of calling this."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"It returns a "},{"kind":"code","text":"`Promise`"},{"kind":"text","text":" resolving to an object represents permission settings (["},{"kind":"code","text":"`NotificationPermissionsStatus`"},{"kind":"text","text":"](#notificationpermissionsstatus)).\nOn iOS, make sure you [properly interpret the permissions response](#interpret-the-ios-permissions-response)."}]},{"tag":"@example","name":"Check if the app is allowed to send any type of notifications (interrupting and non-interrupting–provisional on iOS).","content":[{"kind":"code","text":"```ts\nimport * as Notifications from 'expo-notifications';\n\nexport async function allowsNotificationsAsync() {\n const settings = await Notifications.getPermissionsAsync();\n return (\n settings.granted || settings.ios?.status === Notifications.IosAuthorizationStatus.PROVISIONAL\n );\n}\n```"}]},{"tag":"@header","content":[{"kind":"text","text":"permissions"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"reference","name":"NotificationPermissionsStatus","package":"expo-notifications"}],"name":"Promise","package":"typescript"}}]},{"name":"getPresentedNotificationsAsync","variant":"declaration","kind":64,"signatures":[{"name":"getPresentedNotificationsAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Fetches information about all notifications present in the notification tray (Notification Center).\n> This method is not supported on Android below 6.0 (API level 23) – on these devices it will resolve to an empty array."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves with a list of notifications (["},{"kind":"code","text":"`Notification`"},{"kind":"text","text":"](#notification)) currently present in the notification tray (Notification Center)."}]},{"tag":"@header","content":[{"kind":"text","text":"dismiss"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"array","elementType":{"type":"reference","name":"Notification","package":"expo-notifications"}}],"name":"Promise","package":"typescript"}}]},{"name":"registerTaskAsync","variant":"declaration","kind":64,"signatures":[{"name":"registerTaskAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Call "},{"kind":"code","text":"`registerTaskAsync`"},{"kind":"text","text":" to set a callback (task) that runs when a notification is received while the app is in foreground, background, or terminated.\nOnly on Android, the task also runs in response to a notification action tap when the app is backgrounded or terminated.\nWhen the app is terminated, only a [Headless Background Notification](/push-notifications/what-you-need-to-know/#headless-background-notifications) triggers the task execution.\nHowever, 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\"](https://developer.apple.com/documentation/usernotifications/pushing-background-updates-to-your-app#overview)).\n\nUnder the hood, this function is run using "},{"kind":"code","text":"`expo-task-manager`"},{"kind":"text","text":". You **must** define the task first, with ["},{"kind":"code","text":"`TaskManager.defineTask`"},{"kind":"text","text":"]("},{"kind":"relative-link","text":"./task-manager#taskmanagerdefinetasktaskname-taskexecutor"},{"kind":"text","text":") and register it with "},{"kind":"code","text":"`registerTaskAsync`"},{"kind":"text","text":".\n\nMake 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 "},{"kind":"code","text":"`index.ts`"},{"kind":"text","text":" file) - see this [example](https://github.com/expo/expo/blob/main/apps/notification-tester/index.ts#L2).\n"},{"kind":"code","text":"`expo-task-manager`"},{"kind":"text","text":" 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.\n\nThe callback function you define with "},{"kind":"code","text":"`TaskManager.defineTask`"},{"kind":"text","text":" receives an object with the following fields:\n- "},{"kind":"code","text":"`data`"},{"kind":"text","text":": The remote payload delivered by either FCM (Android) or APNs (iOS). See ["},{"kind":"code","text":"`NotificationTaskPayload`"},{"kind":"text","text":"](#notificationtaskpayload) for details.\n- "},{"kind":"code","text":"`executionInfo`"},{"kind":"text","text":": JSON object of additional info related to the task, including the "},{"kind":"code","text":"`taskName`"},{"kind":"text","text":".\n- "},{"kind":"code","text":"`error`"},{"kind":"text","text":": This field should always be undefined with a push-notification task.\n\nFrom the callback function, you may return a ["},{"kind":"code","text":"`BackgroundNotificationResult`"},{"kind":"text","text":"](#backgroundnotificationtaskresult) value to indicate the result of a background fetch operation on iOS.\n\nBe 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."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```ts\nimport * as TaskManager from 'expo-task-manager';\nimport * as Notifications from 'expo-notifications';\n\nconst BACKGROUND_NOTIFICATION_TASK = 'BACKGROUND-NOTIFICATION-TASK';\n\nTaskManager.defineTask(BACKGROUND_NOTIFICATION_TASK, ({ data, executionInfo, error }) => {\n console.log('Received a notification task payload!');\n const isNotificationResponse = 'actionIdentifier' in data;\n if (isNotificationResponse) {\n // Do something with the notification response from user\n } else {\n // Do something with the data from notification that was received\n }\n return BackgroundNotificationResult.NoData\n});\n\nNotifications.registerTaskAsync(BACKGROUND_NOTIFICATION_TASK);\n```"}]},{"tag":"@header","content":[{"kind":"text","text":"inBackground"}]}]},"parameters":[{"name":"taskName","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The string you passed to "},{"kind":"code","text":"`TaskManager.defineTask`"},{"kind":"text","text":" as the "},{"kind":"code","text":"`taskName`"},{"kind":"text","text":" parameter."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"literal","value":null}],"name":"Promise","package":"typescript"}}]},{"name":"requestPermissionsAsync","variant":"declaration","kind":64,"signatures":[{"name":"requestPermissionsAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Prompts the user for notification permissions according to request. **Request defaults to asking the user to allow displaying alerts,\nsetting badge count and playing sounds**."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"It returns a Promise resolving to an object represents permission settings (["},{"kind":"code","text":"`NotificationPermissionsStatus`"},{"kind":"text","text":"](#notificationpermissionsstatus)).\nOn iOS, make sure you [properly interpret the permissions response](#interpret-the-ios-permissions-response)."}]},{"tag":"@example","name":"Prompts the user to allow the app to show alerts, play sounds, set badge count and let Siri read out messages through AirPods.","content":[{"kind":"code","text":"```ts\nimport * as Notifications from 'expo-notifications';\n\nexport function requestPermissionsAsync() {\n return Notifications.requestPermissionsAsync({\n ios: {\n allowAlert: true,\n allowBadge: true,\n allowSound: true,\n },\n });\n}\n```"}]},{"tag":"@header","content":[{"kind":"text","text":"permissions"}]}]},"parameters":[{"name":"permissions","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"An object representing configuration for the request scope."}]},"type":{"type":"reference","name":"NotificationPermissionsRequest","package":"expo-notifications"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"reference","name":"NotificationPermissionsStatus","package":"expo-notifications"}],"name":"Promise","package":"typescript"}}]},{"name":"scheduleNotificationAsync","variant":"declaration","kind":64,"signatures":[{"name":"scheduleNotificationAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Schedules a notification to be triggered in the future.\n> **Note:** This does not mean that the notification will be presented when it is triggered.\nFor the notification to be presented you have to set a notification handler with ["},{"kind":"code","text":"`setNotificationHandler`"},{"kind":"text","text":"](#setnotificationhandlerhandler)\nthat will return an appropriate notification behavior. For more information see the example below."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"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."}]},{"tag":"@example","content":[{"kind":"text","text":"# Schedule the notification that will trigger once, in one minute from now\n"},{"kind":"code","text":"```ts\nimport * as Notifications from 'expo-notifications';\n\nNotifications.scheduleNotificationAsync({\n content: {\n title: \"Time's up!\",\n body: 'Change sides!',\n },\n trigger: {\n type: Notifications.SchedulableTriggerInputTypes.TIME_INTERVAL,\n seconds: 60,\n },\n});\n```"},{"kind":"text","text":"\n\n# Schedule the notification that will trigger repeatedly, every 20 minutes\n"},{"kind":"code","text":"```ts\nimport * as Notifications from 'expo-notifications';\n\nNotifications.scheduleNotificationAsync({\n content: {\n title: 'Remember to drink water!',\n },\n trigger: {\n type: Notifications.SchedulableTriggerInputTypes.TIME_INTERVAL,\n seconds: 60 * 20,\n repeats: true,\n },\n});\n```"},{"kind":"text","text":"\n\n# Schedule the notification that will trigger once, at the beginning of next hour\n"},{"kind":"code","text":"```ts\nimport * as Notifications from 'expo-notifications';\n\nconst date = new Date(Date.now() + 60 * 60 * 1000);\ndate.setMinutes(0);\ndate.setSeconds(0);\n\nNotifications.scheduleNotificationAsync({\n content: {\n title: 'Happy new hour!',\n },\n trigger: {\n type: Notifications.SchedulableTriggerInputTypes.DATE,\n date\n },\n});\n```"}]},{"tag":"@header","content":[{"kind":"text","text":"schedule"}]}]},"parameters":[{"name":"request","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"An object describing the notification to be triggered."}]},"type":{"type":"reference","name":"NotificationRequestInput","package":"expo-notifications"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise","package":"typescript"}}]},{"name":"setBadgeCountAsync","variant":"declaration","kind":64,"signatures":[{"name":"setBadgeCountAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the badge of the app's icon to the specified number. Setting it to "},{"kind":"code","text":"`0`"},{"kind":"text","text":" clears the badge. On iOS, this method requires that you have requested\nthe user's permission for "},{"kind":"code","text":"`allowBadge`"},{"kind":"text","text":" via ["},{"kind":"code","text":"`requestPermissionsAsync`"},{"kind":"text","text":"](#requestpermissionsasyncpermissions),\notherwise it will automatically return "},{"kind":"code","text":"`false`"},{"kind":"text","text":".\n> **Note:** Not all Android launchers support application badges. If the launcher does not support icon badges, the method will resolve to "},{"kind":"code","text":"`false`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"It returns a Promise resolving to a boolean representing whether the setting of the badge succeeded."}]},{"tag":"@header","content":[{"kind":"text","text":"badge"}]}]},"parameters":[{"name":"badgeCount","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The count which should appear on the badge. A value of "},{"kind":"code","text":"`0`"},{"kind":"text","text":" will clear the badge."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"options","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"An object of options configuring behavior applied."}]},"type":{"type":"reference","target":{"packageName":"expo-notifications","packagePath":"src/setBadgeCountAsync.ts","qualifiedName":"SetBadgeCountOptions"},"name":"SetBadgeCountOptions","package":"expo-notifications"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"Promise","package":"typescript"}}]},{"name":"setNotificationCategoryAsync","variant":"declaration","kind":64,"signatures":[{"name":"setNotificationCategoryAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the new notification category."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves to the category you just have created."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]},{"tag":"@header","content":[{"kind":"text","text":"categories"}]}]},"parameters":[{"name":"identifier","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A string to associate as the ID of this category. You will pass this string in as the "},{"kind":"code","text":"`categoryIdentifier`"},{"kind":"text","text":"\nin your ["},{"kind":"code","text":"`NotificationContent`"},{"kind":"text","text":"](#notificationcontent) to associate a notification with this category.\n> Don't use the characters "},{"kind":"code","text":"`:`"},{"kind":"text","text":" or "},{"kind":"code","text":"`-`"},{"kind":"text","text":" in your category identifier. If you do, categories might not work as expected."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"actions","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"An array of ["},{"kind":"code","text":"`NotificationAction`"},{"kind":"text","text":"](#notificationaction), which describe the actions associated with this category."}]},"type":{"type":"array","elementType":{"type":"reference","name":"NotificationAction","package":"expo-notifications"}}},{"name":"options","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"An optional object of additional configuration options for your category."}]},"type":{"type":"reference","name":"NotificationCategoryOptions","package":"expo-notifications"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"reference","name":"NotificationCategory","package":"expo-notifications"}],"name":"Promise","package":"typescript"}}]},{"name":"setNotificationChannelAsync","variant":"declaration","kind":64,"signatures":[{"name":"setNotificationChannelAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Assigns the channel configuration to a channel of a specified name (creating it if need be).\nThis method lets you assign given notification channel to a notification channel group.\n\n> **Note:** After a channel has been created, you can modify only its name and description. This limitation is imposed by the Android OS.\n\n> **Note:** For some settings to be applied on all Android versions, it may be necessary to duplicate the configuration across both\n> a single notification and its respective notification channel.\n\nFor example, for a notification to play a custom sound on Android versions **below** 8.0,\nthe custom notification sound has to be set on the notification (through the ["},{"kind":"code","text":"`NotificationContentInput`"},{"kind":"text","text":"](#notificationcontentinput)),\nand for the custom sound to play on Android versions **above** 8.0, the relevant notification channel must have the custom sound configured\n(through the ["},{"kind":"code","text":"`NotificationChannelInput`"},{"kind":"text","text":"](#notificationchannelinput)). For more information,\nsee [Set custom notification sounds on Android](#set-custom-notification-sounds)."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves to the object (of type ["},{"kind":"code","text":"`NotificationChannel`"},{"kind":"text","text":"](#notificationchannel)) describing the modified channel\nor to "},{"kind":"code","text":"`null`"},{"kind":"text","text":" if the platform does not support notification channels."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@header","content":[{"kind":"text","text":"channels"}]}]},"parameters":[{"name":"channelId","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The channel identifier."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"channel","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Object representing the channel's configuration."}]},"type":{"type":"reference","name":"NotificationChannelInput","package":"expo-notifications"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"reference","name":"NotificationChannel","package":"expo-notifications"},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}}]},{"name":"setNotificationChannelGroupAsync","variant":"declaration","kind":64,"signatures":[{"name":"setNotificationChannelGroupAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Assigns the channel group configuration to a channel group of a specified name (creating it if need be)."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A "},{"kind":"code","text":"`Promise`"},{"kind":"text","text":" resolving to the object (of type ["},{"kind":"code","text":"`NotificationChannelGroup`"},{"kind":"text","text":"](#notificationchannelgroup))\ndescribing the modified channel group or to "},{"kind":"code","text":"`null`"},{"kind":"text","text":" if the platform does not support notification channels."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@header","content":[{"kind":"text","text":"channels"}]}]},"parameters":[{"name":"groupId","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The channel group's identifier."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"group","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Object representing the channel group configuration."}]},"type":{"type":"reference","name":"NotificationChannelGroupInput","package":"expo-notifications"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"reference","name":"NotificationChannelGroup","package":"expo-notifications"},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}}]},{"name":"setNotificationHandler","variant":"declaration","kind":64,"signatures":[{"name":"setNotificationHandler","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"When a notification is received while the app is running, using this function you can set a callback that will decide\nwhether the notification should be shown to the user or not.\n\nWhen a notification is received, "},{"kind":"code","text":"`handleNotification`"},{"kind":"text","text":" is called with the incoming notification as an argument.\nThe function should respond with a behavior object within 3 seconds, otherwise the notification will be presented.\nIf the notification is handled successfully, "},{"kind":"code","text":"`handleSuccess`"},{"kind":"text","text":" is called with the identifier of the notification,\notherwise (or on timeout) "},{"kind":"code","text":"`handleError`"},{"kind":"text","text":" will be called.\n\nUntil the app sets a handler, and when the handler it sets does not respond in time, the\nnotification is shown with a banner, in the notification list, with a sound, and with the badge from the notification."}],"blockTags":[{"tag":"@example","name":"Implementing a notification handler that shows the notification without a sound.","content":[{"kind":"code","text":"```jsx\nimport * as Notifications from 'expo-notifications';\n\nNotifications.setNotificationHandler({\n handleNotification: async () => ({\n shouldShowBanner: true,\n shouldShowList: true,\n shouldPlaySound: false,\n shouldSetBadge: false,\n }),\n});\n```"}]},{"tag":"@header","content":[{"kind":"text","text":"inForeground"}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A single parameter which should be either "},{"kind":"code","text":"`null`"},{"kind":"text","text":" or a ["},{"kind":"code","text":"`NotificationHandler`"},{"kind":"text","text":"](#notificationhandler) object.\nPassing "},{"kind":"code","text":"`null`"},{"kind":"text","text":" removes the handler, so "},{"kind":"code","text":"`expo-notifications`"},{"kind":"text","text":" no longer decides whether an incoming notification shows.\nOn Android the notification is then not shown while the app is in the foreground.\nOn iOS the decision goes to the "},{"kind":"code","text":"`UNUserNotificationCenterDelegate`"},{"kind":"text","text":" that another library may set, and the notification is not shown if there is none."}]},"type":{"type":"union","types":[{"type":"reference","name":"NotificationHandler","package":"expo-notifications"},{"type":"literal","value":null}]}}],"type":{"type":"intrinsic","name":"void"}}]},{"name":"subscribeToTopicAsync","variant":"declaration","kind":64,"signatures":[{"name":"subscribeToTopicAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Subscribes the device to a push notification topic. This allows the device to receive notifications sent to that topic."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"a Promise which resolves to "},{"kind":"code","text":"`null`"},{"kind":"text","text":" once the device is subscribed to the topic."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"parameters":[{"name":"topic","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The topic name to subscribe to."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"literal","value":null}],"name":"Promise","package":"typescript"}}]},{"name":"unregisterForNotificationsAsync","variant":"declaration","kind":64,"signatures":[{"name":"unregisterForNotificationsAsync","variant":"signature","kind":4096,"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]},{"name":"unregisterTaskAsync","variant":"declaration","kind":64,"signatures":[{"name":"unregisterTaskAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Used to unregister tasks registered with "},{"kind":"code","text":"`registerTaskAsync`"},{"kind":"text","text":" method."}],"blockTags":[{"tag":"@header","content":[{"kind":"text","text":"inBackground"}]}]},"parameters":[{"name":"taskName","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The string you passed to "},{"kind":"code","text":"`registerTaskAsync`"},{"kind":"text","text":" as the "},{"kind":"code","text":"`taskName`"},{"kind":"text","text":" parameter."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"literal","value":null}],"name":"Promise","package":"typescript"}}]},{"name":"unsubscribeFromTopicAsync","variant":"declaration","kind":64,"signatures":[{"name":"unsubscribeFromTopicAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Unsubscribes the device from a push notification topic. The device will no longer receive notifications sent to that topic."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"a Promise which resolves to "},{"kind":"code","text":"`null`"},{"kind":"text","text":" once the device is unsubscribed from the topic."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"parameters":[{"name":"topic","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The topic name to unsubscribe from."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"literal","value":null}],"name":"Promise","package":"typescript"}}]},{"name":"useLastNotificationResponse","variant":"declaration","kind":64,"signatures":[{"name":"useLastNotificationResponse","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"A React hook which returns the notification response that was received most recently\n(a notification response designates an interaction with a notification, such as tapping on it).\n\nTo clear the last notification response, use ["},{"kind":"code","text":"`clearLastNotificationResponseAsync()`"},{"kind":"text","text":"](#notificationsclearlastnotificationresponseasync).\n\n> If you don't want to use a hook, you can use "},{"kind":"code","text":"`Notifications.getLastNotificationResponseAsync()`"},{"kind":"text","text":" instead."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"The hook may return one of these three types/values:\n- "},{"kind":"code","text":"`undefined`"},{"kind":"text","text":" - until we're sure of what to return,\n- "},{"kind":"code","text":"`null`"},{"kind":"text","text":" - if no notification response has been received yet,\n- a ["},{"kind":"code","text":"`NotificationResponse`"},{"kind":"text","text":"](#notificationresponse) object - if a notification response was received."}]},{"tag":"@example","content":[{"kind":"text","text":"Responding to a notification tap by opening a URL that could be put into the notification's "},{"kind":"code","text":"`data`"},{"kind":"text","text":"\n(opening the URL is your responsibility and is not a part of the "},{"kind":"code","text":"`expo-notifications`"},{"kind":"text","text":" API):\n"},{"kind":"code","text":"```jsx\nimport * as Notifications from 'expo-notifications';\nimport { Linking } from 'react-native';\n\nexport default function App() {\n const lastNotificationResponse = Notifications.useLastNotificationResponse();\n React.useEffect(() => {\n if (\n lastNotificationResponse &&\n lastNotificationResponse.notification.request.content.data.url &&\n lastNotificationResponse.actionIdentifier === Notifications.DEFAULT_ACTION_IDENTIFIER\n ) {\n Linking.openURL(lastNotificationResponse.notification.request.content.data.url);\n }\n }, [lastNotificationResponse]);\n return (\n // Your app content\n );\n}\n```"}]},{"tag":"@header","content":[{"kind":"text","text":"listen"}]}]},"type":{"type":"reference","name":"MaybeNotificationResponse","package":"expo-notifications"}}]}],"packageName":"expo-notifications"}
\ No newline at end of file
+{"schemaVersion":"2.0","name":"expo-notifications","variant":"project","kind":1,"children":[{"name":"AndroidAudioContentType","variant":"declaration","kind":8,"comment":{"summary":[],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"MOVIE","variant":"declaration","kind":16,"type":{"type":"literal","value":3}},{"name":"MUSIC","variant":"declaration","kind":16,"type":{"type":"literal","value":2}},{"name":"SONIFICATION","variant":"declaration","kind":16,"type":{"type":"literal","value":4}},{"name":"SPEECH","variant":"declaration","kind":16,"type":{"type":"literal","value":1}},{"name":"UNKNOWN","variant":"declaration","kind":16,"type":{"type":"literal","value":0}}]},{"name":"AndroidAudioUsage","variant":"declaration","kind":8,"comment":{"summary":[],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"ALARM","variant":"declaration","kind":16,"type":{"type":"literal","value":4}},{"name":"ASSISTANCE_ACCESSIBILITY","variant":"declaration","kind":16,"type":{"type":"literal","value":11}},{"name":"ASSISTANCE_NAVIGATION_GUIDANCE","variant":"declaration","kind":16,"type":{"type":"literal","value":12}},{"name":"ASSISTANCE_SONIFICATION","variant":"declaration","kind":16,"type":{"type":"literal","value":13}},{"name":"GAME","variant":"declaration","kind":16,"type":{"type":"literal","value":14}},{"name":"MEDIA","variant":"declaration","kind":16,"type":{"type":"literal","value":1}},{"name":"NOTIFICATION","variant":"declaration","kind":16,"type":{"type":"literal","value":5}},{"name":"NOTIFICATION_COMMUNICATION_DELAYED","variant":"declaration","kind":16,"type":{"type":"literal","value":9}},{"name":"NOTIFICATION_COMMUNICATION_INSTANT","variant":"declaration","kind":16,"type":{"type":"literal","value":8}},{"name":"NOTIFICATION_COMMUNICATION_REQUEST","variant":"declaration","kind":16,"type":{"type":"literal","value":7}},{"name":"NOTIFICATION_EVENT","variant":"declaration","kind":16,"type":{"type":"literal","value":10}},{"name":"NOTIFICATION_RINGTONE","variant":"declaration","kind":16,"type":{"type":"literal","value":6}},{"name":"UNKNOWN","variant":"declaration","kind":16,"type":{"type":"literal","value":0}},{"name":"VOICE_COMMUNICATION","variant":"declaration","kind":16,"type":{"type":"literal","value":2}},{"name":"VOICE_COMMUNICATION_SIGNALLING","variant":"declaration","kind":16,"type":{"type":"literal","value":3}}]},{"name":"AndroidImportance","variant":"declaration","kind":8,"comment":{"summary":[],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"DEFAULT","variant":"declaration","kind":16,"type":{"type":"literal","value":5}},{"name":"HIGH","variant":"declaration","kind":16,"type":{"type":"literal","value":6}},{"name":"LOW","variant":"declaration","kind":16,"type":{"type":"literal","value":4}},{"name":"MAX","variant":"declaration","kind":16,"type":{"type":"literal","value":7}},{"name":"MIN","variant":"declaration","kind":16,"type":{"type":"literal","value":3}},{"name":"NONE","variant":"declaration","kind":16,"type":{"type":"literal","value":2}},{"name":"UNKNOWN","variant":"declaration","kind":16,"type":{"type":"literal","value":0}},{"name":"UNSPECIFIED","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"Use "},{"kind":"code","text":"`DEFAULT`"},{"kind":"text","text":" instead. This value is present for compatibility reasons."}]},"type":{"type":"literal","value":1}}]},{"name":"AndroidNotificationPriority","variant":"declaration","kind":8,"comment":{"summary":[{"kind":"text","text":"An enum corresponding to values appropriate for Android's ["},{"kind":"code","text":"`Notification#priority`"},{"kind":"text","text":"](https://developer.android.com/reference/android/app/Notification#priority) field."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"DEFAULT","variant":"declaration","kind":16,"type":{"type":"literal","value":"default"}},{"name":"HIGH","variant":"declaration","kind":16,"type":{"type":"literal","value":"high"}},{"name":"LOW","variant":"declaration","kind":16,"type":{"type":"literal","value":"low"}},{"name":"MAX","variant":"declaration","kind":16,"type":{"type":"literal","value":"max"}},{"name":"MIN","variant":"declaration","kind":16,"type":{"type":"literal","value":"min"}}]},{"name":"AndroidNotificationVisibility","variant":"declaration","kind":8,"comment":{"summary":[],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"PRIVATE","variant":"declaration","kind":16,"type":{"type":"literal","value":2}},{"name":"PUBLIC","variant":"declaration","kind":16,"type":{"type":"literal","value":1}},{"name":"SECRET","variant":"declaration","kind":16,"type":{"type":"literal","value":3}},{"name":"UNKNOWN","variant":"declaration","kind":16,"type":{"type":"literal","value":0}}]},{"name":"BackgroundNotificationTaskResult","variant":"declaration","kind":8,"comment":{"summary":[{"kind":"text","text":"Constants that indicate the result of a background fetch operation.\nCorresponds to ["},{"kind":"code","text":"`UIBackgroundFetchResult`"},{"kind":"text","text":"](https://developer.apple.com/documentation/uikit/uibackgroundfetchresult)."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"children":[{"name":"Failed","variant":"declaration","kind":16,"type":{"type":"literal","value":2}},{"name":"NewData","variant":"declaration","kind":16,"type":{"type":"literal","value":0}},{"name":"NoData","variant":"declaration","kind":16,"type":{"type":"literal","value":1}}]},{"name":"IosAlertStyle","variant":"declaration","kind":8,"comment":{"summary":[],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"children":[{"name":"ALERT","variant":"declaration","kind":16,"type":{"type":"literal","value":2}},{"name":"BANNER","variant":"declaration","kind":16,"type":{"type":"literal","value":1}},{"name":"NONE","variant":"declaration","kind":16,"type":{"type":"literal","value":0}}]},{"name":"IosAllowsPreviews","variant":"declaration","kind":8,"comment":{"summary":[],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"children":[{"name":"ALWAYS","variant":"declaration","kind":16,"type":{"type":"literal","value":1}},{"name":"NEVER","variant":"declaration","kind":16,"type":{"type":"literal","value":0}},{"name":"WHEN_AUTHENTICATED","variant":"declaration","kind":16,"type":{"type":"literal","value":2}}]},{"name":"IosAuthorizationStatus","variant":"declaration","kind":8,"comment":{"summary":[],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"children":[{"name":"AUTHORIZED","variant":"declaration","kind":16,"type":{"type":"literal","value":2}},{"name":"DENIED","variant":"declaration","kind":16,"type":{"type":"literal","value":1}},{"name":"EPHEMERAL","variant":"declaration","kind":16,"type":{"type":"literal","value":4}},{"name":"NOT_DETERMINED","variant":"declaration","kind":16,"type":{"type":"literal","value":0}},{"name":"PROVISIONAL","variant":"declaration","kind":16,"type":{"type":"literal","value":3}}]},{"name":"PermissionStatus","variant":"declaration","kind":8,"children":[{"name":"DENIED","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"User has denied the permission."}]},"type":{"type":"literal","value":"denied"}},{"name":"GRANTED","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"User has granted the permission."}]},"type":{"type":"literal","value":"granted"}},{"name":"UNDETERMINED","variant":"declaration","kind":16,"comment":{"summary":[{"kind":"text","text":"User hasn't granted or denied the permission yet."}]},"type":{"type":"literal","value":"undetermined"}}]},{"name":"SchedulableTriggerInputTypes","variant":"declaration","kind":8,"comment":{"summary":[{"kind":"text","text":"Schedulable trigger inputs (that are not a plain date value or time value)\nmust have the \"type\" property set to one of these values."}]},"children":[{"name":"CALENDAR","variant":"declaration","kind":16,"type":{"type":"literal","value":"calendar"}},{"name":"DAILY","variant":"declaration","kind":16,"type":{"type":"literal","value":"daily"}},{"name":"DATE","variant":"declaration","kind":16,"type":{"type":"literal","value":"date"}},{"name":"MONTHLY","variant":"declaration","kind":16,"type":{"type":"literal","value":"monthly"}},{"name":"TIME_INTERVAL","variant":"declaration","kind":16,"type":{"type":"literal","value":"timeInterval"}},{"name":"WEEKLY","variant":"declaration","kind":16,"type":{"type":"literal","value":"weekly"}},{"name":"YEARLY","variant":"declaration","kind":16,"type":{"type":"literal","value":"yearly"}}]},{"name":"AudioAttributes","variant":"declaration","kind":256,"comment":{"summary":[],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"contentType","variant":"declaration","kind":1024,"type":{"type":"reference","name":"AndroidAudioContentType","package":"expo-notifications"}},{"name":"flags","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"enforceAudibility","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"requestHardwareAudioVideoSynchronization","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}}]}}},{"name":"usage","variant":"declaration","kind":1024,"type":{"type":"reference","name":"AndroidAudioUsage","package":"expo-notifications"}}]},{"name":"BeaconRegion","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"A region used to detect the presence of iBeacon devices. Based on Core Location ["},{"kind":"code","text":"`CLBeaconRegion`"},{"kind":"text","text":"](https://developer.apple.com/documentation/corelocation/clbeaconregion) class."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"children":[{"name":"beaconIdentityConstraint","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The beacon identity constraint that defines the beacon region."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"major","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"literal","value":null}]}},{"name":"minor","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"literal","value":null}]}},{"name":"uuid","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}}]}}},{"name":"identifier","variant":"declaration","kind":1024,"flags":{"isInherited":true},"comment":{"summary":[{"kind":"text","text":"The identifier for the region object."}]},"type":{"type":"intrinsic","name":"string"},"inheritedFrom":{"type":"reference","name":"Region.identifier"}},{"name":"major","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The major value from the beacon identity constraint that defines the beacon region."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"literal","value":null}]}},{"name":"minor","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The minor value from the beacon identity constraint that defines the beacon region."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"literal","value":null}]}},{"name":"notifyEntryStateOnDisplay","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"A Boolean value that indicates whether Core Location sends beacon notifications when the device’s display is on."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"notifyOnEntry","variant":"declaration","kind":1024,"flags":{"isInherited":true},"comment":{"summary":[{"kind":"text","text":"Indicates whether notifications are generated upon entry into the region."}]},"type":{"type":"intrinsic","name":"boolean"},"inheritedFrom":{"type":"reference","name":"Region.notifyOnEntry"}},{"name":"notifyOnExit","variant":"declaration","kind":1024,"flags":{"isInherited":true},"comment":{"summary":[{"kind":"text","text":"Indicates whether notifications are generated upon exit from the region."}]},"type":{"type":"intrinsic","name":"boolean"},"inheritedFrom":{"type":"reference","name":"Region.notifyOnExit"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"beacon"},"overwrites":{"type":"reference","name":"Region.type"}},{"name":"uuid","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The UUID value from the beacon identity constraint that defines the beacon region."}]},"type":{"type":"intrinsic","name":"string"}}],"extendedTypes":[{"type":"reference","name":"Region","package":"expo-notifications"}]},{"name":"CalendarNotificationTrigger","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"A trigger related to a ["},{"kind":"code","text":"`UNCalendarNotificationTrigger`"},{"kind":"text","text":"](https://developer.apple.com/documentation/usernotifications/uncalendarnotificationtrigger?language=objc)."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"children":[{"name":"dateComponents","variant":"declaration","kind":1024,"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"calendar","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"day","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"era","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"hour","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"isLeapMonth","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"isRepeatedDay","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"minute","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"month","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"nanosecond","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"quarter","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"second","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"timeZone","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"weekday","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"weekdayOrdinal","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"weekOfMonth","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"weekOfYear","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"year","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"yearForWeekOfYear","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"repeats","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"calendar"}}]},{"name":"CircularRegion","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"A circular geographic region, specified as a center point and radius. Based on Core Location ["},{"kind":"code","text":"`CLCircularRegion`"},{"kind":"text","text":"](https://developer.apple.com/documentation/corelocation/clcircularregion) class."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"children":[{"name":"center","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The center point of the geographic area."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"latitude","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"longitude","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"identifier","variant":"declaration","kind":1024,"flags":{"isInherited":true},"comment":{"summary":[{"kind":"text","text":"The identifier for the region object."}]},"type":{"type":"intrinsic","name":"string"},"inheritedFrom":{"type":"reference","name":"Region.identifier"}},{"name":"notifyOnEntry","variant":"declaration","kind":1024,"flags":{"isInherited":true},"comment":{"summary":[{"kind":"text","text":"Indicates whether notifications are generated upon entry into the region."}]},"type":{"type":"intrinsic","name":"boolean"},"inheritedFrom":{"type":"reference","name":"Region.notifyOnEntry"}},{"name":"notifyOnExit","variant":"declaration","kind":1024,"flags":{"isInherited":true},"comment":{"summary":[{"kind":"text","text":"Indicates whether notifications are generated upon exit from the region."}]},"type":{"type":"intrinsic","name":"boolean"},"inheritedFrom":{"type":"reference","name":"Region.notifyOnExit"}},{"name":"radius","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The radius (measured in meters) that defines the geographic area’s outer boundary."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"circular"},"overwrites":{"type":"reference","name":"Region.type"}}],"extendedTypes":[{"type":"reference","name":"Region","package":"expo-notifications"}]},{"name":"DailyNotificationTrigger","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"A trigger related to a daily notification.\n> The same functionality will be achieved on iOS with a "},{"kind":"code","text":"`CalendarNotificationTrigger`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"hour","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"minute","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"daily"}}]},{"name":"EventSubscription","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"A subscription object that allows to conveniently remove an event listener from the emitter."}]},"children":[{"name":"remove","variant":"declaration","kind":2048,"signatures":[{"name":"remove","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Removes an event listener for which the subscription has been created.\nAfter calling this function, the listener will no longer receive any events from the emitter."}]},"type":{"type":"intrinsic","name":"void"}}]}]},{"name":"ExpoPushToken","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"Object which contains the Expo push token in the "},{"kind":"code","text":"`data`"},{"kind":"text","text":" field. Use the value from "},{"kind":"code","text":"`data`"},{"kind":"text","text":" to send notifications via Expo Notifications service."}]},"children":[{"name":"data","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The acquired push token."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Always set to "},{"kind":"code","text":"`\"expo\"`"},{"kind":"text","text":"."}]},"type":{"type":"literal","value":"expo"}}]},{"name":"ExpoPushTokenOptions","variant":"declaration","kind":256,"children":[{"name":"applicationId","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The ID of the application to which the token should be attributed.\nDefaults to ["},{"kind":"code","text":"`Application.applicationId`"},{"kind":"text","text":"]("},{"kind":"relative-link","text":"./application/#applicationapplicationid"},{"kind":"text","text":") exposed by "},{"kind":"code","text":"`expo-application`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"baseUrl","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Endpoint URL override."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"development","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"On iOS, there are two push notification services: \"sandbox\" and \"production\".\nThis defines whether the push token is supposed to be used with the sandbox platform notification service.\nDefaults to ["},{"kind":"code","text":"`Application.getIosPushNotificationServiceEnvironmentAsync()`"},{"kind":"text","text":"]("},{"kind":"relative-link","text":"./application/#applicationgetiospushnotificationserviceenvironmentasync"},{"kind":"text","text":")\nexposed by "},{"kind":"code","text":"`expo-application`"},{"kind":"text","text":" or "},{"kind":"code","text":"`false`"},{"kind":"text","text":". Most probably you won't need to customize that.\nYou may want to customize that if you don't want to install "},{"kind":"code","text":"`expo-application`"},{"kind":"text","text":" and still use the sandbox APNs."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"deviceId","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"devicePushToken","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The device push token with which to register at the backend.\nDefaults to a token fetched with ["},{"kind":"code","text":"`getDevicePushTokenAsync()`"},{"kind":"text","text":"](#getdevicepushtokenasync)."}]},"type":{"type":"reference","name":"DevicePushToken","package":"expo-notifications"}},{"name":"projectId","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The ID of the project to which the token should be attributed.\nDefaults to ["},{"kind":"code","text":"`Constants.expoConfig.extra.eas.projectId`"},{"kind":"text","text":"]("},{"kind":"relative-link","text":"./constants/#easconfig"},{"kind":"text","text":") exposed by "},{"kind":"code","text":"`expo-constants`"},{"kind":"text","text":".\n\nWhen using EAS Build, this value is automatically set. However, it is\n**recommended** to set it manually. Once you have EAS Build configured, you can find\nthe value in **app.json** under "},{"kind":"code","text":"`extra.eas.projectId`"},{"kind":"text","text":". You can copy and paste it into your code.\nIf you are not using EAS Build, it will fallback to ["},{"kind":"code","text":"`Constants.expoConfig?.extra?.eas?.projectId`"},{"kind":"text","text":"]("},{"kind":"relative-link","text":"./constants/#manifest"},{"kind":"text","text":")."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"type","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Request body override."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"url","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Request URL override."}]},"type":{"type":"intrinsic","name":"string"}}]},{"name":"FirebaseRemoteMessage","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"A Firebase "},{"kind":"code","text":"`RemoteMessage`"},{"kind":"text","text":" that caused the notification to be delivered to the app."}]},"children":[{"name":"collapseKey","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"data","variant":"declaration","kind":1024,"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"string"}],"name":"Record","package":"typescript"}},{"name":"from","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"messageId","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"messageType","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"notification","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"reference","name":"FirebaseRemoteMessageNotification","package":"expo-notifications"},{"type":"literal","value":null}]}},{"name":"originalPriority","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"priority","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"sentTime","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"to","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"ttl","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]},{"name":"FirebaseRemoteMessageNotification","variant":"declaration","kind":256,"children":[{"name":"body","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"bodyLocalizationArgs","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"array","elementType":{"type":"intrinsic","name":"string"}},{"type":"literal","value":null}]}},{"name":"bodyLocalizationKey","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"channelId","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"clickAction","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"color","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"eventTime","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"literal","value":null}]}},{"name":"icon","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"imageUrl","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"lightSettings","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"array","elementType":{"type":"intrinsic","name":"number"}},{"type":"literal","value":null}]}},{"name":"link","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"localOnly","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"notificationCount","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"literal","value":null}]}},{"name":"notificationPriority","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"literal","value":null}]}},{"name":"sound","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"sticky","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"tag","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"ticker","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"title","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"titleLocalizationArgs","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"array","elementType":{"type":"intrinsic","name":"string"}},{"type":"literal","value":null}]}},{"name":"titleLocalizationKey","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"usesDefaultLightSettings","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"usesDefaultSound","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"usesDefaultVibrateSettings","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"vibrateTimings","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"array","elementType":{"type":"intrinsic","name":"number"}},{"type":"literal","value":null}]}},{"name":"visibility","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"literal","value":null}]}}]},{"name":"IosNotificationPermissionsRequest","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"Available configuration for permission request on iOS platform.\nSee Apple documentation for ["},{"kind":"code","text":"`UNAuthorizationOptions`"},{"kind":"text","text":"](https://developer.apple.com/documentation/usernotifications/unauthorizationoptions) to learn more."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"children":[{"name":"allowAlert","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The ability to display alerts."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"allowBadge","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The ability to update the app’s badge."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"allowCriticalAlerts","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The ability to play sounds for critical alerts."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"allowDisplayInCarPlay","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The ability to display notifications in a CarPlay environment."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"allowProvisional","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The ability to post noninterrupting notifications provisionally to the Notification Center."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"allowSound","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The ability to play sounds."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"provideAppNotificationSettings","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"An option indicating the system should display a button for in-app notification settings."}]},"type":{"type":"intrinsic","name":"boolean"}}]},{"name":"LocationNotificationTrigger","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"A trigger related to a ["},{"kind":"code","text":"`UNLocationNotificationTrigger`"},{"kind":"text","text":"](https://developer.apple.com/documentation/usernotifications/unlocationnotificationtrigger?language=objc)."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"children":[{"name":"region","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"reference","name":"CircularRegion","package":"expo-notifications"},{"type":"reference","name":"BeaconRegion","package":"expo-notifications"}]}},{"name":"repeats","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"location"}}]},{"name":"MonthlyNotificationTrigger","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"A trigger related to a monthly notification.\n> The same functionality will be achieved on iOS with a "},{"kind":"code","text":"`CalendarNotificationTrigger`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"day","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"hour","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"minute","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"monthly"}}]},{"name":"NativeDevicePushToken","variant":"declaration","kind":256,"children":[{"name":"data","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"ios"},{"type":"literal","value":"android"}]}}]},{"name":"Notification","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"An object which represents a single notification that has been triggered by some request (["},{"kind":"code","text":"`NotificationRequest`"},{"kind":"text","text":"](#notificationrequest)) at some point in time."}]},"children":[{"name":"date","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"request","variant":"declaration","kind":1024,"type":{"type":"reference","name":"NotificationRequest","package":"expo-notifications"}}]},{"name":"NotificationAction","variant":"declaration","kind":256,"children":[{"name":"buttonTitle","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The title of the button triggering this action."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"identifier","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"A unique string that identifies this action. If a user takes this action (for example, selects this button in the system's Notification UI),\nyour app will receive this "},{"kind":"code","text":"`actionIdentifier`"},{"kind":"text","text":" via the ["},{"kind":"code","text":"`NotificationResponseReceivedListener`"},{"kind":"text","text":"](#addnotificationresponsereceivedlistenerlistener)."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"options","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Object representing the additional configuration options."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"isAuthenticationRequired","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Boolean indicating whether triggering the action will require authentication from the user."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"isDestructive","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Boolean indicating whether the button title will be highlighted a different color (usually red).\nThis usually signifies a destructive action such as deleting data."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"opensAppToForeground","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Boolean indicating whether triggering this action foregrounds the app.\nIf "},{"kind":"code","text":"`false`"},{"kind":"text","text":" and your app is killed (not just backgrounded), ["},{"kind":"code","text":"`NotificationResponseReceived`"},{"kind":"text","text":" listeners](#addnotificationresponsereceivedlistenerlistener)\nwill not be triggered when a user selects this action."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"true"}]}]},"type":{"type":"intrinsic","name":"boolean"}}]}}},{"name":"textInput","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Object which, if provided, will result in a button that prompts the user for a text response."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"placeholder","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"A string that serves as a placeholder until the user begins typing. Defaults to no placeholder string."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"submitButtonTitle","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"A string which will be used as the title for the button used for submitting the text response."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"string"}}]}}}]},{"name":"NotificationBehavior","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"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 ["},{"kind":"code","text":"`UNNotificationPresentationOptions`"},{"kind":"text","text":"](https://developer.apple.com/documentation/usernotifications/unnotificationpresentationoptions).\n> On Android, setting "},{"kind":"code","text":"`shouldPlaySound: false`"},{"kind":"text","text":" will result in the drop-down notification alert **not** showing, no matter what the priority is.\n> This setting will also override any channel-specific sounds you may have configured."}]},"children":[{"name":"priority","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"AndroidNotificationPriority","package":"expo-notifications"}},{"name":"shouldPlaySound","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"shouldSetBadge","variant":"declaration","kind":1024,"comment":{"summary":[],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"shouldShowAlert","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@deprecated","content":[{"kind":"text","text":"instead, specify "},{"kind":"code","text":"`shouldShowBanner`"},{"kind":"text","text":" and / or "},{"kind":"code","text":"`shouldShowList`"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"shouldShowBanner","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"shouldShowList","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}}]},{"name":"NotificationCategory","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"Defines a group of notification actions and their behavior. Categories allow you to create custom\naction buttons that appear with notifications, enabling users to respond to notifications.\n\nCategories must be registered with ["},{"kind":"code","text":"`setNotificationCategoryAsync`"},{"kind":"text","text":"](#setnotificationcategoryasyncidentifier-actions-options)\nbefore they can be used. When scheduling a notification, reference the category by its "},{"kind":"code","text":"`identifier`"},{"kind":"text","text":" in the\n["},{"kind":"code","text":"`NotificationContentInput.categoryIdentifier`"},{"kind":"text","text":"](#notificationcontentinput) field."}]},"children":[{"name":"actions","variant":"declaration","kind":1024,"type":{"type":"array","elementType":{"type":"reference","name":"NotificationAction","package":"expo-notifications"}}},{"name":"identifier","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}},{"name":"options","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"NotificationCategoryOptions","package":"expo-notifications"}}]},{"name":"NotificationChannel","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"An object which represents a notification channel."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"audioAttributes","variant":"declaration","kind":1024,"type":{"type":"reference","name":"AudioAttributes","package":"expo-notifications"}},{"name":"bypassDnd","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"description","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"enableLights","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"enableVibrate","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"groupId","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"id","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}},{"name":"importance","variant":"declaration","kind":1024,"type":{"type":"reference","name":"AndroidImportance","package":"expo-notifications"}},{"name":"lightColor","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}},{"name":"lockscreenVisibility","variant":"declaration","kind":1024,"type":{"type":"reference","name":"AndroidNotificationVisibility","package":"expo-notifications"}},{"name":"name","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"showBadge","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"sound","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"default"},{"type":"literal","value":"custom"},{"type":"literal","value":null}]}},{"name":"vibrationPattern","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"array","elementType":{"type":"intrinsic","name":"number"}},{"type":"literal","value":null}]}}]},{"name":"NotificationChannelGroup","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"An object which represents a notification channel group."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"channels","variant":"declaration","kind":1024,"type":{"type":"array","elementType":{"type":"reference","name":"NotificationChannel","package":"expo-notifications"}}},{"name":"description","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"id","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}},{"name":"isBlocked","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}},{"name":"name","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}}]},{"name":"NotificationChannelGroupInput","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"An object which represents a notification channel group to be set."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"description","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"name","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}}]},{"name":"NotificationChannelGroupManager","variant":"declaration","kind":256,"children":[{"name":"addListener","variant":"declaration","kind":1024,"flags":{"isOptional":true,"isInherited":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"eventName","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"void"}}]}},"inheritedFrom":{"type":"reference","name":"ProxyNativeModule.addListener"}},{"name":"deleteNotificationChannelGroupAsync","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"groupId","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]}}},{"name":"getNotificationChannelGroupAsync","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"groupId","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"reference","name":"NotificationChannelGroup","package":"expo-notifications"},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}}]}}},{"name":"getNotificationChannelGroupsAsync","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"array","elementType":{"type":"reference","name":"NotificationChannelGroup","package":"expo-notifications"}}],"name":"Promise","package":"typescript"}}]}}},{"name":"removeListeners","variant":"declaration","kind":1024,"flags":{"isOptional":true,"isInherited":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"count","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"intrinsic","name":"void"}}]}},"inheritedFrom":{"type":"reference","name":"ProxyNativeModule.removeListeners"}},{"name":"setNotificationChannelGroupAsync","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"groupId","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}},{"name":"group","variant":"param","kind":32768,"type":{"type":"reference","name":"NotificationChannelGroupInput","package":"expo-notifications"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"reference","name":"NotificationChannelGroup","package":"expo-notifications"},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}}]}}}],"indexSignatures":[{"name":"__index","variant":"signature","kind":8192,"parameters":[{"name":"key","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"any"}}],"extendedTypes":[{"type":"reference","target":{"packageName":"expo-modules-core","packagePath":"src/NativeModulesProxy.types.ts","qualifiedName":"ProxyNativeModule"},"name":"ProxyNativeModule","package":"expo-modules-core"}]},{"name":"NotificationChannelManager","variant":"declaration","kind":256,"children":[{"name":"addListener","variant":"declaration","kind":1024,"flags":{"isOptional":true,"isInherited":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"eventName","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"void"}}]}},"inheritedFrom":{"type":"reference","name":"ProxyNativeModule.addListener"}},{"name":"deleteNotificationChannelAsync","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"channelId","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]}}},{"name":"getNotificationChannelAsync","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"channelId","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"reference","name":"NotificationChannel","package":"expo-notifications"},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}}]}}},{"name":"getNotificationChannelsAsync","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"array","elementType":{"type":"reference","name":"NotificationChannel","package":"expo-notifications"}},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}}]}}},{"name":"removeListeners","variant":"declaration","kind":1024,"flags":{"isOptional":true,"isInherited":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"count","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"intrinsic","name":"void"}}]}},"inheritedFrom":{"type":"reference","name":"ProxyNativeModule.removeListeners"}},{"name":"setNotificationChannelAsync","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"channelId","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}},{"name":"channelConfiguration","variant":"param","kind":32768,"type":{"type":"reference","name":"NotificationChannelInput","package":"expo-notifications"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"reference","name":"NotificationChannel","package":"expo-notifications"},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}}]}}}],"indexSignatures":[{"name":"__index","variant":"signature","kind":8192,"parameters":[{"name":"key","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"any"}}],"extendedTypes":[{"type":"reference","target":{"packageName":"expo-modules-core","packagePath":"src/NativeModulesProxy.types.ts","qualifiedName":"ProxyNativeModule"},"name":"ProxyNativeModule","package":"expo-modules-core"}]},{"name":"NotificationHandler","variant":"declaration","kind":256,"children":[{"name":"handleError","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"A function called whenever calling "},{"kind":"code","text":"`handleNotification()`"},{"kind":"text","text":" for an incoming notification fails."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"notificationId","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Identifier of the notification."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"error","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"An error which occurred in form of "},{"kind":"code","text":"`NotificationHandlingError`"},{"kind":"text","text":" object."}]},"type":{"type":"reference","name":"NotificationHandlingError","package":"expo-notifications"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"handleNotification","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"A function accepting an incoming notification returning a "},{"kind":"code","text":"`Promise`"},{"kind":"text","text":" resolving to a behavior (["},{"kind":"code","text":"`NotificationBehavior`"},{"kind":"text","text":"](#notificationbehavior))\napplicable to the notification"}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"notification","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"An object representing the notification."}]},"type":{"type":"reference","name":"Notification","package":"expo-notifications"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"reference","name":"NotificationBehavior","package":"expo-notifications"}],"name":"Promise","package":"typescript"}}]}}},{"name":"handleSuccess","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"A function called whenever an incoming notification is handled successfully."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"notificationId","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Identifier of the notification."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"void"}}]}}}]},{"name":"NotificationPermissionsRequest","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"An interface representing the permissions request scope configuration.\nEach option corresponds to a different native platform authorization option."}]},"children":[{"name":"android","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"On Android, all available permissions are granted by default, and if a user declines any permission, an app cannot prompt the user to change."}]},"type":{"type":"intrinsic","name":"object"}},{"name":"ios","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Available configuration for permission request on iOS platform."}]},"type":{"type":"reference","name":"IosNotificationPermissionsRequest","package":"expo-notifications"}}]},{"name":"NotificationPermissionsStatus","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"An object obtained by permissions get and request functions."}]},"children":[{"name":"android","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"importance","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"interruptionFilter","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"canAskAgain","variant":"declaration","kind":1024,"flags":{"isInherited":true},"comment":{"summary":[{"kind":"text","text":"Indicates if user can be asked again for specific permission.\nIf not, one should be directed to the Settings app\nin order to enable/disable the permission."}]},"type":{"type":"intrinsic","name":"boolean"},"inheritedFrom":{"type":"reference","name":"PermissionResponse.canAskAgain"}},{"name":"expires","variant":"declaration","kind":1024,"flags":{"isInherited":true},"comment":{"summary":[{"kind":"text","text":"Determines time when the permission expires."}]},"type":{"type":"reference","name":"PermissionExpiration","package":"expo-modules-core"},"inheritedFrom":{"type":"reference","name":"PermissionResponse.expires"}},{"name":"granted","variant":"declaration","kind":1024,"flags":{"isInherited":true},"comment":{"summary":[{"kind":"text","text":"A convenience boolean that indicates if the permission is granted."}]},"type":{"type":"intrinsic","name":"boolean"},"inheritedFrom":{"type":"reference","name":"PermissionResponse.granted"}},{"name":"ios","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"alertStyle","variant":"declaration","kind":1024,"type":{"type":"reference","name":"IosAlertStyle","package":"expo-notifications"}},{"name":"allowsAlert","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"literal","value":null}]}},{"name":"allowsAnnouncements","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"literal","value":null}]}},{"name":"allowsBadge","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"literal","value":null}]}},{"name":"allowsCriticalAlerts","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"literal","value":null}]}},{"name":"allowsDisplayInCarPlay","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"literal","value":null}]}},{"name":"allowsDisplayInNotificationCenter","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"literal","value":null}]}},{"name":"allowsDisplayOnLockScreen","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"literal","value":null}]}},{"name":"allowsPreviews","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"reference","name":"IosAllowsPreviews","package":"expo-notifications"},{"type":"literal","value":null}]}},{"name":"allowsSound","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"literal","value":null}]}},{"name":"providesAppNotificationSettings","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"literal","value":null}]}},{"name":"status","variant":"declaration","kind":1024,"type":{"type":"reference","name":"IosAuthorizationStatus","package":"expo-notifications"}}]}}},{"name":"status","variant":"declaration","kind":1024,"flags":{"isInherited":true},"comment":{"summary":[{"kind":"text","text":"Determines the status of the permission."}]},"type":{"type":"reference","name":"PermissionStatus","package":"expo-modules-core"},"inheritedFrom":{"type":"reference","name":"PermissionResponse.status"}}],"extendedTypes":[{"type":"reference","name":"PermissionResponse","package":"expo-modules-core"}]},{"name":"NotificationRequest","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"An object represents a request to present a notification. It has content — how it's being represented, and a trigger — what triggers the notification.\nMany notifications (["},{"kind":"code","text":"`Notification`"},{"kind":"text","text":"](#notification)) may be triggered with the same request (for example, a repeating notification)."}]},"children":[{"name":"content","variant":"declaration","kind":1024,"type":{"type":"reference","name":"NotificationContent","package":"expo-notifications"}},{"name":"identifier","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}},{"name":"trigger","variant":"declaration","kind":1024,"type":{"type":"reference","name":"NotificationTrigger","package":"expo-notifications"}}]},{"name":"NotificationRequestInput","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"An object which represents a notification request you can pass into "},{"kind":"code","text":"`scheduleNotificationAsync`"},{"kind":"text","text":"."}]},"children":[{"name":"content","variant":"declaration","kind":1024,"type":{"type":"reference","name":"NotificationContentInput","package":"expo-notifications"}},{"name":"identifier","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"trigger","variant":"declaration","kind":1024,"type":{"type":"reference","name":"NotificationTriggerInput","package":"expo-notifications"}}]},{"name":"NotificationResponse","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"An object which represents user's interaction with the notification.\n> **Note:** If the user taps on a notification, "},{"kind":"code","text":"`actionIdentifier`"},{"kind":"text","text":" will be equal to ["},{"kind":"code","text":"`Notifications.DEFAULT_ACTION_IDENTIFIER`"},{"kind":"text","text":"](#notificationsdefault_action_identifier)."}]},"children":[{"name":"actionIdentifier","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}},{"name":"notification","variant":"declaration","kind":1024,"type":{"type":"reference","name":"Notification","package":"expo-notifications"}},{"name":"userText","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}}]},{"name":"Region","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"The region used to determine when the system sends the notification."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"children":[{"name":"identifier","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The identifier for the region object."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"notifyOnEntry","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Indicates whether notifications are generated upon entry into the region."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"notifyOnExit","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Indicates whether notifications are generated upon exit from the region."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}}],"extendedBy":[{"type":"reference","name":"CircularRegion"},{"type":"reference","name":"BeaconRegion"}]},{"name":"TimeIntervalNotificationTrigger","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"A trigger related to an elapsed time interval. May be repeating (see "},{"kind":"code","text":"`repeats`"},{"kind":"text","text":" field)."}]},"children":[{"name":"repeats","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"boolean"}},{"name":"seconds","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"timeInterval"}}]},{"name":"UnknownNotificationTrigger","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"Represents a notification trigger that is unknown to "},{"kind":"code","text":"`expo-notifications`"},{"kind":"text","text":" and that it didn't know how to serialize for JS."}]},"children":[{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"unknown"}}]},{"name":"WeeklyNotificationTrigger","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"A trigger related to a weekly notification.\n> The same functionality will be achieved on iOS with a "},{"kind":"code","text":"`CalendarNotificationTrigger`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"hour","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"minute","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"weekly"}},{"name":"weekday","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]},{"name":"YearlyNotificationTrigger","variant":"declaration","kind":256,"comment":{"summary":[{"kind":"text","text":"A trigger related to a yearly notification.\n> The same functionality will be achieved on iOS with a "},{"kind":"code","text":"`CalendarNotificationTrigger`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"day","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"hour","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"minute","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"month","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"yearly"}}]},{"name":"AudioAttributesInput","variant":"declaration","kind":2097152,"comment":{"summary":[],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Partial"},"typeArguments":[{"type":"reference","name":"AudioAttributes","package":"expo-notifications"}],"name":"Partial","package":"typescript"}},{"name":"CalendarTriggerInput","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"This trigger input will cause the notification to be delivered once or many times\n(controlled by the value of "},{"kind":"code","text":"`repeats`"},{"kind":"text","text":")\nwhen the date components match the specified values.\nCorresponds to native\n["},{"kind":"code","text":"`UNCalendarNotificationTrigger`"},{"kind":"text","text":"](https://developer.apple.com/documentation/usernotifications/uncalendarnotificationtrigger?language=objc)."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"children":[{"name":"channelId","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"day","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"hour","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"minute","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"month","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"repeats","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}},{"name":"second","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"seconds","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"timezone","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"reference","name":"SchedulableTriggerInputTypes.CALENDAR","package":"expo-notifications"}},{"name":"weekday","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"weekdayOrdinal","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"weekOfMonth","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"weekOfYear","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"year","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}}]},{"name":"ChannelAwareTriggerInput","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"A trigger that will cause the notification to be delivered immediately."}]},"children":[{"name":"channelId","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"string"}}]},{"name":"DailyTriggerInput","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"This trigger input will cause the notification to be delivered once per day\nwhen the "},{"kind":"code","text":"`hour`"},{"kind":"text","text":" and "},{"kind":"code","text":"`minute`"},{"kind":"text","text":" date components match the specified values."}]},"children":[{"name":"channelId","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"hour","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"minute","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"reference","name":"SchedulableTriggerInputTypes.DAILY","package":"expo-notifications"}}]},{"name":"DateTriggerInput","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"This trigger input will cause the notification to be delivered once\non the specified value of the "},{"kind":"code","text":"`date`"},{"kind":"text","text":" property. The value of "},{"kind":"code","text":"`repeats`"},{"kind":"text","text":" will be ignored\nfor this trigger type."}]},"children":[{"name":"channelId","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"date","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Date"},"name":"Date","package":"typescript"},{"type":"intrinsic","name":"number"}]}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"reference","name":"SchedulableTriggerInputTypes.DATE","package":"expo-notifications"}}]},{"name":"DevicePushToken","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"In simple terms, an object of "},{"kind":"code","text":"`type: Platform.OS`"},{"kind":"text","text":" and "},{"kind":"code","text":"`data: any`"},{"kind":"text","text":". The "},{"kind":"code","text":"`data`"},{"kind":"text","text":" type depends on the environment - on a native device it will be a string,\nwhich you can then use to send notifications via Firebase Cloud Messaging (Android) or APNs (iOS)."}]},"type":{"type":"union","types":[{"type":"reference","name":"ExplicitlySupportedDevicePushToken","package":"expo-notifications"},{"type":"reference","name":"ImplicitlySupportedDevicePushToken","package":"expo-notifications"}]}},{"name":"ExplicitlySupportedDevicePushToken","variant":"declaration","kind":2097152,"type":{"type":"reference","name":"NativeDevicePushToken","package":"expo-notifications"}},{"name":"ImplicitlySupportedDevicePushToken","variant":"declaration","kind":2097152,"children":[{"name":"data","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The push token as a string for a native platform."}]},"type":{"type":"intrinsic","name":"any"}},{"name":"type","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Either "},{"kind":"code","text":"`android`"},{"kind":"text","text":" or "},{"kind":"code","text":"`ios`"},{"kind":"text","text":"."}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Exclude"},"typeArguments":[{"type":"query","queryType":{"type":"reference","target":{"packageName":"expo-modules-core","packagePath":"src/Platform.ts","qualifiedName":"__object.OS"},"name":"Platform.OS","package":"expo-modules-core","qualifiedName":"__object.OS","preferValues":true}},{"type":"indexedAccess","indexType":{"type":"literal","value":"type"},"objectType":{"type":"reference","name":"ExplicitlySupportedDevicePushToken","package":"expo-notifications"}}],"name":"Exclude","package":"typescript"}}]},{"name":"InterruptionLevel","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"The notification’s importance and required delivery timing.\nPossible values:\n- 'passive' - the system adds the notification to the notification list without lighting up the screen or playing a sound\n- 'active' - the system presents the notification immediately, lights up the screen, and can play a sound\n- 'timeSensitive' - The system presents the notification immediately, lights up the screen, can play a sound, and breaks through system notification controls\n- 'critical - the system presents the notification immediately, lights up the screen, and bypasses the mute switch to play a sound"}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"union","types":[{"type":"literal","value":"passive"},{"type":"literal","value":"active"},{"type":"literal","value":"timeSensitive"},{"type":"literal","value":"critical"}]}},{"name":"MonthlyTriggerInput","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"This trigger input will cause the notification to be delivered once per month\nwhen the "},{"kind":"code","text":"`day`"},{"kind":"text","text":", "},{"kind":"code","text":"`hour`"},{"kind":"text","text":", and "},{"kind":"code","text":"`minute`"},{"kind":"text","text":" date components match the specified values.\n> **Note:** All properties are specified in JavaScript "},{"kind":"code","text":"`Date`"},{"kind":"text","text":" object's ranges (i.e. January is represented as 0)."}]},"children":[{"name":"channelId","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"day","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"hour","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"minute","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"reference","name":"SchedulableTriggerInputTypes.MONTHLY","package":"expo-notifications"}}]},{"name":"NativeNotificationPermissionsRequest","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"reference","name":"IosNotificationPermissionsRequest","package":"expo-notifications"},{"type":"intrinsic","name":"object"}]}},{"name":"NotificationCategoryOptions","variant":"declaration","kind":2097152,"comment":{"summary":[],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"children":[{"name":"allowAnnouncement","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@deprecated","content":[{"kind":"text","text":"the option is ignored by iOS. This option will be removed in a future release.\nIndicates whether to allow notifications to be automatically read by Siri when the user is using AirPods."}]},{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"allowInCarPlay","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Indicates whether to allow CarPlay to display notifications of this type. **Apps must be approved for CarPlay to make use of this feature.**"}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"categorySummaryFormat","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"A format string for the summary description used when the system groups the category’s notifications."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"customDismissAction","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Indicates whether to send actions for handling when the notification is dismissed (the user must explicitly dismiss\nthe notification interface - ignoring a notification or flicking away a notification banner does not trigger this action)."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"intentIdentifiers","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Array of [Intent Class Identifiers](https://developer.apple.com/documentation/sirikit/intent_class_identifiers). When a notification is delivered,\nthe presence of an intent identifier lets the system know that the notification is potentially related to the handling of a request made through Siri."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"[]"}]}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"string"}}},{"name":"previewPlaceholder","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Customizable placeholder for the notification preview text. This is shown if the user has disabled notification previews for the app.\nDefaults to the localized iOS system default placeholder ("},{"kind":"code","text":"`Notification`"},{"kind":"text","text":")."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"showSubtitle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Indicates whether to show the notification's subtitle, even if the user has disabled notification previews for the app."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"showTitle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Indicates whether to show the notification's title, even if the user has disabled notification previews for the app."}],"blockTags":[{"tag":"@default","content":[{"kind":"text","text":"false"}]}]},"type":{"type":"intrinsic","name":"boolean"}}]},{"name":"NotificationChannelInput","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"An object which represents a notification channel to be set."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"reference","typeArguments":[{"type":"intersection","types":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Omit"},"typeArguments":[{"type":"reference","name":"NotificationChannel","package":"expo-notifications"},{"type":"union","types":[{"type":"literal","value":"id"},{"type":"literal","value":"audioAttributes"},{"type":"literal","value":"sound"}]}],"name":"Omit","package":"typescript"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"audioAttributes","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"AudioAttributesInput","package":"expo-notifications"}},{"name":"sound","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}}]}}]},{"type":"union","types":[{"type":"literal","value":"name"},{"type":"literal","value":"importance"}]}],"name":"RequiredBy","package":"expo-notifications"}},{"name":"NotificationContent","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"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 ["},{"kind":"code","text":"`NotificationContentInput`"},{"kind":"text","text":"](#notificationcontentinput)."}]},"type":{"type":"intersection","types":[{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"body","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Notification body - the main content of the notification."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"categoryIdentifier","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The identifier of the notification’s category."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"data","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Data associated with the notification, not displayed"}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"unknown"}],"name":"Record","package":"typescript"}},{"name":"sound","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"literal","value":"default"},{"type":"literal","value":"defaultCritical"},{"type":"literal","value":"custom"},{"type":"literal","value":"defaultRingtone"},{"type":"literal","value":null}]}},{"name":"subtitle","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"On Android: "},{"kind":"code","text":"`subText`"},{"kind":"text","text":" - the display depends on the device.\n\nOn iOS: "},{"kind":"code","text":"`subtitle`"},{"kind":"text","text":" - the bold text displayed between title and the rest of the content."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"title","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Notification title - the bold text displayed above the rest of the content."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}}]}},{"type":"union","types":[{"type":"reference","name":"NotificationContentIos","package":"expo-notifications"},{"type":"reference","name":"NotificationContentAndroid","package":"expo-notifications"}]}]}},{"name":"NotificationContentAndroid","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"See [Android developer documentation](https://developer.android.com/reference/android/app/Notification#fields) for more information on specific fields."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"children":[{"name":"badge","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Application badge number associated with the notification."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Accent color (in "},{"kind":"code","text":"`#AARRGGBB`"},{"kind":"text","text":" or "},{"kind":"code","text":"`#RRGGBB`"},{"kind":"text","text":" format) to be applied by the standard Style templates when presenting this notification."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"priority","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Relative priority for this notification. Priority is an indication of how much of the user's valuable attention should be consumed by this notification.\nLow-priority notifications may be hidden from the user in certain situations, while the user might be interrupted for a higher-priority notification.\nThe system will make a determination about how to interpret this priority when presenting the notification."}]},"type":{"type":"reference","name":"AndroidNotificationPriority","package":"expo-notifications"}},{"name":"vibrationPattern","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The pattern with which to vibrate."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"number"}}}]},{"name":"NotificationContentAttachmentIos","variant":"declaration","kind":2097152,"comment":{"summary":[],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"children":[{"name":"hideThumbnail","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}},{"name":"identifier","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"thumbnailClipArea","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"height","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"width","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"x","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"y","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]}}},{"name":"thumbnailTime","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"typeHint","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"url","variant":"declaration","kind":1024,"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}}]},{"name":"NotificationContentInput","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"An object which represents notification content that you pass in as a part of "},{"kind":"code","text":"`NotificationRequestInput`"},{"kind":"text","text":"."}]},"children":[{"name":"attachments","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The visual and audio attachments to display alongside the notification’s main content."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"array","elementType":{"type":"reference","name":"NotificationContentAttachmentIos","package":"expo-notifications"}}},{"name":"autoDismiss","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If set to "},{"kind":"code","text":"`false`"},{"kind":"text","text":", the notification will not be automatically dismissed when clicked.\nThe setting will be used when the value is not provided or is invalid is set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", and the notification\nwill be dismissed automatically anyway. Corresponds directly to Android's "},{"kind":"code","text":"`setAutoCancel`"},{"kind":"text","text":" behavior.\n\nSee [Android developer documentation](https://developer.android.com/reference/android/app/Notification.Builder#setAutoCancel(boolean))\nfor more details."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"badge","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Application badge number associated with the notification."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"body","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The main content of the notification."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"categoryIdentifier","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The identifier of the notification’s category."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"string"}},{"name":"color","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Accent color (in "},{"kind":"code","text":"`#AARRGGBB`"},{"kind":"text","text":" or "},{"kind":"code","text":"`#RRGGBB`"},{"kind":"text","text":" format) to be applied by the standard Style templates when presenting this notification."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"intrinsic","name":"string"}},{"name":"data","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Data associated with the notification, not displayed."}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"unknown"}],"name":"Record","package":"typescript"}},{"name":"interruptionLevel","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The notification’s importance and required delivery timing.\nPossible values:\n- 'passive' - the system adds the notification to the notification list without lighting up the screen or playing a sound\n- 'active' - the system presents the notification immediately, lights up the screen, and can play a sound\n- 'timeSensitive' - The system presents the notification immediately, lights up the screen, can play a sound, and breaks through system notification controls\n- 'critical - the system presents the notification immediately, lights up the screen, and bypasses the mute switch to play a sound"}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","name":"InterruptionLevel","package":"expo-notifications"}},{"name":"launchImageName","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The name of the image or storyboard to use when your app launches because of the notification."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"priority","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Relative priority for this notification. Priority is an indication of how much of the user's valuable attention should be consumed by this notification.\nLow-priority notifications may be hidden from the user in certain situations, while the user might be interrupted for a higher-priority notification.\nThe system will make a determination about how to interpret this priority when presenting the notification."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"intrinsic","name":"string"}},{"name":"sound","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The notification sound. Use "},{"kind":"code","text":"`false`"},{"kind":"text","text":" for a silent notification.\nOn Android version 8 and later, control the sounds via [notification channels](#setnotificationchannelasyncchannelid-channel).\n"},{"kind":"code","text":"`defaultCritical`"},{"kind":"text","text":" and "},{"kind":"code","text":"`defaultRingtone`"},{"kind":"text","text":" are applicable only on iOS, with "},{"kind":"code","text":"`defaultCritical`"},{"kind":"text","text":" requiring the critical alerts entitlement.\n\nOn iOS, you can also provide a custom sound filename including the extension. The file needs to be added\nto the "},{"kind":"code","text":"`expo-notifications`"},{"kind":"text","text":" config plugin "},{"kind":"code","text":"`sounds`"},{"kind":"text","text":" array in your app config."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"literal","value":"default"},{"type":"literal","value":"defaultCritical"},{"type":"literal","value":"defaultRingtone"},{"type":"intersection","types":[{"type":"intrinsic","name":"string"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536}}]}]}},{"name":"sticky","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"If set to "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the notification cannot be dismissed by swipe. This setting defaults\nto "},{"kind":"code","text":"`false`"},{"kind":"text","text":" if not provided or is invalid. Corresponds directly to Android's "},{"kind":"code","text":"`isOngoing`"},{"kind":"text","text":" behavior.\nIn Firebase terms this property of a notification is called "},{"kind":"code","text":"`sticky`"},{"kind":"text","text":".\n\nSee [Android developer documentation](https://developer.android.com/reference/android/app/Notification.Builder#setOngoing(boolean))\nand [Firebase documentation](https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#AndroidNotification.FIELDS.sticky)\nfor more details."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"subtitle","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"On Android: "},{"kind":"code","text":"`subText`"},{"kind":"text","text":" - the display depends on the device.\n\nOn iOS: "},{"kind":"code","text":"`subtitle`"},{"kind":"text","text":" - the bold text displayed between title and the rest of the content."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"threadIdentifier","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"An identifier used to group related notifications together in the notification center."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"intrinsic","name":"string"}},{"name":"title","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Notification title - the bold text displayed above the rest of the content."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"vibrate","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The pattern with which to vibrate."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"number"}}}]},{"name":"NotificationContentIos","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"See [Apple documentation](https://developer.apple.com/documentation/usernotifications/unnotificationcontent?language=objc) for more information on specific fields."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"children":[{"name":"attachments","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The visual and audio attachments to display alongside the notification’s main content."}]},"type":{"type":"array","elementType":{"type":"reference","name":"NotificationContentAttachmentIos","package":"expo-notifications"}}},{"name":"badge","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The number that your app’s icon displays."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"literal","value":null}]}},{"name":"interruptionLevel","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"reference","name":"InterruptionLevel","package":"expo-notifications"}},{"name":"launchImageName","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The name of the image or storyboard to use when your app launches because of the notification."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"summaryArgument","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The text the system adds to the notification summary to provide additional context."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}},{"name":"summaryArgumentCount","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The number the system adds to the notification summary when the notification represents multiple items."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"targetContentIdentifier","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The value your app uses to determine which scene to display to handle the notification."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"threadIdentifier","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"The identifier that groups related notifications."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"literal","value":null}]}}]},{"name":"NotificationHandlingError","variant":"declaration","kind":2097152,"type":{"type":"union","types":[{"type":"reference","name":"NotificationTimeoutError","package":"expo-notifications"},{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Error"},"name":"Error","package":"typescript"}]}},{"name":"NotificationTaskPayload","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Payload for the background notification handler task.\nSee [Run JavaScript in response to incoming notifications](#run-javascript-in-response-to-incoming-notifications)."}]},"type":{"type":"union","types":[{"type":"reference","name":"NotificationResponse","package":"expo-notifications"},{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"aps","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Detailed, raw object describing the remote notification. See [Apple's payload key reference](https://developer.apple.com/documentation/usernotifications/generating-a-remote-notification#Payload-key-reference)."}],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"unknown"}],"name":"Record","package":"typescript"}},{"name":"data","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"code","text":"`dataString`"},{"kind":"text","text":" carries the data payload of the notification as JSON string."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"children":[{"name":"dataString","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}}],"indexSignatures":[{"name":"__index","variant":"signature","kind":8192,"parameters":[{"name":"key","variant":"param","kind":32768,"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"unknown"}}]}}},{"name":"notification","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Object describing the remote notification. "},{"kind":"code","text":"`null`"},{"kind":"text","text":" for headless background notifications."}]},"type":{"type":"union","types":[{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"unknown"}],"name":"Record","package":"typescript"},{"type":"literal","value":null}]}}]}}]}},{"name":"NotificationTrigger","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"A union type containing different triggers which may cause the notification to be delivered to the application."}]},"type":{"type":"union","types":[{"type":"reference","name":"PushNotificationTrigger","package":"expo-notifications"},{"type":"reference","name":"LocationNotificationTrigger","package":"expo-notifications"},{"type":"reference","name":"NotificationTriggerInput","package":"expo-notifications"},{"type":"reference","name":"UnknownNotificationTrigger","package":"expo-notifications"}]}},{"name":"NotificationTriggerInput","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"A type which represents possible triggers with which you can schedule notifications.\nA "},{"kind":"code","text":"`null`"},{"kind":"text","text":" trigger means that the notification should be scheduled for delivery immediately."}]},"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","name":"ChannelAwareTriggerInput","package":"expo-notifications"},{"type":"reference","name":"SchedulableNotificationTriggerInput","package":"expo-notifications"}]}},{"name":"PermissionExpiration","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Permission expiration time. Currently, all permissions are granted permanently."}]},"type":{"type":"union","types":[{"type":"literal","value":"never"},{"type":"intrinsic","name":"number"}]}},{"name":"PermissionResponse","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"An object obtained by permissions get and request functions."}]},"children":[{"name":"canAskAgain","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Indicates if user can be asked again for specific permission.\nIf not, one should be directed to the Settings app\nin order to enable/disable the permission."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"expires","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Determines time when the permission expires."}]},"type":{"type":"reference","name":"PermissionExpiration","package":"expo-modules-core"}},{"name":"granted","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"A convenience boolean that indicates if the permission is granted."}]},"type":{"type":"intrinsic","name":"boolean"}},{"name":"status","variant":"declaration","kind":1024,"comment":{"summary":[{"kind":"text","text":"Determines the status of the permission."}]},"type":{"type":"reference","name":"PermissionStatus","package":"expo-modules-core"}}],"extendedBy":[{"type":"reference","name":"NotificationPermissionsStatus"}]},{"name":"PushNotificationTrigger","variant":"declaration","kind":2097152,"children":[{"name":"payload","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"ios"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Record"},"typeArguments":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"unknown"}],"name":"Record","package":"typescript"}},{"name":"remoteMessage","variant":"declaration","kind":1024,"flags":{"isOptional":true},"comment":{"summary":[],"blockTags":[{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"type":{"type":"reference","name":"FirebaseRemoteMessage","package":"expo-notifications"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"literal","value":"push"}}]},{"name":"PushTokenListener","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"A function accepting a device push token (["},{"kind":"code","text":"`DevicePushToken`"},{"kind":"text","text":"](#devicepushtoken)) as an argument.\n> **Note:** You should not call "},{"kind":"code","text":"`getDevicePushTokenAsync`"},{"kind":"text","text":" inside this function, as it triggers the listener and may lead to an infinite loop."}],"blockTags":[{"tag":"@header","content":[{"kind":"text","text":"fetch"}]}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"token","variant":"param","kind":32768,"type":{"type":"reference","name":"DevicePushToken","package":"expo-notifications"}}],"type":{"type":"intrinsic","name":"void"}}]}}},{"name":"SchedulableNotificationTriggerInput","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"Input for time-based, schedulable triggers.\nFor these triggers you can check the next trigger date with ["},{"kind":"code","text":"`getNextTriggerDateAsync`"},{"kind":"text","text":"](#getnexttriggerdateasynctrigger).\nIf you pass in a "},{"kind":"code","text":"`number`"},{"kind":"text","text":" (Unix timestamp) or "},{"kind":"code","text":"`Date`"},{"kind":"text","text":", it will be processed as a\ntrigger input of type ["},{"kind":"code","text":"`SchedulableTriggerInputTypes.DATE`"},{"kind":"text","text":"](#date). Otherwise, the input must be\nan object, with a "},{"kind":"code","text":"`type`"},{"kind":"text","text":" value set to one of the allowed values in ["},{"kind":"code","text":"`SchedulableTriggerInputTypes`"},{"kind":"text","text":"](#schedulabletriggerinputtypes).\nIf the input is an object, date components passed in will be validated, and\nan error is thrown if they are outside their allowed range (for example, the "},{"kind":"code","text":"`minute`"},{"kind":"text","text":" and\n"},{"kind":"code","text":"`second`"},{"kind":"text","text":" components must be between 0 and 59 inclusive)."}]},"type":{"type":"union","types":[{"type":"reference","name":"CalendarTriggerInput","package":"expo-notifications"},{"type":"reference","name":"TimeIntervalTriggerInput","package":"expo-notifications"},{"type":"reference","name":"DailyTriggerInput","package":"expo-notifications"},{"type":"reference","name":"WeeklyTriggerInput","package":"expo-notifications"},{"type":"reference","name":"MonthlyTriggerInput","package":"expo-notifications"},{"type":"reference","name":"YearlyTriggerInput","package":"expo-notifications"},{"type":"reference","name":"DateTriggerInput","package":"expo-notifications"}]}},{"name":"Subscription","variant":"declaration","kind":2097152,"comment":{"summary":[],"blockTags":[{"tag":"@deprecated","content":[{"kind":"text","text":"use the ["},{"kind":"code","text":"`EventSubscription`"},{"kind":"text","text":"](#eventsubscription) type instead"}]}]},"type":{"type":"reference","name":"EventSubscription","package":"expo-modules-core"}},{"name":"TimeIntervalTriggerInput","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"This trigger input will cause the notification to be delivered once or many times\n(depends on the "},{"kind":"code","text":"`repeats`"},{"kind":"text","text":" field) after "},{"kind":"code","text":"`seconds`"},{"kind":"text","text":" time elapse.\n> **On iOS**, when "},{"kind":"code","text":"`repeats`"},{"kind":"text","text":" is "},{"kind":"code","text":"`true`"},{"kind":"text","text":", the time interval must be 60 seconds or greater.\nOtherwise, the notification won't be triggered."}]},"children":[{"name":"channelId","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"repeats","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"boolean"}},{"name":"seconds","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"reference","name":"SchedulableTriggerInputTypes.TIME_INTERVAL","package":"expo-notifications"}}]},{"name":"WeeklyTriggerInput","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"This trigger input will cause the notification to be delivered once every week\nwhen the "},{"kind":"code","text":"`weekday`"},{"kind":"text","text":", "},{"kind":"code","text":"`hour`"},{"kind":"text","text":", and "},{"kind":"code","text":"`minute`"},{"kind":"text","text":" date components match the specified values.\n> **Note:** Weekdays are specified with a number from "},{"kind":"code","text":"`1`"},{"kind":"text","text":" through "},{"kind":"code","text":"`7`"},{"kind":"text","text":", with "},{"kind":"code","text":"`1`"},{"kind":"text","text":" indicating Sunday."}]},"children":[{"name":"channelId","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"hour","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"minute","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"reference","name":"SchedulableTriggerInputTypes.WEEKLY","package":"expo-notifications"}},{"name":"weekday","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}}]},{"name":"YearlyTriggerInput","variant":"declaration","kind":2097152,"comment":{"summary":[{"kind":"text","text":"This trigger input will cause the notification to be delivered once every year\nwhen the "},{"kind":"code","text":"`day`"},{"kind":"text","text":", "},{"kind":"code","text":"`month`"},{"kind":"text","text":", "},{"kind":"code","text":"`hour`"},{"kind":"text","text":", and "},{"kind":"code","text":"`minute`"},{"kind":"text","text":" date components match the specified values.\n> **Note:** All properties are specified in JavaScript "},{"kind":"code","text":"`Date`"},{"kind":"text","text":" object's ranges (i.e. January is represented as 0)."}]},"children":[{"name":"channelId","variant":"declaration","kind":1024,"flags":{"isOptional":true},"type":{"type":"intrinsic","name":"string"}},{"name":"day","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"hour","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"minute","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"month","variant":"declaration","kind":1024,"type":{"type":"intrinsic","name":"number"}},{"name":"type","variant":"declaration","kind":1024,"type":{"type":"reference","name":"SchedulableTriggerInputTypes.YEARLY","package":"expo-notifications"}}]},{"name":"DEFAULT_ACTION_IDENTIFIER","variant":"declaration","kind":32,"flags":{"isConst":true},"type":{"type":"literal","value":"expo.modules.notifications.actions.DEFAULT"},"defaultValue":"'expo.modules.notifications.actions.DEFAULT'"},{"name":"addNotificationReceivedListener","variant":"declaration","kind":64,"signatures":[{"name":"addNotificationReceivedListener","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Listeners registered by this method will be called whenever a notification is received while the app is running."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"An ["},{"kind":"code","text":"`EventSubscription`"},{"kind":"text","text":"](#eventsubscription) object represents the subscription of the provided listener."}]},{"tag":"@example","name":"Registering a notification listener using a React hook:","content":[{"kind":"code","text":"```jsx\nimport React from 'react';\nimport * as Notifications from 'expo-notifications';\n\nexport default function App() {\n React.useEffect(() => {\n const subscription = Notifications.addNotificationReceivedListener(notification => {\n console.log(notification);\n });\n return () => subscription.remove();\n }, []);\n\n return (\n // Your app content\n );\n}\n```"}]},{"tag":"@header","content":[{"kind":"text","text":"listen"}]}]},"parameters":[{"name":"listener","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A function accepting a notification (["},{"kind":"code","text":"`Notification`"},{"kind":"text","text":"](#notification)) as an argument."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"event","variant":"param","kind":32768,"type":{"type":"reference","name":"Notification","package":"expo-notifications"}}],"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"EventSubscription","package":"expo-modules-core"}}]},{"name":"addNotificationResponseReceivedListener","variant":"declaration","kind":64,"signatures":[{"name":"addNotificationResponseReceivedListener","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Listeners registered by this method will be called whenever a user interacts with a notification (for example, taps on it)."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"An ["},{"kind":"code","text":"`EventSubscription`"},{"kind":"text","text":"](#eventsubscription) object represents the subscription of the provided listener."}]},{"tag":"@example","name":"Register a notification responder listener:","content":[{"kind":"code","text":"```jsx\nimport React from 'react';\nimport { Linking } from 'react-native';\nimport * as Notifications from 'expo-notifications';\n\nexport default function Container() {\n React.useEffect(() => {\n const subscription = Notifications.addNotificationResponseReceivedListener(response => {\n const url = response.notification.request.content.data.url;\n Linking.openURL(url);\n });\n return () => subscription.remove();\n }, []);\n\n return (\n // Your app content\n );\n}\n```"}]},{"tag":"@header","content":[{"kind":"text","text":"listen"}]}]},"parameters":[{"name":"listener","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A function accepting notification response (["},{"kind":"code","text":"`NotificationResponse`"},{"kind":"text","text":"](#notificationresponse)) as an argument."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"parameters":[{"name":"event","variant":"param","kind":32768,"type":{"type":"reference","name":"NotificationResponse","package":"expo-notifications"}}],"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"EventSubscription","package":"expo-modules-core"}}]},{"name":"addNotificationsDroppedListener","variant":"declaration","kind":64,"signatures":[{"name":"addNotificationsDroppedListener","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Listeners registered by this method will be called whenever some notifications have been dropped by the server.\nApplicable only to Firebase Cloud Messaging which we use as a notifications service on Android. It corresponds to "},{"kind":"code","text":"`onDeletedMessages()`"},{"kind":"text","text":" callback.\nMore information can be found in [Firebase docs](https://firebase.google.com/docs/cloud-messaging/android/receive#override-ondeletedmessages)."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"An ["},{"kind":"code","text":"`EventSubscription`"},{"kind":"text","text":"](#eventsubscription) object represents the subscription of the provided listener."}]},{"tag":"@header","content":[{"kind":"text","text":"listen"}]}]},"parameters":[{"name":"listener","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A callback function."}]},"type":{"type":"reflection","declaration":{"name":"__type","variant":"declaration","kind":65536,"signatures":[{"name":"__type","variant":"signature","kind":4096,"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reference","name":"EventSubscription","package":"expo-modules-core"}}]},{"name":"addPushTokenListener","variant":"declaration","kind":64,"signatures":[{"name":"addPushTokenListener","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"In rare situations, a push token may be changed by the push notification service while the app is running.\nWhen a token is rolled, the old one becomes invalid and sending notifications to it will fail.\nA push token listener will let you handle this situation gracefully by registering the new token with your backend right away."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"An ["},{"kind":"code","text":"`EventSubscription`"},{"kind":"text","text":"](#eventsubscription) object represents the subscription of the provided listener."}]},{"tag":"@header","content":[{"kind":"text","text":"fetch"}]},{"tag":"@example","name":"Registering a push token listener using a React hook.","content":[{"kind":"code","text":"```jsx\nimport React from 'react';\nimport * as Notifications from 'expo-notifications';\n\nimport { registerDevicePushTokenAsync } from '../api';\n\nexport default function App() {\n React.useEffect(() => {\n const subscription = Notifications.addPushTokenListener(registerDevicePushTokenAsync);\n return () => subscription.remove();\n }, []);\n\n return (\n // Your app content\n );\n}\n```"}]}]},"parameters":[{"name":"listener","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A function accepting a push token as an argument, it will be called whenever the push token changes."}]},"type":{"type":"reference","name":"PushTokenListener","package":"expo-notifications"}}],"type":{"type":"reference","name":"EventSubscription","package":"expo-modules-core"}}]},{"name":"cancelAllScheduledNotificationsAsync","variant":"declaration","kind":64,"signatures":[{"name":"cancelAllScheduledNotificationsAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Cancels all scheduled notifications."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise that resolves once all the scheduled notifications are successfully canceled, or if there are no scheduled notifications."}]},{"tag":"@header","content":[{"kind":"text","text":"schedule"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]},{"name":"cancelScheduledNotificationAsync","variant":"declaration","kind":64,"signatures":[{"name":"cancelScheduledNotificationAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Cancels a single scheduled notification. The scheduled notification of given ID will not trigger."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise resolves once the scheduled notification is successfully canceled or if there is no scheduled notification for a given identifier."}]},{"tag":"@example","name":"Schedule and then cancel the notification:","content":[{"kind":"code","text":"```ts\nimport * as Notifications from 'expo-notifications';\n\nasync function scheduleAndCancel() {\n const identifier = await Notifications.scheduleNotificationAsync({\n content: {\n title: 'Hey!',\n },\n trigger: { seconds: 60, repeats: true },\n });\n await Notifications.cancelScheduledNotificationAsync(identifier);\n}\n```"}]},{"tag":"@header","content":[{"kind":"text","text":"schedule"}]}]},"parameters":[{"name":"identifier","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The notification identifier with which "},{"kind":"code","text":"`scheduleNotificationAsync`"},{"kind":"text","text":" method resolved when the notification has been scheduled."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]},{"name":"clearLastNotificationResponse","variant":"declaration","kind":64,"signatures":[{"name":"clearLastNotificationResponse","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Clears the notification response that was received most recently. May be used\nwhen an app selects a route based on the notification response, and it is undesirable\nto continue selecting the route after the response has already been handled.\n\nIf a component is using the ["},{"kind":"code","text":"`useLastNotificationResponse`"},{"kind":"text","text":"](#uselastnotificationresponse) hook,\nthis call will also clear the value returned by the hook."}]},"type":{"type":"intrinsic","name":"void"}}]},{"name":"clearLastNotificationResponseAsync","variant":"declaration","kind":64,"signatures":[{"name":"clearLastNotificationResponseAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Clears the notification response that was received most recently. May be used\nwhen an app selects a route based on the notification response, and it is undesirable\nto continue selecting the route after the response has already been handled.\n\nIf a component is using the ["},{"kind":"code","text":"`useLastNotificationResponse`"},{"kind":"text","text":"](#uselastnotificationresponse) hook,\nthis call will also clear the value returned by the hook."}],"blockTags":[{"tag":"@deprecated","content":[{"kind":"text","text":"Use "},{"kind":"code","text":"`clearLastNotificationResponse`"},{"kind":"text","text":" instead."}]},{"tag":"@returns","content":[{"kind":"text","text":"A promise that resolves if the native call was successful."}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]},{"name":"deleteNotificationCategoryAsync","variant":"declaration","kind":64,"signatures":[{"name":"deleteNotificationCategoryAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Deletes the category associated with the provided identifier."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves to "},{"kind":"code","text":"`true`"},{"kind":"text","text":" if the category was successfully deleted, or "},{"kind":"code","text":"`false`"},{"kind":"text","text":" if it was not.\nAn example of when this method would return "},{"kind":"code","text":"`false`"},{"kind":"text","text":" is if you try to delete a category that doesn't exist."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]},{"tag":"@header","content":[{"kind":"text","text":"categories"}]}]},"parameters":[{"name":"identifier","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Identifier initially provided to "},{"kind":"code","text":"`setNotificationCategoryAsync`"},{"kind":"text","text":" when creating the category."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"Promise","package":"typescript"}}]},{"name":"deleteNotificationChannelAsync","variant":"declaration","kind":64,"signatures":[{"name":"deleteNotificationChannelAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Removes the notification channel."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves once the channel is removed (or if there was no channel for given identifier)."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@header","content":[{"kind":"text","text":"channels"}]}]},"parameters":[{"name":"channelId","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The channel identifier."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]},{"name":"deleteNotificationChannelGroupAsync","variant":"declaration","kind":64,"signatures":[{"name":"deleteNotificationChannelGroupAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Removes the notification channel group and all notification channels that belong to it."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves once the channel group is removed (or if there was no channel group for given identifier)."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@header","content":[{"kind":"text","text":"channels"}]}]},"parameters":[{"name":"groupId","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The channel group identifier."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]},{"name":"dismissAllNotificationsAsync","variant":"declaration","kind":64,"signatures":[{"name":"dismissAllNotificationsAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Removes all application's notifications displayed in the notification tray (Notification Center)."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves once the request to dismiss the notifications is successfully dispatched to the notifications manager."}]},{"tag":"@header","content":[{"kind":"text","text":"dismiss"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]},{"name":"dismissNotificationAsync","variant":"declaration","kind":64,"signatures":[{"name":"dismissNotificationAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Removes notification displayed in the notification tray (Notification Center)."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves once the request to dismiss the notification is successfully dispatched to the notifications manager."}]},{"tag":"@header","content":[{"kind":"text","text":"dismiss"}]}]},"parameters":[{"name":"notificationIdentifier","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The notification identifier, obtained either via "},{"kind":"code","text":"`setNotificationHandler`"},{"kind":"text","text":" method or in the listener added with "},{"kind":"code","text":"`addNotificationReceivedListener`"},{"kind":"text","text":"."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]},{"name":"getAllScheduledNotificationsAsync","variant":"declaration","kind":64,"signatures":[{"name":"getAllScheduledNotificationsAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Fetches information about all scheduled notifications."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"Returns a Promise resolving to an array of objects conforming to the ["},{"kind":"code","text":"`Notification`"},{"kind":"text","text":"](#notification) interface."}]},{"tag":"@header","content":[{"kind":"text","text":"schedule"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"array","elementType":{"type":"reference","name":"NotificationRequest","package":"expo-notifications"}}],"name":"Promise","package":"typescript"}}]},{"name":"getBadgeCountAsync","variant":"declaration","kind":64,"signatures":[{"name":"getBadgeCountAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Fetches the number currently set as the badge of the app icon on device's home screen. A "},{"kind":"code","text":"`0`"},{"kind":"text","text":" value means that the badge is not displayed.\n> **Note:** Not all Android launchers support application badges. If the launcher does not support icon badges, the method will always resolve to "},{"kind":"code","text":"`0`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"Returns a Promise resolving to a number that represents the current badge of the app icon."}]},{"tag":"@header","content":[{"kind":"text","text":"badge"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"number"}],"name":"Promise","package":"typescript"}}]},{"name":"getDevicePushTokenAsync","variant":"declaration","kind":64,"signatures":[{"name":"getDevicePushTokenAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Returns a native FCM, APNs token or a ["},{"kind":"code","text":"`PushSubscription`"},{"kind":"text","text":" data](https://developer.mozilla.org/en-US/docs/Web/API/PushSubscription)\nthat can be used with another push notification service."}],"blockTags":[{"tag":"@header","content":[{"kind":"text","text":"fetch"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"reference","name":"DevicePushToken","package":"expo-notifications"}],"name":"Promise","package":"typescript"}}]},{"name":"getExpoPushTokenAsync","variant":"declaration","kind":64,"signatures":[{"name":"getExpoPushTokenAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Returns an Expo token that can be used to send a push notification to the device using Expo's push notifications service.\n\nThis method makes requests to the Expo's servers. It can get rejected in cases where the request itself fails\n(for example, due to the device being offline, experiencing a network timeout, or other HTTPS request failures).\nTo provide offline support to your users, you should "},{"kind":"code","text":"`try/catch`"},{"kind":"text","text":" this method and implement retry logic to attempt\nto get the push token later, once the device is back online.\n\n> For Expo's backend to be able to send notifications to your app, you will need to provide it with push notification keys.\nFor more information, see [credentials](/push-notifications/push-notifications-setup/#get-credentials-for-development-builds) in the push notifications setup."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"Returns a "},{"kind":"code","text":"`Promise`"},{"kind":"text","text":" that resolves to an object representing acquired push token."}]},{"tag":"@header","content":[{"kind":"text","text":"fetch"}]},{"tag":"@example","content":[{"kind":"code","text":"```ts\nimport * as Notifications from 'expo-notifications';\n\nexport async function registerForPushNotificationsAsync(userId: string) {\n const expoPushToken = await Notifications.getExpoPushTokenAsync({\n projectId: 'your-project-id',\n });\n\n await fetch('https://example.com/', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n userId,\n expoPushToken,\n }),\n });\n}\n```"}]}]},"parameters":[{"name":"options","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Object allowing you to pass in push notification configuration."}]},"type":{"type":"reference","name":"ExpoPushTokenOptions","package":"expo-notifications"},"defaultValue":"{}"}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"reference","name":"ExpoPushToken","package":"expo-notifications"}],"name":"Promise","package":"typescript"}}]},{"name":"getLastNotificationResponse","variant":"declaration","kind":64,"signatures":[{"name":"getLastNotificationResponse","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Gets the notification response that was received most recently\n(a notification response designates an interaction with a notification, such as tapping on it).\n\n- "},{"kind":"code","text":"`null`"},{"kind":"text","text":" - if no notification response has been received yet\n- a ["},{"kind":"code","text":"`NotificationResponse`"},{"kind":"text","text":"](#notificationresponse) object - if a notification response was received"}]},"type":{"type":"union","types":[{"type":"reference","name":"NotificationResponse","package":"expo-notifications"},{"type":"literal","value":null}]}}]},{"name":"getLastNotificationResponseAsync","variant":"declaration","kind":64,"signatures":[{"name":"getLastNotificationResponseAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Gets the notification response received most recently\n(a notification response designates an interaction with a notification, such as tapping on it).\n\n- "},{"kind":"code","text":"`null`"},{"kind":"text","text":" - if no notification response has been received yet\n- a ["},{"kind":"code","text":"`NotificationResponse`"},{"kind":"text","text":"](#notificationresponse) object - if a notification response was received"}],"blockTags":[{"tag":"@deprecated","content":[{"kind":"text","text":"Use "},{"kind":"code","text":"`getLastNotificationResponse`"},{"kind":"text","text":" instead."}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"reference","name":"NotificationResponse","package":"expo-notifications"},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}}]},{"name":"getNextTriggerDateAsync","variant":"declaration","kind":64,"signatures":[{"name":"getNextTriggerDateAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Allows you to check what will be the next trigger date for given notification trigger input."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"If the return value is "},{"kind":"code","text":"`null`"},{"kind":"text","text":", the notification won't be triggered. Otherwise, the return value is the Unix timestamp in milliseconds\nat which the notification will be triggered."}]},{"tag":"@example","name":"Calculate next trigger date for a notification trigger:","content":[{"kind":"code","text":"```ts\nimport * as Notifications from 'expo-notifications';\n\nasync function logNextTriggerDate() {\n try {\n const nextTriggerDate = await Notifications.getNextTriggerDateAsync({\n hour: 9,\n minute: 0,\n });\n console.log(nextTriggerDate === null ? 'No next trigger date' : new Date(nextTriggerDate));\n } catch (e) {\n console.warn(`Couldn't have calculated next trigger date: ${e}`);\n }\n}\n```"}]},{"tag":"@header","content":[{"kind":"text","text":"schedule"}]}]},"parameters":[{"name":"trigger","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The schedulable notification trigger you would like to check next trigger date for (of type ["},{"kind":"code","text":"`SchedulableNotificationTriggerInput`"},{"kind":"text","text":"](#schedulablenotificationtriggerinput))."}]},"type":{"type":"reference","name":"SchedulableNotificationTriggerInput","package":"expo-notifications"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"intrinsic","name":"number"},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}}]},{"name":"getNotificationCategoriesAsync","variant":"declaration","kind":64,"signatures":[{"name":"getNotificationCategoriesAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Fetches information about all known notification categories."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves to an array of "},{"kind":"code","text":"`NotificationCategory`"},{"kind":"text","text":"s. On platforms that do not support notification channels,\nit will always resolve to an empty array."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]},{"tag":"@header","content":[{"kind":"text","text":"categories"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"array","elementType":{"type":"reference","name":"NotificationCategory","package":"expo-notifications"}}],"name":"Promise","package":"typescript"}}]},{"name":"getNotificationChannelAsync","variant":"declaration","kind":64,"signatures":[{"name":"getNotificationChannelAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Fetches information about a single notification channel."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves to the channel object (of type ["},{"kind":"code","text":"`NotificationChannel`"},{"kind":"text","text":"](#notificationchannel)) or to "},{"kind":"code","text":"`null`"},{"kind":"text","text":"\nif there was no channel found for this identifier. On platforms that do not support notification channels, it will always resolve to "},{"kind":"code","text":"`null`"},{"kind":"text","text":"."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@header","content":[{"kind":"text","text":"channels"}]}]},"parameters":[{"name":"channelId","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The channel's identifier."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"reference","name":"NotificationChannel","package":"expo-notifications"},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}}]},{"name":"getNotificationChannelGroupAsync","variant":"declaration","kind":64,"signatures":[{"name":"getNotificationChannelGroupAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Fetches information about a single notification channel group."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves to the channel group object (of type ["},{"kind":"code","text":"`NotificationChannelGroup`"},{"kind":"text","text":"](#notificationchannelgroup))\nor to "},{"kind":"code","text":"`null`"},{"kind":"text","text":" if there was no channel group found for this identifier. On platforms that do not support notification channels,\nit will always resolve to "},{"kind":"code","text":"`null`"},{"kind":"text","text":"."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@header","content":[{"kind":"text","text":"channels"}]}]},"parameters":[{"name":"groupId","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The channel group's identifier."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"reference","name":"NotificationChannelGroup","package":"expo-notifications"},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}}]},{"name":"getNotificationChannelGroupsAsync","variant":"declaration","kind":64,"signatures":[{"name":"getNotificationChannelGroupsAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Fetches information about all known notification channel groups."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves to an array of channel groups. On platforms that do not support notification channel groups,\nit will always resolve to an empty array."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@header","content":[{"kind":"text","text":"channels"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"array","elementType":{"type":"reference","name":"NotificationChannelGroup","package":"expo-notifications"}}],"name":"Promise","package":"typescript"}}]},{"name":"getNotificationChannelsAsync","variant":"declaration","kind":64,"signatures":[{"name":"getNotificationChannelsAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Fetches information about all known notification channels."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves to an array of channels. On platforms that do not support notification channels,\nit will always resolve to an empty array."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@header","content":[{"kind":"text","text":"channels"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"array","elementType":{"type":"reference","name":"NotificationChannel","package":"expo-notifications"}}],"name":"Promise","package":"typescript"}}]},{"name":"getPermissionsAsync","variant":"declaration","kind":64,"signatures":[{"name":"getPermissionsAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Calling this function checks current permissions settings related to notifications.\nIt lets you verify whether the app is currently allowed to display alerts, play sounds, etc.\nThere is no user-facing effect of calling this."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"It returns a "},{"kind":"code","text":"`Promise`"},{"kind":"text","text":" resolving to an object represents permission settings (["},{"kind":"code","text":"`NotificationPermissionsStatus`"},{"kind":"text","text":"](#notificationpermissionsstatus)).\nOn iOS, make sure you [properly interpret the permissions response](#interpret-the-ios-permissions-response)."}]},{"tag":"@example","name":"Check if the app is allowed to send any type of notifications (interrupting and non-interrupting–provisional on iOS).","content":[{"kind":"code","text":"```ts\nimport * as Notifications from 'expo-notifications';\n\nexport async function allowsNotificationsAsync() {\n const settings = await Notifications.getPermissionsAsync();\n return (\n settings.granted || settings.ios?.status === Notifications.IosAuthorizationStatus.PROVISIONAL\n );\n}\n```"}]},{"tag":"@header","content":[{"kind":"text","text":"permissions"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"reference","name":"NotificationPermissionsStatus","package":"expo-notifications"}],"name":"Promise","package":"typescript"}}]},{"name":"getPresentedNotificationsAsync","variant":"declaration","kind":64,"signatures":[{"name":"getPresentedNotificationsAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Fetches information about all notifications present in the notification tray (Notification Center).\n> This method is not supported on Android below 6.0 (API level 23) – on these devices it will resolve to an empty array."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves with a list of notifications (["},{"kind":"code","text":"`Notification`"},{"kind":"text","text":"](#notification)) currently present in the notification tray (Notification Center)."}]},{"tag":"@header","content":[{"kind":"text","text":"dismiss"}]}]},"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"array","elementType":{"type":"reference","name":"Notification","package":"expo-notifications"}}],"name":"Promise","package":"typescript"}}]},{"name":"registerTaskAsync","variant":"declaration","kind":64,"signatures":[{"name":"registerTaskAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Call "},{"kind":"code","text":"`registerTaskAsync`"},{"kind":"text","text":" to set a callback (task) that runs when a notification is received while the app is in foreground, background, or terminated.\nOnly on Android, the task also runs in response to a notification action tap when the app is backgrounded or terminated.\nWhen the app is terminated, only a [Headless Background Notification](/push-notifications/what-you-need-to-know/#headless-background-notifications) triggers the task execution.\nHowever, 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\"](https://developer.apple.com/documentation/usernotifications/pushing-background-updates-to-your-app#overview)).\n\nUnder the hood, this function is run using "},{"kind":"code","text":"`expo-task-manager`"},{"kind":"text","text":". You **must** define the task first, with ["},{"kind":"code","text":"`TaskManager.defineTask`"},{"kind":"text","text":"]("},{"kind":"relative-link","text":"./task-manager#taskmanagerdefinetasktaskname-taskexecutor"},{"kind":"text","text":") and register it with "},{"kind":"code","text":"`registerTaskAsync`"},{"kind":"text","text":".\n\nMake 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 "},{"kind":"code","text":"`index.ts`"},{"kind":"text","text":" file) - see this [example](https://github.com/expo/expo/blob/main/apps/notification-tester/index.ts#L2).\n"},{"kind":"code","text":"`expo-task-manager`"},{"kind":"text","text":" 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.\n\nThe callback function you define with "},{"kind":"code","text":"`TaskManager.defineTask`"},{"kind":"text","text":" receives an object with the following fields:\n- "},{"kind":"code","text":"`data`"},{"kind":"text","text":": The remote payload delivered by either FCM (Android) or APNs (iOS). See ["},{"kind":"code","text":"`NotificationTaskPayload`"},{"kind":"text","text":"](#notificationtaskpayload) for details.\n- "},{"kind":"code","text":"`executionInfo`"},{"kind":"text","text":": JSON object of additional info related to the task, including the "},{"kind":"code","text":"`taskName`"},{"kind":"text","text":".\n- "},{"kind":"code","text":"`error`"},{"kind":"text","text":": This field should always be undefined with a push-notification task.\n\nFrom the callback function, you may return a ["},{"kind":"code","text":"`BackgroundNotificationResult`"},{"kind":"text","text":"](#backgroundnotificationtaskresult) value to indicate the result of a background fetch operation on iOS.\n\nBe 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."}],"blockTags":[{"tag":"@example","content":[{"kind":"code","text":"```ts\nimport * as TaskManager from 'expo-task-manager';\nimport * as Notifications from 'expo-notifications';\n\nconst BACKGROUND_NOTIFICATION_TASK = 'BACKGROUND-NOTIFICATION-TASK';\n\nTaskManager.defineTask(BACKGROUND_NOTIFICATION_TASK, ({ data, executionInfo, error }) => {\n console.log('Received a notification task payload!');\n const isNotificationResponse = 'actionIdentifier' in data;\n if (isNotificationResponse) {\n // Do something with the notification response from user\n } else {\n // Do something with the data from notification that was received\n }\n return BackgroundNotificationResult.NoData\n});\n\nNotifications.registerTaskAsync(BACKGROUND_NOTIFICATION_TASK);\n```"}]},{"tag":"@header","content":[{"kind":"text","text":"inBackground"}]}]},"parameters":[{"name":"taskName","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The string you passed to "},{"kind":"code","text":"`TaskManager.defineTask`"},{"kind":"text","text":" as the "},{"kind":"code","text":"`taskName`"},{"kind":"text","text":" parameter."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"literal","value":null}],"name":"Promise","package":"typescript"}}]},{"name":"requestPermissionsAsync","variant":"declaration","kind":64,"signatures":[{"name":"requestPermissionsAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Prompts the user for notification permissions according to request. **Request defaults to asking the user to allow displaying alerts,\nsetting badge count and playing sounds**."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"It returns a Promise resolving to an object represents permission settings (["},{"kind":"code","text":"`NotificationPermissionsStatus`"},{"kind":"text","text":"](#notificationpermissionsstatus)).\nOn iOS, make sure you [properly interpret the permissions response](#interpret-the-ios-permissions-response)."}]},{"tag":"@example","name":"Prompts the user to allow the app to show alerts, play sounds, set badge count and let Siri read out messages through AirPods.","content":[{"kind":"code","text":"```ts\nimport * as Notifications from 'expo-notifications';\n\nexport function requestPermissionsAsync() {\n return Notifications.requestPermissionsAsync({\n ios: {\n allowAlert: true,\n allowBadge: true,\n allowSound: true,\n },\n });\n}\n```"}]},{"tag":"@header","content":[{"kind":"text","text":"permissions"}]}]},"parameters":[{"name":"permissions","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"An object representing configuration for the request scope."}]},"type":{"type":"reference","name":"NotificationPermissionsRequest","package":"expo-notifications"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"reference","name":"NotificationPermissionsStatus","package":"expo-notifications"}],"name":"Promise","package":"typescript"}}]},{"name":"scheduleNotificationAsync","variant":"declaration","kind":64,"signatures":[{"name":"scheduleNotificationAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Schedules a notification to be triggered in the future.\n> **Note:** This does not mean that the notification will be presented when it is triggered.\nFor the notification to be presented you have to set a notification handler with ["},{"kind":"code","text":"`setNotificationHandler`"},{"kind":"text","text":"](#setnotificationhandlerhandler)\nthat will return an appropriate notification behavior. For more information see the example below."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"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."}]},{"tag":"@example","content":[{"kind":"text","text":"# Schedule the notification that will trigger once, in one minute from now\n"},{"kind":"code","text":"```ts\nimport * as Notifications from 'expo-notifications';\n\nNotifications.scheduleNotificationAsync({\n content: {\n title: \"Time's up!\",\n body: 'Change sides!',\n },\n trigger: {\n type: Notifications.SchedulableTriggerInputTypes.TIME_INTERVAL,\n seconds: 60,\n },\n});\n```"},{"kind":"text","text":"\n\n# Schedule the notification that will trigger repeatedly, every 20 minutes\n"},{"kind":"code","text":"```ts\nimport * as Notifications from 'expo-notifications';\n\nNotifications.scheduleNotificationAsync({\n content: {\n title: 'Remember to drink water!',\n },\n trigger: {\n type: Notifications.SchedulableTriggerInputTypes.TIME_INTERVAL,\n seconds: 60 * 20,\n repeats: true,\n },\n});\n```"},{"kind":"text","text":"\n\n# Schedule the notification that will trigger once, at the beginning of next hour\n"},{"kind":"code","text":"```ts\nimport * as Notifications from 'expo-notifications';\n\nconst date = new Date(Date.now() + 60 * 60 * 1000);\ndate.setMinutes(0);\ndate.setSeconds(0);\n\nNotifications.scheduleNotificationAsync({\n content: {\n title: 'Happy new hour!',\n },\n trigger: {\n type: Notifications.SchedulableTriggerInputTypes.DATE,\n date\n },\n});\n```"}]},{"tag":"@header","content":[{"kind":"text","text":"schedule"}]}]},"parameters":[{"name":"request","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"An object describing the notification to be triggered."}]},"type":{"type":"reference","name":"NotificationRequestInput","package":"expo-notifications"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"string"}],"name":"Promise","package":"typescript"}}]},{"name":"setBadgeCountAsync","variant":"declaration","kind":64,"signatures":[{"name":"setBadgeCountAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the badge of the app's icon to the specified number. Setting it to "},{"kind":"code","text":"`0`"},{"kind":"text","text":" clears the badge. On iOS, this method requires that you have requested\nthe user's permission for "},{"kind":"code","text":"`allowBadge`"},{"kind":"text","text":" via ["},{"kind":"code","text":"`requestPermissionsAsync`"},{"kind":"text","text":"](#requestpermissionsasyncpermissions),\notherwise it will automatically return "},{"kind":"code","text":"`false`"},{"kind":"text","text":".\n> **Note:** Not all Android launchers support application badges. If the launcher does not support icon badges, the method will resolve to "},{"kind":"code","text":"`false`"},{"kind":"text","text":"."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"It returns a Promise resolving to a boolean representing whether the setting of the badge succeeded."}]},{"tag":"@header","content":[{"kind":"text","text":"badge"}]}]},"parameters":[{"name":"badgeCount","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The count which should appear on the badge. A value of "},{"kind":"code","text":"`0`"},{"kind":"text","text":" will clear the badge."}]},"type":{"type":"intrinsic","name":"number"}},{"name":"options","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"An object of options configuring behavior applied."}]},"type":{"type":"reference","target":{"packageName":"expo-notifications","packagePath":"src/setBadgeCountAsync.ts","qualifiedName":"SetBadgeCountOptions"},"name":"SetBadgeCountOptions","package":"expo-notifications"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"Promise","package":"typescript"}}]},{"name":"setNotificationCategoryAsync","variant":"declaration","kind":64,"signatures":[{"name":"setNotificationCategoryAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Sets the new notification category."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves to the category you just have created."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@platform","content":[{"kind":"text","text":"ios"}]},{"tag":"@header","content":[{"kind":"text","text":"categories"}]}]},"parameters":[{"name":"identifier","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A string to associate as the ID of this category. You will pass this string in as the "},{"kind":"code","text":"`categoryIdentifier`"},{"kind":"text","text":"\nin your ["},{"kind":"code","text":"`NotificationContent`"},{"kind":"text","text":"](#notificationcontent) to associate a notification with this category.\n> Don't use the characters "},{"kind":"code","text":"`:`"},{"kind":"text","text":" or "},{"kind":"code","text":"`-`"},{"kind":"text","text":" in your category identifier. If you do, categories might not work as expected."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"actions","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"An array of ["},{"kind":"code","text":"`NotificationAction`"},{"kind":"text","text":"](#notificationaction), which describe the actions associated with this category."}]},"type":{"type":"array","elementType":{"type":"reference","name":"NotificationAction","package":"expo-notifications"}}},{"name":"options","variant":"param","kind":32768,"flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"An optional object of additional configuration options for your category."}]},"type":{"type":"reference","name":"NotificationCategoryOptions","package":"expo-notifications"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"reference","name":"NotificationCategory","package":"expo-notifications"}],"name":"Promise","package":"typescript"}}]},{"name":"setNotificationChannelAsync","variant":"declaration","kind":64,"signatures":[{"name":"setNotificationChannelAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Assigns the channel configuration to a channel of a specified name (creating it if need be).\nThis method lets you assign given notification channel to a notification channel group.\n\n> **Note:** After a channel has been created, you can modify only its name and description. This limitation is imposed by the Android OS.\n\n> **Note:** For some settings to be applied on all Android versions, it may be necessary to duplicate the configuration across both\n> a single notification and its respective notification channel.\n\nFor example, for a notification to play a custom sound on Android versions **below** 8.0,\nthe custom notification sound has to be set on the notification (through the ["},{"kind":"code","text":"`NotificationContentInput`"},{"kind":"text","text":"](#notificationcontentinput)),\nand for the custom sound to play on Android versions **above** 8.0, the relevant notification channel must have the custom sound configured\n(through the ["},{"kind":"code","text":"`NotificationChannelInput`"},{"kind":"text","text":"](#notificationchannelinput)). For more information,\nsee [Set custom notification sounds on Android](#set-custom-notification-sounds)."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A Promise which resolves to the object (of type ["},{"kind":"code","text":"`NotificationChannel`"},{"kind":"text","text":"](#notificationchannel)) describing the modified channel\nor to "},{"kind":"code","text":"`null`"},{"kind":"text","text":" if the platform does not support notification channels."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@header","content":[{"kind":"text","text":"channels"}]}]},"parameters":[{"name":"channelId","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The channel identifier."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"channel","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Object representing the channel's configuration."}]},"type":{"type":"reference","name":"NotificationChannelInput","package":"expo-notifications"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"reference","name":"NotificationChannel","package":"expo-notifications"},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}}]},{"name":"setNotificationChannelGroupAsync","variant":"declaration","kind":64,"signatures":[{"name":"setNotificationChannelGroupAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Assigns the channel group configuration to a channel group of a specified name (creating it if need be)."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"A "},{"kind":"code","text":"`Promise`"},{"kind":"text","text":" resolving to the object (of type ["},{"kind":"code","text":"`NotificationChannelGroup`"},{"kind":"text","text":"](#notificationchannelgroup))\ndescribing the modified channel group or to "},{"kind":"code","text":"`null`"},{"kind":"text","text":" if the platform does not support notification channels."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]},{"tag":"@header","content":[{"kind":"text","text":"channels"}]}]},"parameters":[{"name":"groupId","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The channel group's identifier."}]},"type":{"type":"intrinsic","name":"string"}},{"name":"group","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"Object representing the channel group configuration."}]},"type":{"type":"reference","name":"NotificationChannelGroupInput","package":"expo-notifications"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"union","types":[{"type":"reference","name":"NotificationChannelGroup","package":"expo-notifications"},{"type":"literal","value":null}]}],"name":"Promise","package":"typescript"}}]},{"name":"setNotificationHandler","variant":"declaration","kind":64,"signatures":[{"name":"setNotificationHandler","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"When a notification is received while the app is running, using this function you can set a callback that will decide\nwhether the notification should be shown to the user or not.\n\nWhen a notification is received, "},{"kind":"code","text":"`handleNotification`"},{"kind":"text","text":" is called with the incoming notification as an argument.\nThe function should respond with a behavior object within 3 seconds, otherwise the notification will be presented.\nIf the notification is handled successfully, "},{"kind":"code","text":"`handleSuccess`"},{"kind":"text","text":" is called with the identifier of the notification,\notherwise (or on timeout) "},{"kind":"code","text":"`handleError`"},{"kind":"text","text":" will be called.\n\nUntil the app sets a handler, and when the handler it sets does not respond in time, the\nnotification is shown with a banner, in the notification list, with a sound, and with the badge from the notification."}],"blockTags":[{"tag":"@example","name":"Implementing a notification handler that shows the notification without a sound.","content":[{"kind":"code","text":"```jsx\nimport * as Notifications from 'expo-notifications';\n\nNotifications.setNotificationHandler({\n handleNotification: async () => ({\n shouldShowBanner: true,\n shouldShowList: true,\n shouldPlaySound: false,\n shouldSetBadge: false,\n }),\n});\n```"}]},{"tag":"@header","content":[{"kind":"text","text":"inForeground"}]}]},"parameters":[{"name":"handler","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"A single parameter which should be either "},{"kind":"code","text":"`null`"},{"kind":"text","text":" or a ["},{"kind":"code","text":"`NotificationHandler`"},{"kind":"text","text":"](#notificationhandler) object.\nPassing "},{"kind":"code","text":"`null`"},{"kind":"text","text":" removes the handler, so "},{"kind":"code","text":"`expo-notifications`"},{"kind":"text","text":" no longer decides whether an incoming notification shows.\nOn Android the notification is then not shown while the app is in the foreground.\nOn iOS the decision goes to the "},{"kind":"code","text":"`UNUserNotificationCenterDelegate`"},{"kind":"text","text":" that another library may set, and the notification is not shown if there is none."}]},"type":{"type":"union","types":[{"type":"reference","name":"NotificationHandler","package":"expo-notifications"},{"type":"literal","value":null}]}}],"type":{"type":"intrinsic","name":"void"}}]},{"name":"subscribeToTopicAsync","variant":"declaration","kind":64,"signatures":[{"name":"subscribeToTopicAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Subscribes the device to a push notification topic. This allows the device to receive notifications sent to that topic."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"a Promise which resolves to "},{"kind":"code","text":"`null`"},{"kind":"text","text":" once the device is subscribed to the topic."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"parameters":[{"name":"topic","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The topic name to subscribe to."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"literal","value":null}],"name":"Promise","package":"typescript"}}]},{"name":"unregisterForNotificationsAsync","variant":"declaration","kind":64,"signatures":[{"name":"unregisterForNotificationsAsync","variant":"signature","kind":4096,"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"intrinsic","name":"void"}],"name":"Promise","package":"typescript"}}]},{"name":"unregisterTaskAsync","variant":"declaration","kind":64,"signatures":[{"name":"unregisterTaskAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Used to unregister tasks registered with "},{"kind":"code","text":"`registerTaskAsync`"},{"kind":"text","text":" method."}],"blockTags":[{"tag":"@header","content":[{"kind":"text","text":"inBackground"}]}]},"parameters":[{"name":"taskName","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The string you passed to "},{"kind":"code","text":"`registerTaskAsync`"},{"kind":"text","text":" as the "},{"kind":"code","text":"`taskName`"},{"kind":"text","text":" parameter."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"literal","value":null}],"name":"Promise","package":"typescript"}}]},{"name":"unsubscribeFromTopicAsync","variant":"declaration","kind":64,"signatures":[{"name":"unsubscribeFromTopicAsync","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"Unsubscribes the device from a push notification topic. The device will no longer receive notifications sent to that topic."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"a Promise which resolves to "},{"kind":"code","text":"`null`"},{"kind":"text","text":" once the device is unsubscribed from the topic."}]},{"tag":"@platform","content":[{"kind":"text","text":"android"}]}]},"parameters":[{"name":"topic","variant":"param","kind":32768,"comment":{"summary":[{"kind":"text","text":"The topic name to unsubscribe from."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","target":{"packageName":"typescript","packagePath":"lib/lib.es5.d.ts","qualifiedName":"Promise"},"typeArguments":[{"type":"literal","value":null}],"name":"Promise","package":"typescript"}}]},{"name":"useLastNotificationResponse","variant":"declaration","kind":64,"signatures":[{"name":"useLastNotificationResponse","variant":"signature","kind":4096,"comment":{"summary":[{"kind":"text","text":"A React hook which returns the notification response that was received most recently\n(a notification response designates an interaction with a notification, such as tapping on it).\n\nTo clear the last notification response, use ["},{"kind":"code","text":"`clearLastNotificationResponseAsync()`"},{"kind":"text","text":"](#notificationsclearlastnotificationresponseasync).\n\n> If you don't want to use a hook, you can use "},{"kind":"code","text":"`Notifications.getLastNotificationResponseAsync()`"},{"kind":"text","text":" instead."}],"blockTags":[{"tag":"@returns","content":[{"kind":"text","text":"The hook may return one of these three types/values:\n- "},{"kind":"code","text":"`undefined`"},{"kind":"text","text":" - until we're sure of what to return,\n- "},{"kind":"code","text":"`null`"},{"kind":"text","text":" - if no notification response has been received yet,\n- a ["},{"kind":"code","text":"`NotificationResponse`"},{"kind":"text","text":"](#notificationresponse) object - if a notification response was received."}]},{"tag":"@example","content":[{"kind":"text","text":"Responding to a notification tap by opening a URL that could be put into the notification's "},{"kind":"code","text":"`data`"},{"kind":"text","text":"\n(opening the URL is your responsibility and is not a part of the "},{"kind":"code","text":"`expo-notifications`"},{"kind":"text","text":" API):\n"},{"kind":"code","text":"```jsx\nimport * as Notifications from 'expo-notifications';\nimport { Linking } from 'react-native';\n\nexport default function App() {\n const lastNotificationResponse = Notifications.useLastNotificationResponse();\n React.useEffect(() => {\n if (\n lastNotificationResponse &&\n lastNotificationResponse.notification.request.content.data.url &&\n lastNotificationResponse.actionIdentifier === Notifications.DEFAULT_ACTION_IDENTIFIER\n ) {\n Linking.openURL(lastNotificationResponse.notification.request.content.data.url);\n }\n }, [lastNotificationResponse]);\n return (\n // Your app content\n );\n}\n```"}]},{"tag":"@header","content":[{"kind":"text","text":"listen"}]}]},"type":{"type":"reference","name":"MaybeNotificationResponse","package":"expo-notifications"}}]}],"packageName":"expo-notifications"}
\ No newline at end of file
diff --git a/packages/expo-notifications/CHANGELOG.md b/packages/expo-notifications/CHANGELOG.md
index 617d1c33a14f16..c54d13eab2cc80 100644
--- a/packages/expo-notifications/CHANGELOG.md
+++ b/packages/expo-notifications/CHANGELOG.md
@@ -9,6 +9,7 @@
### 🎉 New features
- [ios] Forward notification center calls to a `UNUserNotificationCenterDelegate` that another library set, so that both libraries keep working. ([#48313](https://github.com/expo/expo/pull/48313) by [@vonovak](https://github.com/vonovak))
+- [ios] Add support for grouping notifications via `threadIdentifier`. ([#49429](https://github.com/expo/expo/pull/49429) by [@vonovak](https://github.com/vonovak))
### 🐛 Bug fixes
diff --git a/packages/expo-notifications/ios/ExpoNotifications/Notifications/Background/BackgroundEventTransformer.swift b/packages/expo-notifications/ios/ExpoNotifications/Notifications/Background/BackgroundEventTransformer.swift
index bb0add5244dce7..8530e43cf76365 100644
--- a/packages/expo-notifications/ios/ExpoNotifications/Notifications/Background/BackgroundEventTransformer.swift
+++ b/packages/expo-notifications/ios/ExpoNotifications/Notifications/Background/BackgroundEventTransformer.swift
@@ -44,8 +44,13 @@ public class BackgroundEventTransformer {
if let aps = payload["aps"] as? [String: Any] {
result["aps"] = aps
result["notification"] = aps["alert"] ?? NSNull()
- if let category = aps["category"] as? String, var data = result["data"] as? [String: Any] {
- data["categoryId"] = category
+ if var data = result["data"] as? [String: Any] {
+ if let category = aps["category"] as? String {
+ data["categoryId"] = category
+ }
+ if let threadId = aps["thread-id"] as? String {
+ data["threadIdentifier"] = threadId
+ }
result["data"] = data
}
}
diff --git a/packages/expo-notifications/ios/ExpoNotifications/Notifications/NotificationRecords.swift b/packages/expo-notifications/ios/ExpoNotifications/Notifications/NotificationRecords.swift
index 58f69014923a0d..d03858b67d503d 100644
--- a/packages/expo-notifications/ios/ExpoNotifications/Notifications/NotificationRecords.swift
+++ b/packages/expo-notifications/ios/ExpoNotifications/Notifications/NotificationRecords.swift
@@ -365,6 +365,10 @@ public struct NotificationContentRecord: Record {
content.categoryIdentifier = categoryIdentifier
}
+ if let threadIdentifier = threadIdentifier {
+ content.threadIdentifier = threadIdentifier
+ }
+
if let sound = sound {
if let soundBool = try? sound.as(Bool.self) {
content.sound = soundBool ? .default : .none
diff --git a/packages/expo-notifications/ios/Tests/BackgroundEventTransformerTests.swift b/packages/expo-notifications/ios/Tests/BackgroundEventTransformerTests.swift
index 84c00682a761a6..5fa28544c31225 100644
--- a/packages/expo-notifications/ios/Tests/BackgroundEventTransformerTests.swift
+++ b/packages/expo-notifications/ios/Tests/BackgroundEventTransformerTests.swift
@@ -95,6 +95,32 @@ struct BackgroundEventTransformerTests {
#expect(NSDictionary(dictionary: result) == NSDictionary(dictionary: expectedResult as [String: Any]))
}
+ @Test
+ func `which contains a thread-id in aps, extracts threadIdentifier into data`() {
+ // Given
+ let inputPayload: [AnyHashable: Any] = [
+ "aps": [
+ "category": "chat",
+ "thread-id": "thread-123",
+ "content-available": 1,
+ ],
+ "body": [
+ "title": "New message"
+ ],
+ "experienceId": "@brents/microfoam",
+ "projectId": "f19296df-44bd-482a-90bb-2af254c6ac42",
+ "scopeKey": "@brents/microfoam"
+ ]
+
+ // When
+ let result = BackgroundEventTransformer.transform(inputPayload)
+
+ // Then
+ let data = result["data"] as? [String: Any]
+ #expect(data?["threadIdentifier"] as? String == "thread-123")
+ #expect(data?["categoryId"] as? String == "chat")
+ }
+
@Test
func `which contains an alert field in aps, populates the notification entry`() {
// Given
diff --git a/packages/expo-notifications/src/Notifications.types.ts b/packages/expo-notifications/src/Notifications.types.ts
index 17c826738e004b..87f56d4dbe8b83 100644
--- a/packages/expo-notifications/src/Notifications.types.ts
+++ b/packages/expo-notifications/src/Notifications.types.ts
@@ -610,6 +610,11 @@ export type NotificationContentInput = {
* @platform ios
*/
categoryIdentifier?: string;
+ /**
+ * An identifier used to group related notifications together in the notification center.
+ * @platform ios
+ */
+ threadIdentifier?: string;
/**
* If set to `true`, the notification cannot be dismissed by swipe. This setting defaults
* to `false` if not provided or is invalid. Corresponds directly to Android's `isOngoing` behavior.
From 813f081f530794c2747c95f5f82330d7ea0b292a Mon Sep 17 00:00:00 2001
From: Aman Mittal
Date: Thu, 27 Aug 2026 16:13:04 +0530
Subject: [PATCH 04/19] [docs] Match feedback dialog radius with the EAS modal
(#49389)
# Why
Rounds the feedback dialog to 40px so it matches the EAS dashboard
modal, which is the same forked component at the same 500px width and
has been on `rounded-[40px]` while ours sat at 8px.
# Test Plan
# Checklist
- [ ] I added a `changelog.md` entry and rebuilt the package sources
according to [this short
guide](https://github.com/expo/expo/blob/main/CONTRIBUTING.md#-before-submitting)
- [ ] This diff will work correctly for `npx expo prebuild` & EAS Build
(eg: updated a module plugin).
- [ ] Conforms with the [Documentation Writing Style
Guide](https://github.com/expo/expo/blob/main/guides/Expo%20Documentation%20Writing%20Style%20Guide.md)
---
docs/ui/components/Footer/FeedbackDialog.tsx | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/docs/ui/components/Footer/FeedbackDialog.tsx b/docs/ui/components/Footer/FeedbackDialog.tsx
index bda36769dc0e53..72e088fc8106f5 100644
--- a/docs/ui/components/Footer/FeedbackDialog.tsx
+++ b/docs/ui/components/Footer/FeedbackDialog.tsx
@@ -64,7 +64,7 @@ export const FeedbackDialog = ({ pathname }: Props) => {
@@ -110,7 +110,7 @@ export const FeedbackDialog = ({ pathname }: Props) => {