# react-native-push-notification **Repository Path**: mirrors_codejamninja/react-native-push-notification ## Basic Information - **Project Name**: react-native-push-notification - **Description**: React Native Local and Remote Notifications - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-08 - **Last Updated**: 2025-09-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # React Native Push Notifications [![npm version](https://badge.fury.io/js/react-native-push-notification.svg?update=7)](http://badge.fury.io/js/react-native-push-notification) [![npm downloads](https://img.shields.io/npm/dm/react-native-push-notification.svg?update=7)](http://badge.fury.io/js/react-native-push-notification) React Native Local and Remote Notifications for iOS and Android ## Supported React Native Versions | Component Version | RN Versions | README | |-----------------------|---------------|------------| | **1.0.7** | **<= 0.27** | [Open](https://github.com/zo0r/react-native-push-notification/blob/f42723817f1687e0da23e6753eb8a9f0385b6ac5/README.md) | | **1.0.8** | **0.28** | [Open](https://github.com/zo0r/react-native-push-notification/blob/2eafd1961273ca6a82ad4dd6514fbf1d1a829089/README.md) | | **2.0.1** | **0.29** | [Open](https://github.com/zo0r/react-native-push-notification/blob/c7ab7cd84ea19e42047379aefaf568bb16a81936/README.md) | | **2.0.2** | **0.30, 0.31, 0.32** | [Open](https://github.com/zo0r/react-native-push-notification/blob/a0f7d44e904ba0b92933518e5bf6b444f1c90abb/README.md) | | **>= 2.1.0** | **>= 0.33** | [Open](https://github.com/zo0r/react-native-push-notification/blob/a359e5c00954aa324136eaa9808333d6ca246171/README.md) | ## Changelog Changelog is available from version 3.1.1 here: [Changelog](https://github.com/zo0r/react-native-push-notification/blob/master/CHANGELOG.md) ## Installation `npm install --save react-native-push-notification` or `yarn add react-native-push-notification` `react-native link` **NOTE: For Android, you will still have to manually update the AndroidManifest.xml (as below) in order to use Scheduled Notifications.** ## Issues Having a problem? Read the [troubleshooting](./trouble-shooting.md) guide before raising an issue. ## Pull Requests [Please read...](./submitting-a-pull-request.md) ## iOS manual Installation The component uses PushNotificationIOS for the iOS part. [Please see: PushNotificationIOS](https://facebook.github.io/react-native/docs/pushnotificationios.html#content) ## Android manual Installation **NOTE: To use a specific `play-service-gcm` or `firebase-messaging` version:** In your `android/build.gradle` ```gradle ext { googlePlayServicesVersion = "" // default: "+" firebaseVersion = "" // default: "+" // Other settings compileSdkVersion = // default: 23 buildToolsVersion = "" // default: "23.0.1" targetSdkVersion = // default: 23 supportLibVersion = "" // default: 23.1.1 } ``` **NOTE: localNotification() works without changes in the application part, while localNotificationSchedule() only works with these changes:** In your `AndroidManifest.xml` ```xml ..... ..... ``` In `android/settings.gradle` ```gradle ... include ':react-native-push-notification' project(':react-native-push-notification').projectDir = file('../node_modules/react-native-push-notification/android') ``` Manually register module in `MainApplication.java` (if you did not use `react-native link`): ```java import com.dieam.reactnativepushnotification.ReactNativePushNotificationPackage; // <--- Import Package public class MainApplication extends Application implements ReactApplication { private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { @Override protected boolean getUseDeveloperSupport() { return BuildConfig.DEBUG; } @Override protected List getPackages() { return Arrays.asList( new MainReactPackage(), new ReactNativePushNotificationPackage() // <---- Add the Package ); } }; .... } ``` ## Usage ```javascript var PushNotification = require('react-native-push-notification'); PushNotification.configure({ // (optional) Called when Token is generated (iOS and Android) onRegister: function(token) { console.log( 'TOKEN:', token ); }, // (required) Called when a remote or local notification is opened or received onNotification: function(notification) { console.log( 'NOTIFICATION:', notification ); // process the notification // required on iOS only (see fetchCompletionHandler docs: https://facebook.github.io/react-native/docs/pushnotificationios.html) notification.finish(PushNotificationIOS.FetchResult.NoData); }, // ANDROID ONLY: GCM or FCM Sender ID (product_number) (optional - not required for local notifications, but is need to receive remote push notifications) senderID: "YOUR GCM (OR FCM) SENDER ID", // IOS ONLY (optional): default: all - Permissions to register. permissions: { alert: true, badge: true, sound: true }, // Should the initial notification be popped automatically // default: true popInitialNotification: true, /** * (optional) default: true * - Specified if permissions (ios) and token (android and ios) will requested or not, * - if not, you must call PushNotificationsHandler.requestPermissions() later */ requestPermissions: true, }); ``` ## Example app Example folder contains an example app to demonstrate how to use this package. The notification Handling is done in `NotifService.js`. For Remote notifications, configure your SenderId in `app.json`. You can also edit it directly in the app. To send Push notifications, you can use the online tool [PushWatch](https://www.pushwatch.com/gcm/). Please test your PRs with this example app before submitting them. It'll help maintaining this repo. ## Handling Notifications When any notification is opened or received the callback `onNotification` is called passing an object with the notification data. Notification object example: ```javascript { foreground: false, // BOOLEAN: If the notification was received in foreground or not userInteraction: false, // BOOLEAN: If the notification was opened by the user from the notification area or not message: 'My Notification Message', // STRING: The notification message data: {}, // OBJECT: The push data } ``` ## Local Notifications `PushNotification.localNotification(details: Object)` EXAMPLE: ```javascript PushNotification.localNotification({ /* Android Only Properties */ id: '0', // (optional) Valid unique 32 bit integer specified as string. default: Autogenerated Unique ID ticker: "My Notification Ticker", // (optional) autoCancel: true, // (optional) default: true largeIcon: "ic_launcher", // (optional) default: "ic_launcher" smallIcon: "ic_notification", // (optional) default: "ic_notification" with fallback for "ic_launcher" bigText: "My big text that will be shown when notification is expanded", // (optional) default: "message" prop subText: "This is a subText", // (optional) default: none color: "red", // (optional) default: system default vibrate: true, // (optional) default: true vibration: 300, // vibration length in milliseconds, ignored if vibrate=false, default: 1000 tag: 'some_tag', // (optional) add tag to message group: "group", // (optional) add group to message ongoing: false, // (optional) set whether this is an "ongoing" notification /* iOS only properties */ alertAction: // (optional) default: view category: // (optional) default: null userInfo: // (optional) default: null (object containing additional notification data) /* iOS and Android properties */ title: "My Notification Title", // (optional) message: "My Notification Message", // (required) playSound: false, // (optional) default: true soundName: 'default', // (optional) Sound to play when the notification is shown. Value of 'default' plays the default sound. It can be set to a custom sound such as 'android.resource://com.xyz/raw/my_sound'. It will look for the 'my_sound' audio file in 'res/raw' directory and play it. default: 'default' (default sound is played) number: '10', // (optional) Valid 32 bit integer specified as string. default: none (Cannot be zero) repeatType: 'day', // (optional) Repeating interval. Check 'Repeating Notifications' section for more info. actions: '["Yes", "No"]', // (Android only) See the doc for notification actions to know more }); ``` ## Scheduled Notifications `PushNotification.localNotificationSchedule(details: Object)` EXAMPLE: ```javascript PushNotification.localNotificationSchedule({ //... You can use all the options from localNotifications message: "My Notification Message", // (required) date: new Date(Date.now() + (60 * 1000)) // in 60 secs }); ``` ## Custom sounds In android, add your custom sound file to `[project_root]/android/app/src/main/res/raw` In iOS, add your custom sound file to the project `Resources` in xCode. In the location notification json specify the full file name: soundName: 'my_sound.mp3' ## Cancelling notifications ### 1) cancelLocalNotifications #### Android The `id` parameter for `PushNotification.localNotification` is required for this operation. The id supplied will then be used for the cancel operation. ```javascript // Android PushNotification.localNotification({ ... id: '123' ... }); PushNotification.cancelLocalNotifications({id: '123'}); ``` #### IOS The `userInfo` parameter for `PushNotification.localNotification` is required for this operation and must contain an `id` parameter. The id supplied will then be used for the cancel operation. ```javascript // IOS PushNotification.localNotification({ ... userInfo: { id: '123' } ... }); PushNotification.cancelLocalNotifications({id: '123'}); ``` ### 2) cancelAllLocalNotifications `PushNotification.cancelAllLocalNotifications()` Cancels all scheduled notifications AND clears the notifications alerts that are in the notification centre. *NOTE: there is currently no api for removing specific notification alerts from the notification centre.* ## Repeating Notifications ## (optional) Specify `repeatType` and optionally `repeatTime` while scheduling the local notification. Check the local notification example above. Property `repeatType` could be one of `week`, `day`, `hour`, `minute`, `time`. If specified as time, it should be accompanied by one more parameter `repeatTime` which should the number of milliseconds between each interval. ## Notification Actions ## (Android only) [Refer](https://github.com/zo0r/react-native-push-notification/issues/151) to this issue to see an example of a notification action. Two things are required to setup notification actions. ### 1) Specify notification actions for a notification This is done by specifying an `actions` parameters while configuring the local notification. This is an array of strings where each string is a notification action that will be presented with the notification. For e.g. `actions: '["Accept", "Reject"]' // Must be in string format` The array itself is specified in string format to circumvent some problems because of the way JSON arrays are handled by react-native android bridge. ### 2) Specify handlers for the notification actions For each action specified in the `actions` field, we need to add a handler that is called when the user clicks on the action. This can be done in the `componentWillMount` of your main app file or in a separate file which is imported in your main app file. Notification actions handlers can be configured as below: ``` import PushNotificationAndroid from 'react-native-push-notification' (function() { // Register all the valid actions for notifications here and add the action handler for each action PushNotificationAndroid.registerNotificationActions(['Accept','Reject','Yes','No']); DeviceEventEmitter.addListener('notificationActionReceived', function(action){ console.log ('Notification action received: ' + action); const info = JSON.parse(action.dataJSON); if (info.action == 'Accept') { // Do work pertaining to Accept action here } else if (info.action == 'Reject') { // Do work pertaining to Reject action here } // Add all the required actions handlers }); })(); ``` For iOS, you can use this [package](https://github.com/holmesal/react-native-ios-notification-actions) to add notification actions. ## Set application badge icon `PushNotification.setApplicationIconBadgeNumber(number: number)` Works natively in iOS. Uses the [ShortcutBadger](https://github.com/leolin310148/ShortcutBadger) on Android, and as such will not work on all Android devices. ## Sending Notification Data From Server Same parameters as `PushNotification.localNotification()` ## Android Only Methods `PushNotification.subscribeToTopic(topic: string)` Subscribe to a topic (works only with Firebase) ## Checking Notification Permissions `PushNotification.checkPermissions(callback: Function)` Check permissions `callback` will be invoked with a `permissions` object: - `alert`: boolean - `badge`: boolean - `sound`: boolean ## iOS Only Methods `PushNotification.getApplicationIconBadgeNumber(callback: Function)` Get badge number `PushNotification.abandonPermissions()` Abandon permissions