본문 바로가기
공부/React & React Native

Notifee 정리

by Piva 2023. 5. 20.
  • React Native에서 로컬 알림을 보낼 수 있게 해주는 패키지는 대표적으로 react-native-notifications, react-native-push-notifications, notifee 등이 있다.
  • 이중 널리 쓰이는 것으로는 react-native-push-notifications 이 있는데, 깃허브를 살펴보니 현재 패키지가 활발히 관리되고 있는 상태가 아니기 때문에 다른 패키지 사용을 고려해보라는 내용이 적혀있었다.
  • 대체안으로써 추천된 것 중 하나가 Notifee인데, 과거엔 유료였으나 얼마 전부터 완전 무료로 풀린 것으로 보인다. 해서 기본적인 사용법을 기록해둔다.

설치

npm install --save @notifee/react-native

yarn add @notifee/react-native

 

권한 요청

  • 알림을 보내기 위해서는 사용자가 앱의 알림 권한을 허용해야 한다.
  • 따라서 알림을 보내기 전, 권한이 허용된 상태인지를 확인한 후 허용된 상태가 아니라면 권한을 요청한다.
import notifee, { AuthorizationStatus } from '@notifee/react-native';

const requestNotificationPermission = async () => {
  // 사용자에게 알림 권한 허용을 요청한다, 설정된 권한 상태를 반환한다
  const settings = await notifee.requestPermission();

  // 권한 상태는 settings.authorizationStatus로 확인할 수 있다
  if (settings.authorizationStatus >= AuthorizationStatus.DENIED) {
    return true;
  } else return false;
};

 

  • 권한 요청 없이 현재 권한의 허용 여부를 확인할 수도 있다.
import notifee, { AuthorizationStatus } from '@notifee/react-native';

const checkIsNotificationPermissionGranted = async () => {
  // 현재 권한 상태를 확인한다
  const settings = await notifee.getNotificationSettings();

  if (settings.authorizationStatus >= AuthorizationStatus.DENIED) {
    return true;
  } else return false;
};

 

알림 전송

  • 권한이 허용된 상태에서 알림을 띄울 수 있다.
  • 안드로이드의 경우, 알림을 띄우기 위해서는 createChannel을 통해 '채널'을 생성해야 한다.
  • displayNotification을 사용하여 실제로 알림을 띄울 수 있다. 이 때 알림 제목과 내용이 되는 title과 body는 필수적으로 입력해야 한다. ios나 android 속성을 사용해서 OS별로 다른 옵션을 줄 수도 있다. (참고)
채널은 AOS만의 개념으로, 알림들을 카테고리화 하고 사용자가 기기에서 알림들을 관리할 수 있게 한다. 여기서는 다루지 않지만 알림들을 그룹화하는 것 또한 가능하다.
import notifee from '@notifee/react-native';

const showNotification = async (title: string, body:string) => {
  // ...
  
  // AOS에서 알림을 보내기 위해서 채널을 생성한다
  const channelId = await notifee.createChannel({
    id: NOTIFEE_CHANNEL,
    name: 'default channel',
  });

  // 로컬 알림을 띄운다
  await notifee.displayNotification({
    title,
    body,
    android: {
      channelId,
      badgeCount: 1,
    },
  });
};

 

※ 채널을 생성하는 createChannel은 채널 당 꼭 한 번만 실행될 필요는 없다. 새 채널의 경우는 새로 생성하고 기존에 이미 존재하는 채널이라면 업데이트 하기 때문에 계속해서 호출해도 괜찮다고. (참고)

 

 

Trigger

  • Trigger를 사용하면 특정 조건이 충족되었을 때 알림을 전송하는 것이 가능하다.
  • Trigger에는 두 가지 종류가 존재하며, 각각 Interval 트리거와 Timestamp 트리거이다.
  • 이중 Android 버전이 12 이상인 AOS에서 Timestamp 트리거를 사용하기 위해서는 별도의 권한 요청이 필요하다. (참고)
import notifee, { AndroidNotificationSetting } from '@notifee/react-native';

const requestAndroidPermissionSettings = async () => {
  const settings = await notifee.getNotificationSettings();

  if (settings.android.alarm !== AndroidNotificationSetting.ENABLED) {
    // 안드로이드에서 알람 권한을 설정한다
    await notifee.openAlarmPermissionSettings();
  }
};

 

  • Trigger를 사용하기 위해선 TimestampTrigger 타입의 trigger를 정의해야 한다.
  • Trigger 정의 시 Trigger의 종류, 시간 등을 설정할 수 있다.
  • 정의한 Trigger를 사용하여 createTriggerNotification으로 Trigger를 등록한다.
  • Trigger 사용 시에도 AOS에선 채널이 필요하기 때문에, 채널이 생성되어있지 않다면 생성해야 한다.
  • 이미 추가한 Trigger를 업데이트하고 싶을 때도 createTriggerNotification을 사용한다. id에 미리 만들어둔 Trigger의 id를 넣기만 하면 된다.
import notifee, { TimestampTrigger, TriggerType } from '@notifee/react-native';

const createScheduledNotification = async (
  id: string,
  title: string,
  body: string,
  alarmTime: Date,
) => {
  // Trigger를 정의한다
  const trigger: TimestampTrigger = {
    type: TriggerType.TIMESTAMP, // Interval과 Timestamp 중 선택
    timestamp: alarmTime.getTime(), // 언제 알림을 띄울 것인지 시간 설정
    alarmManager: true, // AOS에서 알림을 띄우기 위해 추가해야 함
  };
  
  // Trigger Notification을 생성한다
  await notifee.createTriggerNotification(
    {
      id,
      title,
      body,
      android: {
        channelId: NOTIFEE_CHANNEL,
      },
    },
    trigger,
  );
};

 

  • 만들어진 Trigger를 삭제하고 싶을 경우, cancelTriggerNotification을 사용한다.
import notifee from '@notifee/react-native';

const cancelScheduledNotification = async (id: string) => {
  await notifee.cancelTriggerNotification(id);
};
  • 혹은 cancelAllNotifications를 사용해서 이미 표시 되어있는 알림 및 미래에 표시될 알림을 모두 취소하는 것이 가능하다.

 

  • Timestamp 트리거는 Trigger의 실행 주기를 설정하는 것이 가능하다.
  • Trigger 정의 시 repeatFrequency를 원하는 주기로 설정하면 된다.
    • 설정 가능한 주기로는 한 시간, 하루, 일주일 세 가지가 있다.
// ...
const trigger: TimestampTrigger = {
  type: TriggerType.TIMESTAMP,
  timestamp: alarmTime.getTime(),
  repeatFrequency: RepeatFrequency.DAILY, // 반복 주기를 설정할 수 있다
  alarmManager: true,
};

 


 

 

 

'공부 > React & React Native' 카테고리의 다른 글

React-Query 찍어먹기  (1) 2024.03.04
React Testing에 대하여  (0) 2023.11.22
[0814 ~ 0815] React-Native 강의 정리  (0) 2021.08.16
[0812~0813] React-Native 강의 정리  (0) 2021.08.14
[0811] React-Native 강의 정리  (0) 2021.08.12