Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

expo-notifications

expo1.4mMIT0.31.1TypeScript support: included

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

react-native, expo, notifications, expo-notifications, push-nofifications

readme

Expo logo

Expo

Expo SDK version Chat or ask a question License: MIT Downloads

Try Expo in the Browser  •  Read the Documentation  •  Learn more on our blog  •  Request a feature

Follow us on

Expo on X   Expo on GitHub   Expo on Reddit   Expo on Bluesky   Expo on LinkedIn

Introduction

Expo is an open-source platform for making universal native apps that run on Android, iOS, and the web. It includes a universal runtime and libraries that let you build native apps by writing React and JavaScript.

This repository includes the Expo SDK, Modules API, Go app, CLI, Router, documentation, and various other supporting tools. Expo Application Services (EAS) is a platform of hosted services that are deeply integrated with Expo open source tools. EAS helps you build, ship, and iterate on your app as an individual or a team.

Read the Expo Community Guidelines before interacting in the repository. Thank you for helping keep the Expo community open and welcoming!

Table of contents

📚 Documentation

Learn about building and deploying universal apps in our official docs!

🗺 Project Layout

  • packages All the source code for Expo modules, if you want to edit a library or just see how it works this is where you'll find it.
  • apps This is where you can find Expo projects which are linked to the development modules. You'll do most of your testing in here.
  • apps/expo-go This is where you can find the source code for Expo Go.
  • apps/expo-go/ios/Exponent.xcworkspace is the Xcode workspace. When developing iOS, always open this instead of Exponent.xcodeproj because the workspace also loads the CocoaPods dependencies.
  • docs The source code for https://docs.expo.dev
  • templates The template projects you get when you run npx create-expo-app
  • react-native-lab This is our fork of react-native used to build Expo Go.
  • guides In-depth tutorials for advanced topics like contributing to the client.
  • tools contain build and configuration tools.
  • template-files contains templates for files that require private keys. They are populated using the keys in template-files/keys.json.
  • template-files/ios/dependencies.json specifies the CocoaPods dependencies of the app.

🏅 Badges

Let everyone know your app can be run instantly in the Expo Go app!

runs with Expo Go

runs with Expo Go

