Published on

android 14 ios 17 schedule local alarm notifications with notifee in react native

Authors
  • avatar
    Name
    James Williams
    Twitter
    About

Scheduling Local Alarm Notifications with Notifee in React Native: A Comprehensive Guide

React Native offers a powerful platform for building cross-platform mobile applications. When it comes to enhancing user engagement and providing timely reminders, local notifications play a crucial role. This guide will walk you through the process of scheduling local alarm notifications using the Notifee library in your React Native projects, ensuring compatibility with both Android 14 and iOS 17.

Understanding Notifee

Notifee is a highly regarded React Native library designed to simplify the management of local and push notifications. It provides a consistent API across Android and iOS, making it an ideal choice for developers seeking a streamlined approach.

Setting Up Notifee

  1. Installation: Begin by installing the Notifee library using npm or yarn:

    npm install @notifee/react-native
    
    yarn add @notifee/react-native
    
  2. Linking: After installation, link the library to your project. For Android, this typically involves adding the necessary dependencies to your android/app/build.gradle file. For iOS, you might need to run a linking command or manually add the required frameworks. Refer to the Notifee documentation for specific instructions based on your project setup.

Scheduling Local Alarm Notifications

  1. Import Notifee: Start by importing the necessary components from the Notifee library:

    import { Notifee } from '@notifee/react-native';
    
  2. Request Notification Permissions: Before scheduling notifications, ensure you have obtained the user's permission to display them. Use the requestPermission method to prompt the user:

    const requestPermission = async () => {
      try {
        const permissions = await Notifee.requestPermission();
        console.log('Permissions:', permissions);
      } catch (error) {
        console.error('Error requesting permissions:', error);
      }
    };
    
  3. Schedule the Notification: Use the createTriggerNotification method to schedule a notification at a specific time or after a delay:

    const scheduleNotification = async () => {
      try {
        const notificationId = await Notifee.createTriggerNotification({
          title: 'Reminder',
          body: 'Don't forget to...',
          android: {
            channelId: 'your_channel_id',
            sound: 'default',
          },
          ios: {
            sound: 'default',
          },
          trigger: {
            type: 'time',
            date: new Date(Date.now() + 1000 * 60 * 5), // Schedule in 5 minutes
          },
        });
        console.log('Notification scheduled with ID:', notificationId);
      } catch (error) {
        console.error('Error scheduling notification:', error);
      }
    };
    

    Explanation:

    • title and body: Set the notification's title and message content.
    • android and ios: Configure platform-specific settings like channel ID, sound, and other options.
    • trigger: Define the notification's trigger. In this example, we use a time trigger to schedule the notification 5 minutes from now. You can also use date or interval triggers for more flexibility.
  4. Triggering the Notification: Once the notification is scheduled, Notifee will automatically display it at the specified time.

Handling Notification Actions

  1. Action Buttons: You can add action buttons to your notifications, allowing users to interact with them. Use the actions property within the createTriggerNotification method:

    const scheduleNotification = async () => {
      try {
        const notificationId = await Notifee.createTriggerNotification({
          // ... other notification properties
          actions: [
            {
              title: 'Snooze',
              pressAction: {
                id: 'snooze',
              },
            },
            {
              title: 'Dismiss',
              pressAction: {
                id: 'dismiss',
              },
            },
          ],
        });
        // ...
      } catch (error) {
        // ...
      }
    };
    
  2. Handling Actions: Use the onNotificationAction event listener to handle user interactions with the notification's action buttons:

    Notifee.onNotificationAction((action) => {
      console.log('Notification action:', action);
      if (action.actionId === 'snooze') {
        // Handle snooze action
      } else if (action.actionId === 'dismiss') {
        // Handle dismiss action
      }
    });
    

Advanced Features

  • Custom Sounds: You can use custom sound files for your notifications.
  • Notification Groups: Group related notifications together for better organization.
  • Notification Channels: On Android, create notification channels to categorize notifications and control their behavior.
  • Background Tasks: Schedule notifications to trigger actions even when your app is in the background.

Best Practices

  • Request Permissions: Always request user permission before displaying notifications.
  • Clear and Concise Notifications: Keep notification messages short and to the point.
  • Respect User Preferences: Allow users to customize notification settings.
  • Avoid Overuse: Use notifications sparingly and only for important events.

Conclusion

By leveraging the power of Notifee, you can seamlessly integrate local alarm notifications into your React Native applications, enhancing user engagement and providing timely reminders. Remember to follow best practices and prioritize user experience to ensure your notifications are effective and well-received.