[![runs with Expo Go](https://img.shields.io/badge/Runs%20with%20Expo%20Go-000.svg?style=flat-square&logo=EXPO&labelColor=f3f3f3&logoColor=000)](https://expo.dev/client)

[![runs with Expo Go](https://img.shields.io/badge/Runs%20with%20Expo%20Go-4630EB.svg?style=flat-square&logo=EXPO&labelColor=f3f3f3&logoColor=000)](https://expo.dev/client)

👏 Contributing

If you like Expo and want to help make it better then check out our contributing guide! Check out the CLI package to work on the Expo CLI.

❓ FAQ

If you have questions about Expo and want answers, then check out our Frequently Asked Questions!

If you still have questions you can ask them on our Discord and Forums or X @expo.

💙 The Team

Curious about who makes Expo? Here are our team members!

License

The Expo source code is made available under the MIT license. Some of the dependencies are licensed differently, with the BSD license, for example.

Star the Expo repo on GitHub to support the project

changelog

Changelog

Unpublished

🛠 Breaking changes

🎉 New features

🐛 Bug fixes

💡 Others

0.31.1 — 2025-04-30

This version does not introduce any user-facing changes.

0.31.0 — 2025-04-25

🛠 Breaking changes

  • support more UNNotificationPresentationOptions, deprecate shouldShowAlert (#36361 by @vonovak)

💡 Others

  • deprecate removePushTokenSubscription and removeNotificationSubscription (#36371 by @vonovak)

0.30.7 — 2025-04-23

This version does not introduce any user-facing changes.

0.30.6 — 2025-04-22

🛠 Breaking changes

  • [Android] support action buttons when not in foreground. This is breaking because notification background tasks on Android run not only in response to an incoming notification but also in response to an action button press. (#35295 by @vonovak)

🐛 Bug fixes

  • correctly include NotificationContent.data in NotificationHandler (#36195 by @vonovak)

0.30.5 — 2025-04-21

This version does not introduce any user-facing changes.

0.30.4 — 2025-04-14

This version does not introduce any user-facing changes.

0.30.3 — 2025-04-14

This version does not introduce any user-facing changes.

0.30.2 — 2025-04-09

🐛 Bug fixes

0.30.1 — 2025-04-08

This version does not introduce any user-facing changes.

0.30.0 — 2025-04-04

🐛 Bug fixes

  • improve notification response handling (#36027 by @vonovak)
  • remove unneeded Long conversions on Android (#35976 by @vonovak)
  • [post-swift-conversion] fix data serialization (#35975 by @vonovak)
  • simplify push token event management (#35944 by @vonovak)
  • fix Android NotificationContent not containing JSON data object (#35942 by @vonovak)
  • [post-swift-conversion] fix regressions in CalendarTriggerRecord (#35937 by @vonovak)
  • remove deprecated presentNotificationAsync (#35900 by @vonovak)
  • [post-swift-conversion] UNTextInputNotificationAction wasn't provided with options (#35903 by @vonovak)
  • [post-swift-conversion] event emitter should not influence notification presentation (#35858 by @vonovak)
  • correctly serialize null trigger on iOS (#35672 by @vonovak)
  • restore useLastNotificationResponse return value behavior (#35504 by @vonovak)
  • [post-swift-conversion] fix ios textInput action missing title (#34866 by @vonovak)
  • [ios] Fixed incorrect EXNotifications-Swift.h import. (#34987 by @lukmccall)
  • [iOS] fix notification response listener emitting duplicate response events (#34849 by @xc2)

💡 Others

  • update Push Notification deprecation message for Expo Go (#35577 by @vonovak)
  • simplify nextTriggerDate in TimeIntervalTrigger (#35559 by @vonovak)
  • [apple] Migrate remaining expo-module.config.json to unified platform syntax. (#34445 by @reichhartd)

⚠️ Notices

0.29.14 - 2025-03-11

🐛 Bug fixes

💡 Others

0.29.13 - 2025-01-27

🛠 Breaking changes

0.29.12 - 2025-01-10

This version does not introduce any user-facing changes.

0.29.11 - 2024-12-05

🐛 Bug fixes

  • [android] fix data serialization for notifications with ChannelAwareTrigger (#33354 by @alextoudic)
  • Add additional fallback value for project ID in getExpoPushTokenAsync (#33359 by @bradjones1)
  • [Android] Started using expo modules gradle plugin. (#34176 by @lukmccall)

0.29.10 - 2024-12-02

🐛 Bug fixes

  • [android] fix notifications with custom sounds treated as silent (#33311 by @pennersr)

0.29.9 - 2024-11-29

🐛 Bug fixes

0.29.8 — 2024-11-14

This version does not introduce any user-facing changes.

0.29.7 — 2024-11-13

This version does not introduce any user-facing changes.

0.29.6 — 2024-11-10

🎉 New features

  • [android] run notification tasks from killed state (#32531 by @vonovak)
  • add enableBackgroundRemoteNotifications option to config plugin (#32716 by @vonovak)

0.29.5 — 2024-11-07

🛠 Breaking changes

🐛 Bug fixes

💡 Others

0.29.4 — 2024-10-29

This version does not introduce any user-facing changes.

0.29.3 — 2024-10-25

💡 Others

0.29.2 — 2024-10-24

This version does not introduce any user-facing changes.

0.29.1 — 2024-10-24

This version does not introduce any user-facing changes.

0.29.0 — 2024-10-22

🛠 Breaking changes

🎉 New features

🐛 Bug fixes

  • [android] fix: allow data message to control notification appearance (#32162 by @vonovak)
  • [ios] fix crash if expo-update reload happens while Notifications.requestPermissionsAsync() is showing native dialog (#32096 by @mfazekas)
  • [android] createNotificationChannel could return incorrect channel information (#32000 by @vonovak)
  • [android] fix notifications with ChannelAwareTrigger not being presented (#31999 by @vonovak)
  • export PermissionStatus as value, not as type (#31968 by @vonovak)
  • throw improved error on invalid subscription in removeNotificationSubscription (#31842 by @vonovak)
  • [android] fix notifications actions not being presented (#31795 by @vonovak)
  • Add missing react and react-native peer dependencies for isolated modules. (#30478 by @byCedric)
  • [iOS] do not overwrite existing aps entitlement. (#31892 by @douglowder)

💡 Others

0.28.17 - 2024-09-17

🐛 Bug fixes

  • [Android] image was missing on android when in foreground (#31405 by @vonovak)
  • [Android] fix local notifications with null trigger. (#31157 by @douglowder)
  • [Android] Take channelId into account when presenting notifications. (#31201 by @vonovak)

0.28.16 - 2024-08-21

🐛 Bug fixes

  • [Android] Fix content.data in scheduled notifications surfaced to JS. (#31048 by @douglowder)

0.28.15 - 2024-08-05

🐛 Bug fixes

  • [Android] Eliminate unsupported types when processing notification intents from onCreate/onNewIntent. (#30750 by @douglowder)

0.28.14 - 2024-07-30

🐛 Bug fixes

0.28.13 - 2024-07-29

🐛 Bug fixes

0.28.12 - 2024-07-25

🐛 Bug fixes

  • [Android] Android 11 crash when click foreground notifications. (#30207 by @GrinZero)
  • Notification's textInput content would contain placeholder instead of the actual user input (#27479 by @Victor-FT)

0.28.11 - 2024-07-22

🐛 Bug fixes

0.28.10 - 2024-07-15

🐛 Bug fixes

0.28.9 - 2024-06-12

This version does not introduce any user-facing changes.

0.28.8 - 2024-06-10

🐛 Bug fixes

  • [Android] Add default channel plugin prop, restore legacy icon and color. (#29491 by @douglowder)

0.28.7 — 2024-06-05

🐛 Bug fixes

0.28.6 — 2024-06-03

🐛 Bug fixes

0.28.5 — 2024-05-31

🐛 Bug fixes

0.28.4 — 2024-05-29

🐛 Bug fixes

  • [Android] Correctly map response in useLastNotificationResponse hook. (#28938 by @douglowder)

0.28.3 — 2024-05-16

💡 Others

0.28.2 — 2024-05-15

🐛 Bug fixes

  • [Android] fix response handling when app in background or not running. (#28883 by @douglowder)

0.28.1 — 2024-04-23

This version does not introduce any user-facing changes.

0.28.0 — 2024-04-18

🐛 Bug fixes

  • [Android] Fix notifications events were using an incorrect event emitter. (#28207 by @lukmccall)

💡 Others

  • [iOS] Add privacy manifest describing required reason API usage. (#27770 by @aleqsio)
  • drop unused web name property. (#27437 by @EvanBacon)
  • Removed deprecated backward compatible Gradle settings. (#28083 by @kudo)

0.27.5 - 2024-01-25

This version does not introduce any user-facing changes.

0.27.4 - 2024-01-20

🐛 Bug fixes

  • Throw UnavailabilityError when trying to use setNotificationCategoryAsync on web. (#26511 by @marklawlor)
  • Remove .native hardcoded platform imports (#26511 by @marklawlor)
  • On Android, added events to module definition to clear warnings. (#26654 by @alanjhughes)

0.27.3 - 2024-01-10

🐛 Bug fixes

  • [Android] Fix expo-notifications requiring the expo-task-manager module to start. (#26227 by @behenate)

0.27.2 - 2023-12-19

This version does not introduce any user-facing changes.

0.27.1 — 2023-12-13

This version does not introduce any user-facing changes.

0.27.0 — 2023-12-12

🐛 Bug fixes

  • On Android, make tokenManager nullable to prevent crash if we can't find it. (#25860 by @alanjhughes)

0.26.0 — 2023-11-14

🛠 Breaking changes

0.25.0 — 2023-10-17

🛠 Breaking changes

🐛 Bug fixes

  • Send background notifications through when the app is in the foreground (#24684 by @kadikraman)

💡 Others

0.24.2 — 2023-09-18

This version does not introduce any user-facing changes.

0.24.1 — 2023-09-15

💡 Others

0.24.0 — 2023-09-15

This version does not introduce any user-facing changes.

0.23.0 — 2023-09-04

🎉 New features

  • Added support for React Native 0.73. (#24018 by @kudo)

🐛 Bug fixes

0.22.0 — 2023-08-02

This version does not introduce any user-facing changes.

0.21.0 — 2023-07-28

💡 Others

0.20.1 — 2023-06-24

This version does not introduce any user-facing changes.

0.20.0 — 2023-06-21

🐛 Bug fixes

0.19.0 — 2023-05-08

🛠 Breaking changes

💡 Others

0.18.1 — 2023-02-09

💡 Others

  • Export getExpoPushTokenAsync parameter type. (#21104 by @Simek)

0.18.0 — 2023-02-03

💡 Others

  • Update getExpoPushTokenAsync to make projectId required. (#20833 by @gabrieldonadel)
  • On Android bump compileSdkVersion and targetSdkVersion to 33. (#20721 by @lukmccall)
  • Add JSDoc comments, perform type changes related to documentation autogeneration. (#21002 by @Simek)

0.17.0 — 2022-10-25

🛠 Breaking changes

  • [plugin] Upgrade minimum runtime requirement to Node 14 (LTS). (#18204 by @EvanBacon)
  • Bumped iOS deployment target to 13.0 and deprecated support for iOS 12. (#18873 by @tsapeta)

🐛 Bug fixes

  • Fixed build error for setting compileSdkVersion to 33. (#19432 by @kudo)
  • Fixed the POST_NOTIFICATIONS runtime permission integration when targerSdkVersion is set to 33. (#19672 by @kudo, @kudo)
  • Fixed projectId variable not found reference error when using development builds. (#20276 by @amandeepmittal)

💡 Others

  • [plugin] Migrate import from @expo/config-plugins to expo/config-plugins and @expo/config-types to expo/config. (#18855 by @brentvatne)
  • Drop @expo/config-plugins dependency in favor of peer dependency on expo. (#18595 by @EvanBacon)

0.16.1 — 2022-07-16

This version does not introduce any user-facing changes.

0.16.0 — 2022-07-07

🛠 Breaking changes

  • remove usePermissions hook (#31905 by @vonovak)
  • [android] Set the "notification number" (sometimes used to increment badge count on some launchers) from the notification payload badge field. (#17171 by @danstepanov)

🐛 Bug fixes

  • Fixed Android 12+ runtime crash caused by PendingIntent misconfiguration. (#17333 by @kudo)
  • Fix app not bringing to foreground when clicking notification on Android 12+. (#17686 by @kudo)
  • Fixed Android data-only FCM notifications (i.e. notifications without a title and message) appearing in the notification drawer (#17707 by @sausti)
  • Add support for unregistering from push notifications on Android and iOS (#17812 by @sausti)
  • Fix another Android 12+ trampoline issue from push notifications. (#17871 by @kudo)
  • Fixed useLastNotificationResponse returns latest received notification but not the clicked notification on Android. (#17974 by @kudo)

⚠️ Notices

  • Fixed exception on Android 12+ devices for missing SCHEDULE_EXACT_ALARM permission. If scheduleNotificationAsync needs a precise timer, the SCHEDULE_EXACT_ALARM should be explicitly added to AndroidManifest.xml. (#17334 by @kudo)

0.15.1 — 2022-04-27

💡 Others

0.15.0 — 2022-04-18

🐛 Bug fixes

  • Upgrade firebase messaging dependency to v21. This means expo-notifications no longer relies on FirebaseInstanceId. If you added com.google.firebase:firebase-iid to your android/app/build.gradle file for this library, it is no longer required and you can safely remove that dependency. (#15010 by @cruzach)

💡 Others

  • Updated @expo/config-plugins from 4.0.2 to 4.0.14 and @expo/image-utils from ^0.3.16 to ^0.3.18 (#15621 by @EvanBacon)

⚠️ Notices

  • On Android bump compileSdkVersion to 31, targetSdkVersion to 31 and Java version to 11. (#16941 by @bbarthec)

0.14.1 - 2022-02-01

🐛 Bug fixes

  • Fix Plugin with id 'maven' not found build error from Android Gradle 7. (#16080 by @kudo)

0.14.0 — 2021-12-03

💡 Others

0.13.1 — 2021-10-01

This version does not introduce any user-facing changes.

0.13.0 — 2021-09-28

🛠 Breaking changes

🎉 New features

  • Update JS code to read manifest2 when manifest is not available. (#13602 by @wschurman)
  • Add usePermissions hook from modules factory. (#13863 by @bycedric)

🐛 Bug fixes

  • Fixed Android notifications not respecting the shouldPlaySound property in setNotificationHandler. (#13411 by @cruzach)
  • Force device ID to lowercase before sending to Expo's servers. (Only applicable if you're using ExpoPushTokens). (#13409 by @cruzach)
  • Fixed plugin to not throw if the notification icon isn't set, and there's no notification icon present in the Android project. (#13539 by @cruzach)
  • Fix building errors from use_frameworks! in Podfile. (#14523 by @kudo)

💡 Others

0.12.0 — 2021-06-16

🎉 New features

  • [plugin] Refactor imports (#13029 by @EvanBacon)
  • Add support for custom notification sounds when using EAS Build. (#12782 by @cruzach)
  • Added ability to respond to remote notifications received while the app is backgrounded. (#13130 by @cruzach)

🐛 Bug fixes

💡 Others

  • Migrated from unimodules-permissions-interface to expo-modules-core. (#12961 by @tsapeta)
  • Refactored uuid imports to v7 style. (#13037 by @giautm)

0.11.5 — 2021-04-13

This version does not introduce any user-facing changes.

0.11.4 — 2021-04-09

🎉 New features

0.11.3 — 2021-03-31

This version does not introduce any user-facing changes.

0.11.2 — 2021-03-30

🐛 Bug fixes

0.11.1 — 2021-03-23

🎉 New features

  • Expose getLastNotificationResponseAsync method (non-hook version of useLastNotificationResponse).

🐛 Bug fixes

0.11.0 — 2021-03-10

🎉 New features

  • Allow for remote notifications to overwrite notifications already existing in the tray. (#12050 and #12055 by @cruzach)
  • Notifications from different experiences in Expo Go can no longer overwrite each other. (#12050 and #12055 by @cruzach)

0.10.0 — 2021-03-03

🎉 New features

  • Updated Android build configuration to target Android 11 (added support for Android SDK 30). (#11647 by @bbarthec)
  • Added YearlyTriggerInput that allows scheduling a yearly recurring notification for a specific day of the year, hour and minute. It is supported on both iOS and Android. (#11898 by @raulmt)

🐛 Bug fixes

  • Notification categories will no longer be lost after ejecting to the bare workflow (if ejecting after SDK 41). (#11651 by @cruzach)
  • Notify all listeners of pending notification responses. (#11536 by @esamelson)

0.9.0 — 2021-01-15

⚠️ Notices

🛠 Breaking changes

  • Dropped support for iOS 10.0 (#11344 by @tsapeta)
  • When migrating installation identifier (used internally to fetch Expo push token) expo-notifications will now remove existing SharedPreferences entry, if the migrated identifier comes from there. This may cause issues in bare workflow projects if expo-constants is installed in version lower than 10.0.0. Please upgrade expo-constants in your project to at least 10.0.0 when installing new versions of expo-notifications. If you do not upgrade expo-constants, its .installationId may change. (#11283 by @sjchmiela)

🎉 New features

🐛 Bug fixes

  • Fixed a case where requestPermissionsAsync would ignore the provided NotificationPermissionsRequest. (#11548 by @cruzach)
  • Fixed case on Android where getPermissionsAsync would always return canAskAgain: true. (#11551 by @cruzach)
  • Fixed migration process to not use expo-constants installation ID if there is a notifications-specific identifier. (#11287 by @sjchmiela)
  • Native iOS notifications emitter module no longer registers for notification events as soon as module registry is ready which fixes initial notification response not being delivered to JS in standalone (Expo managed workflow) iOS apps. (#11382 by @sjchmiela)
  • Changed the visibility of Android's InstallationId#getNonBackedUpUuidFile method so it's easier to override by custom implementations. (#11249 by @sjchmiela)
  • Added extra check for marking pending notification responses as delivered which prevents legacy Expo notifications to consume notification responses when we don't want it to which should help fix initial notification response (causing the application to start) not being delivered (only in iOS standalone applications in Expo managed workflow). (#11378 by @sjchmiela)
  • Removed fbjs dependency (#11396 by @cruzach)

0.8.2 — 2020-11-30

🐛 Bug fixes

0.8.1 — 2020-11-25

This version does not introduce any user-facing changes.

0.8.0 — 2020-11-17

🛠 Breaking changes

  • Changed the way PermissionResponse.status is calculated on iOS. Previously, it returns the numeric value of UMPermissionStatus which does not match the TypeScript enum declaration. (#10513 by @cHaLkdusT)
  • Changed the way NotificationContent.data is calculated on iOS. Previously it was the contents of remote notification payload with all entries from under "body" moved from under "body" to root level. Now it's the sole unchanged contents of payload["body"]. Other fields of the payload can now be accessed on iOS through PushNotificationTrigger.payload (similarly to how other fields of native remote message can be accessed on Android under PushNotificationTrigger.remoteMessage). (#10453 by @sjchmiela)
  • Changed class responsible for handling Firebase events from FirebaseMessagingService to .service.NotificationsService on Android. (#10558 by @sjchmiela)

    Note that this change most probably will not affect you — it only affects projects that override FirebaseMessagingService to implement some custom handling logic.

  • Changed how you can override ways in which a notification is reinterpreted from a StatusBarNotification and in which a Notification is built from defining an expo.modules.notifications#NotificationsScoper meta-data value in AndroidManifest.xml to implementing a BroadcastReceiver subclassing NotificationsService delegating those responsibilities to your custom PresentationDelegate instance. (#10558 by @sjchmiela)

    Note that this change most probably will not affect you — it only affects projects that override those methods to implement some custom handling logic.

  • Removed removeAllNotificationListeners method. You can (and should) still remove listeners using remove method on Subscription objects returned by addNotification…Listener. (#10883 by @sjchmiela)
  • Fixed device identifier being used to fetch Expo push token being backed up on Android which resulted in multiple devices having the same deviceId (and eventually, Expo push token). (#11005 by @sjchmiela)
  • Fixed device identifier used when fetching Expo push token being different than Constants.installationId in managed workflow apps which resulted in different Expo push tokens returned for the same experience across old and new Expo API and the device push token not being automatically updated on Expo push servers which lead to Expo push tokens corresponding to outdated Firebase tokens. (#11005 by @sjchmiela)
  • Removed removeAllPushTokenListeners method. You can (and should) still remove listeners using remove method on Subscription objects returned by addPushTokenListener. (#11106 by @sjchmiela)

🎉 New features

  • Added useLastNotificationResponse React hook that always returns the notification response that has been emitted most recently. (#10883 by @sjchmiela)
  • Added WeeklyTriggerInput that allows scheduling a weekly recurring notification for a specific day of week, hour and minute. It is supported on both iOS and Android. (#9973 by @RikTheunis)
  • Added getNextTriggerDateAsync method allowing you to verify manually when would the next trigger date for a particular notification trigger be. (#10455 by @sjchmiela)
  • Added support for restoring scheduled notifications alarms on Android after an app is updated. (#10708 by @sjchmiela)
  • Added support for auto server reregistration for Expo push tokens (keeping Expo push token always valid) and auto server registration customizations. (#10908 by @sjchmiela)

🐛 Bug fixes

  • Fixed TypeScript definition: setNotificationCategoryAsync should expect options.allowAnnouncement, not options.allowAnnouncment. (#11025 by @cruzach)
  • Fixed issue where custom notification icon and color weren't being properly applied in Android managed workflow apps. (#10828 by @cruzach)
  • Fixed case where Android managed workflow apps could crash when receiving an interactive notification. (#10608 by @cruzach)
  • Fixed case where Android apps could crash if you set a new category with a text input action without providing any options. (#10141 by @cruzach)
  • Android apps no longer rely on the submitButtonTitle property as the action button title (they rely on buttonTitle, which matches iOS behavior). (#10141 by @cruzach)
  • Fixed Notifications.requestPermissions() returning undetermined instead of a known status in some browsers. (#10296 by @sjchmiela)
  • Fixed crashing when Proguard is enabled. (#10421 by @lukmccall)
  • Fixed the application icon being always added as a notification icon. (#10471 by @lukmccall)
  • Fixed faulty trigger detection mechanism which caused some triggers with channelId specified get recognized as triggers of other types. (#10454 by @sjchmiela)
  • Fixed fatal exception sometimes being thrown when notification was received or tapped on Android due to observer being cleared before it's added. (#10640 by @sjchmiela)
  • Removed the large icon from managed workflow. (#10492 by @lukmccall)
  • Fixed crash happening due to non-existent ExpoNotificationsService being declared in AndroidManifest.xml. (#10638 by @sjchmiela)
  • Fixed notifications not playing any sound when shouldShowAlert: false but shouldPlaySound: true in setNotificationHandler. (#10699 by @cruzach)
  • Add guard against badgin usage in SSR environments. (#10741 by @bycedric)
  • Moved notification events handling from main thread to a background thread which makes users' devices more responsive. (#10762 by @sjchmiela)
  • Fixed having to define CATEGORY_DEFAULT on an Activity that is expected to receive expo.modules.notifications.OPEN_APP_ACTION intent when handling notification response. (#10755 by @sjchmiela)
  • Fixed notifications not being returned at all from getAllPresentedNotificationsAsync() if the library fails to reconstruct notification request based on marshaled copy in notification data. From now on they'll be naively reconstructed from the Android notification. (#10801 by @sjchmiela)
  • May have helped fix an issue where "initial notification response" (the one that opened the app) was not being delivered to Android apps. (#10773 by @sjchmiela)

0.7.1 — 2020-08-26

This version does not introduce any user-facing changes.

0.7.0 — 2020-08-18

🎉 New features

🐛 Bug fixes

  • Fix scheduled notifications not being displayed after five minutes of phone inactivity on Android. (#9816 by @sjchmiela)
  • Fixed case where iOS notification category would not be set on the very first call to setNotificationCategoryAsync. (#9515 by @cruzach)
  • Fixed notification response listener not triggering in the managed workflow on iOS when app was completely killed (#9478 by @cruzach)
  • Fixed notifications being displayed when shouldShowAlert was false on Android. (#9563 by @barthap)
  • Fixed Application Not Responding occurring in the Google Play Console. (#9792 by @lukmccall)

0.6.0 — 2020-07-29

🎉 New features

  • Added Notification categories functionality to allow for interactive push notifications on Android and iOS! (#9015 by @cruzach)
  • Added support for channels to local notifications. (#9385 by @lukmccall)

0.5.0 — 2020-07-27

🎉 New features

  • Added support for custom large icon on the Android. (#9116 by @lukmccall)
  • Added sticky property, which defines if notification can be dismissed by swipe. (#9351 by @barthap)

🐛 Bug fixes

  • Fix notifications not being displayed after five minutes of phone inactivity on Android. (#9287 by @mczernek)
  • Include content-type: application/json when requesting an Expo push token (#9332 by @ide)
  • Export NotificationPermissions.types to make Notifications.IosAuthorizationStatus available. (#8747 by @brentvatne)
  • Fixed remote notifications ignoring the channelId parameter. (#9080 by @lukmccall)
  • Fixed malformed data object on iOS. (#9164 by @lukmccall)

0.4.0 — 2020-06-24

🎉 New features

  • Added IosAuthorizationStatus.EPHEMERAL, an option that maps to UNAuthorizationStatusEphemeral for compatibility with iOS 14. (#8938 by @ide)

🐛 Bug fixes

  • Fixed total incompatibility with the web platform – calling unsupported methods will now throw a readable UnavailabilityError. (#8853 by @sjchmiela)

0.3.2 — 2020-06-10

🐛 Bug fixes

  • Fixed compatibility with expo-permissions below 9.0.0 (the duplicate symbols problem). (#8753 by @sjchmiela)

0.3.1 — 2020-06-03

🎉 New features

  • Added support for including foreign (non-expo-notifications-created) notifications in getPresentedNotificationsAsync on Android. (#8614 by @sjchmiela)

🐛 Bug fixes

  • Fixed getExpoPushTokenAsync rejecting when getDevicePushTokenAsync's Promise hasn't fulfilled yet (and vice versa). Probably also added support for calling these methods reliably with Fast Refresh enabled. (#8608 by @sjchmiela)

0.3.0 — 2020-05-28

🎉 New features

  • Added native permission requester that will let developers call Permissions.getAsync(Permissions.NOTIFICATIONS) (or askAsync) when this module is installed. (#8486 by @sjchmiela)

    Note that the effect of this method is the same as if you called Notifications.getPermissionsAsync() (or requestPermissionsAsync) and then Notifications.getDevicePushTokenAsync()—it tries to both ask the user for user-facing notifications permissions and then tries to register the device for remote notifications. We are planning to deprecate the .NOTIFICATIONS permission soon.

0.2.0 — 2020-05-27

🛠 Breaking changes

  • Note that this may or may not be a breaking change for you — if you'd expect the notification to be automatically dismissed when tapped on this is a bug fix and a new feature (fixes inconsistency between platforms as on iOS this is the only supported behavior; adds the ability to customize the behavior on Android). If you'd expect the notification to only be dismissed at your will this is a breaking change and you'll need to add autoDismiss: false to your notification content inputs.

  • Changed the default notification behavior on Android to be automatically dismissed when clicked. This is customizable with the autoDismiss parameter of NotificationContentInput. (#8241 by @thorbenprimke)

🎉 New features

  • Added the ability to configure whether the notification should be automatically dismissed when tapped on or not (on Android) with the autoDismiss parameter of NotificationContentInput. (#8241 by @thorbenprimke)
  • Added DailyTriggerInput that allows scheduling a daily recurring notification for a specific hour and minute. It is supported on both iOS and Android. (#8199 by @thorbenprimke)

🐛 Bug fixes

  • Added a macro check for UNLocationNotificationTrigger to make this module compatible with Mac Catalyst (#8171 by @robertying)
  • Fixed notification content text being truncated without the ability to expand the notification by adding BigTextStyle to all Android notifications, which allows them to be expanded and their content text fully viewed (#8140 by @thorbenprimke)
  • Added a check for trigger input that throws an error if user misuses the seconds property (#8261 by @sjchmiela)

0.1.7 - 2020-05-05

🐛 Bug fixes

  • Fixed obsolete and invalid dependency on >= @unimodules/core@5.1.1, bringing backwards compatibility with older versions of @unimodules/core (#8162 by @sjchmiela)

0.1.6 - 2020-05-05

🐛 Bug fixes

  • Fixed crash when serializing a notification containing a null value (#8153 by @sjchmiela)
  • Fixed a typo in AndroidImportance enum (DEEFAULT is now deprecated in favor of DEFAULT) (#8161 by @trevorah)

0.1.5 - 2020-05-05

🐛 Bug fixes

  • Fixed the ability to override the FirebaseListenerService without having to add a custom priority. (#8175 by @lukmccall)
  • Fixed SoundResolver causing crash if the sound property is not defined or doesn't contain a . (#8150 by @sjchmiela)

0.1.4 - 2020-05-04

🎉 New features

  • Added a native setting allowing you to use a custom notification icon for Android notifications (#8035 by @sjchmiela)
  • Added a native setting and a runtime option allowing you to use a custom notification color for Android notifications (#8035 by @sjchmiela)

🐛 Bug fixes

  • Fixed initial notification not being emitted to NotificationResponse listener on iOS (#7958 by @sjchmiela)

0.1.3 - 2020-04-30

🐛 Bug fixes

  • Fixed custom notification sounds not being applied properly to notifications and channels (#8036 by @sjchmiela)
  • Fixed iOS rejecting the Promise to schedule a notification if sound is not empty or a boolean (#8036 by @sjchmiela)

0.1.2 - 2020-04-21

🐛 Bug fixes

  • Fixed interpretation of Date and number triggers when calling scheduleNotificationAsync on iOS (#7942 by @sjchmiela)