React & React Native/라이브러리 활용

[RN] React Native Notification 푸시 메시지 예약 발송 활용하기 : Notifee Trigger

adjh54 2024. 2. 24. 01:11
반응형
해당 글에서는 Notifee 라이브러리를 이용하여 예약 발송 방법에 대해 이를 활용하는 방법에 대해 알아봅니다.






💡 [참고] FCM 관련해서 구성 내용에 대해 궁금하시면 아래의 글을 참고하시면 도움이 됩니다.
분류 링크
FCM Spirng Boot API 구성 : 단순 전송 기능 https://adjh54.tistory.com/432
FCM React Native 초기 환경 설정 https://adjh54.tistory.com/431
FCM React Native Notifee 메시지 수신 구성 https://adjh54.tistory.com/4333
FCM React Natiive Notifee 메시지 전송 및 예약 발송 구성 https://adjh54.tistory.com/434

 

 

 

 

1) Notifee


💡 Notifee

- React Native와 Firebase의 통합하기 위해 권장되는 오픈소스 라이브러리입니다.

- React Native Firebase를 사용하면 FCM과 쉽게 통합하고 Notifee로 알림을 표시할 수 있습니다.
 

Firebase Cloud Messaging (FCM) | Notifee

Integrate Firebase Cloud Messaging and display notifications with Notifee. Firebase Cloud Messaging (FCM) is a messaging solution that lets you reliably send messages at no cost to both Android & iOS devices. Using FCM, you can send data payloads (via a me

notifee.app

 

 

 

 

2) Notifee Trigger


💡 Notifee Trigger

- 알림을 예약하고 조건에 따라 알림을 발생시키는 기능을 제공합니다.
- 특정 시간 또는 일정 간격에 알림을 보나 거나, 특정 위치에 도착하거나 떠날 때 알림을 보낼 수 있습니다.
 

Triggers | Notifee

Understand how to use triggers to create notifications that fire under specific conditions. Triggers can be used to display notifications in-advance when a specific condition is met such as time. For example, you may wish to notify your user when they have

notifee.app

 

 

1. 처리과정


💡 처리과정

- 내 자신의 예약 알람을 만들어 두는 과정을 나타내는 예시입니다.


1. A Mobile → 앱 실행
- A Mobile에서 최초 앱을 실행합니다.


2. 앱 실행 → 구독 리스너 등록 : messaging(). onMessage()
- 앱이 실행될 때 구독 리스너를 최초 등록합니다. 해당 구독 리스너는 Notification 알람을 받기 위한 수신 리스너입니다.


3. 특정 동작 수행 시 트리거 호출 : createTiggerAlarm()
- 버튼을 터치하였을 때 createTiggerAlarm() 함수가 호출되며 트리거 처리가 이루어집니다.


4. 채널 생성 : notifee.createChannel()
- 알림을 보내기 위해 필요한 통신 채널을 설정하기 위해 Notifee Trigger에서 채널을 생성합니다. 이 채널은 특정 알림의 전달 방식과 동작을 정의하는 데 사용됩니다.


5. 트리거 구성: TimestampTrigger
- 알람을 보내기 위한 시간등을 정의하는 트리거를 구성합니다.


6. 특정 시간에 트리거 알람 생성 : notifee.createTriggerNotification()
생성한 채널과 트리거를 통하여 실제 트리거를 발생시킵니다.


7. 특정 시간 경과
- 트리거에 지정한 특정시간 경과가 지났을 때 알람 메시지가 출력됩니다.


8. 구독 리스너 수신 : messaging().onMessage()
- 트리거가 발생함에 따라 구독 리스너로 구성한 displayNotification()가 수행이 됩니다.


9. 알람 전송
- 디바이스에 알람이 전송되어 화면상에 보입니다.

 

 

 

2. 주요 기능


주요 기능 설명
트리거 알람 생성(특정 시간) 특정 시간에 트리거를 생성하여 특정 시간에 푸시 알람이 전송됩니다
트리거 알람 생성(반복) 특정 시간에 대해 일, 주, 월 단위로 알람의 반복을 지정하여 푸시 알람이 전송됩니다
트리거 알람 생성(특정 간격) 현재 시간을 기준으로 시간, 분 마다 알람이 반복되도록 지정하여 푸시 알람이 전송됩니다.
트리거 알람 조회 생성된 트리거 목록을 조회합니다.(트리거 아이디 값들을 반환합니다)
트리거 알람 취소 생성된 트리거를 취소하여 푸시 알람을 회수합니다.
트리거 알람 업데이트 이미 설정된 트리거를 변경하여 푸시 알람을 변경합니다.

 

 

 

 

3) Notifee Trigger 활용


 

1. 초기 설정 & 라이브러리 추가


# Install & setup the app module
$ yarn add @react-native-firebase/app

# Install the messaging module
$ yarn add @react-native-firebase/messaging

# local Notification
$ yarn add @notifee/react-native

 

 

💡 [참고] 초기 설정에 대해 궁금하시면 아래의 링크를 참고하시면 도움이 됩니다.
 

[RN] React Native Firebase Cloud Message(FCM) 이해 및 환경설정, 간단 테스트: Android

해당 글에서는 Firebase Cloud Message(FCM)에 대해 이해하고 환경을 구성하며 메시지를 수신하는 형태를 테스트하는 환경 구성 방법에 대해 이해를 돕기 위해 작성하였습니다. 1) FCM(Firebase Cloud Message)

adjh54.tistory.com

 

 

 

 

2. 트리거 알람 생성(특정 시간)


💡 트리거 알람 생성(특정 시간)

- 지정한 특정 시간에 트리거를 수행하여 푸시 메시지가 오도록 구성하는 예시입니다.


1. Date.now() 함수를 통해서 현재 시간을 가져와서 현재 시간 기준으로 이후 시간으로 알람을 정합니다.

2. createChannel() 메서드를 통해 채널을 생성합니다.

3. TimestampTrigger를 통해 지정한 시간을 객체로 만듭니다.

4. createTriggerNotification() 메서드를 통해 지정한 알람시간에 메시지를 받습니다. 처리 이후 트리거 아이디를 반환받습니다.
/**
 * 트리거 알람 생성(특정 시간)합니다.
 */
createTiggerAlarm: async () => {
    console.log("[+] 1분 뒤 알람을 생성하였습니다.")

    // 트리거 알람 시간 설정
    const date = new Date(Date.now());
    date.setMinutes(date.getMinutes() + 1);
    date.setSeconds(0);

    // 채널 생성
    const channelId = await notifee.createChannel({
        id: 'default',
        name: 'Default Channel',
    });

    console.log("[+] 채널이 생성되었습니다. :", channelId)

    // 트리거 생성
    const trigger: TimestampTrigger = {
        type: TriggerType.TIMESTAMP,
        timestamp: date.getTime(), // 현재 시간 기준 1분뒤 알람 설정
    };

    // 트리거 생성 후 지정한 시간에 푸시 메시지 알람. : 결과 값으로 트리거 아이디를 반환받습니다.
    const _triggerId = await notifee.createTriggerNotification(
        {
            title: '미팅이 1분뒤에 있습니다',
            body: `Today at ${cvtDateHandler.getHourMin(date)}`,
            android: {
                channelId: channelId,
            },
        },
        trigger,
    );
    setTriggerId(_triggerId)
    console.log("생성된 triggerId ::" + _triggerId)
},

 

💡 [참고] 해당 함수에서 사용된 중 메서드와 주요 속성입니다.
메서드 설명
createChannel() 새로운 알림 채널을 생성합니다.
createTriggerNotification() 예약된 알림을 발생시킬 트리거를 생성합니다.

 

주요 속성 설명 속성 값
IntervalTrigger 일정 시간 간격으로 알림을 발생시키는 데 사용되는 속성 시간, 분, 초
TimestampTrigger 특정 시간에 알림을 발생시키는 데 사용되는 속성 시간
TriggerType 알림 트리거의 유형을 나타내는 속성 INTERVAL(일정 간격), TIMESTAMP(특정 시간)
 

Reference | Notifee

Notifee provides Reference documentation for all publicly available APIs. The public JavaScript API for React Native is written with TypeScript. The Notifee reference documentation is automatically generated to provide users with further detail into the fu

notifee.app

 

 

 

3. 트리거 알람 생성(반복)


💡 트리거 알람 생성(반복)

- 일, 주, 월 단위에 특정 시간 반복되는 트리거 알람을 생성하는 예시입니다. 해당 예시에는 매일 17시에 알람이 전송되도록 구성하였습니다.



1. Date.now() 함수를 통해서 현재 시간을 가져와서 현재 시간 기준으로 이후 시간으로 알람을 정합니다.

2. createChannel() 메서드를 통해 채널을 생성합니다.

3. TimestampTrigger를 통해 지정한 시간을 객체로 만듭니다.

 

 

💡 해당 부분에서 repeatFrequency 속성을 RepeatFrequency.DAILY로 지정하여 매일 반복되도록 구성하였습니다.

- createTriggerNotification() 메서드를 통해 지정한 알람시간에 메시지를 받습니다. 처리 이후 트리거 아이디를 반환받습니다.
/**
 * 일정 시간 반복 트리거 알림을 생성합니다.
 */
createRepeatTiggerAlarm: async () => {
    console.log("[+] 매일 오후 5시의 알람을 생성하였습니다.")

    const date = new Date(Date.now());
    date.setHours(17)
    date.setMinutes(0);
    date.setSeconds(0);

    // 채널 생성
    const channelId = await notifee.createChannel({
        id: 'default',
        name: 'Default Channel',
    });

    console.log("[+] 채널이 생성되었습니다. :", channelId)

    const trigger: TimestampTrigger = {
        type: TriggerType.TIMESTAMP,
        timestamp: date.getTime(),
        repeatFrequency: RepeatFrequency.DAILY,
    };

    const _triggerId = await notifee.createTriggerNotification(
        {
            title: '매일 17:00에 미팅이 있습니다.',
            body: '주간보고 미팅',
            android: {
                channelId: channelIdInfo,
            },
        },
        trigger,
    );

    setTriggerId(_triggerId)
    console.log("생성된 triggerId ::" + _triggerId)
},

 

 

💡 [참고] 해당 함수에서 사용된 중 메서드와 주요 속성입니다.
메서드 설명
createChannel() 새로운 알림 채널을 생성하는데 사용되는 메서드입니다.
createTriggerNotification() 예약된 알림을 발생시킬 트리거를 생성하는데 사용되는 메서드입니다.

 

 

속성 설명 속성 값
IntervalTrigger 일정 시간 간격으로 알림 발생 속성 시간, 분, 초
TimestampTrigger 특정 시간에 알림 발생 속성 특정 시간
TriggerType 알림 트리거의 유형 속성 INTERVAL (일정 간격 알림), TIMESTAMP (특정 시간 알림)
RepeatFrequency 알림 반복 빈도 속성 DAILY (매일), HOURLY (매시간), WEEKLY (매주), NONE

 

 

Reference | Notifee

Notifee provides Reference documentation for all publicly available APIs. The public JavaScript API for React Native is written with TypeScript. The Notifee reference documentation is automatically generated to provide users with further detail into the fu

notifee.app

 

 

 

4. 트리거 알람 생성(특정 간격)


💡 트리거 알람 생성(특정 간격)

- 해당 예시에서는 현재 시간 기준으로 30분마다 푸시 메시지가 전송되도록 구성하였습니다.



1. createChannel() 메서드를 통해 채널을 생성합니다.

2. IntervalTrigger를 통해 지정한 시간을 객체로 만듭니다.

3. Interval 속성을 30으로 지정하고 timeUnit 속성을 TimeUnit.MINUTES로 지정하여 30분마다 반복되도록 구성하였습니다.

4. createTriggerNotification() 메서드를 통해 지정한 알람시간에 메시지를 받습니다. 처리 이후 트리거 아이디를 반환받습니다.
/**
 * 현재 시간 기준 일정 기간(시간, 분, 초) 반복 트리거 알람을 생성합니다.
 */
createIntervalTriggerAlarm: async () => {
    console.log("[+] 현재 시간 기준 30분 마다 알람을 생성하였습니다.")

    // 채널 생성
    const channelId = await notifee.createChannel({
        id: 'default',
        name: 'Default Channel',
    });

    console.log("[+] 채널이 생성되었습니다. :", channelId)

    const trigger: IntervalTrigger = {
        type: TriggerType.INTERVAL,
        interval: 30,
        timeUnit: TimeUnit.MINUTES
    };

    const triggerId = await notifee.createTriggerNotification(
        {
            title: '30분 마다 물 마실 시간입니다.',
            body: '건강을 위해 30분 마다 물을 마셔야합니다.',
            android: {
                channelId: channelIdInfo,
            },
        },
        trigger,
    );

    console.log("triggerId ::" + triggerId)
},

 

 

💡 [참고] 알람의 경우 최소 15분 이상이 되어야 하는 것 같습니다. 아니면 아래와 같은 오류가 발생합니다.

 

💡 [참고] 해당 함수에서 사용된 중 메서드와 주요 속성입니다.
속성 설명 속성값
IntervalTrigger 일정 시간 간격으로 알림을 발생시키는 속성 시간, 분, 초
TimestampTrigger 특정 시간에 알림을 발생시키는 속성 특정 시간
TriggerType 알림 트리거의 유형 속성 INTERVAL (일정 간격 알림), TIMESTAMP (특정 시간 알림)
RepeatFrequency 알림 반복 빈도 속성 DAILY (매일), HOURLY (매시간), NONE, WEEKLY (매주)
TimeUnit 시간 단위 속성 DAYS, HOURS, MINUTES, SECONDS
 

Reference | Notifee

Notifee provides Reference documentation for all publicly available APIs. The public JavaScript API for React Native is written with TypeScript. The Notifee reference documentation is automatically generated to provide users with further detail into the fu

notifee.app

 

 

 

5. 트리거 알람 조회


💡 트리거 알람 조회

- 해당 예시에서는 보류 중인 trrigger 목록을 조회합니다.



1. getTriggerNotificationIds() 메서드를 통해 보류 중인 triggerId 목록들을 조회합니다.

2. getTriggerNotifications() 메서드를 통해 보류 중인 Notification 목록을 조회합니다.
/**
 * 트리거의 아이디 또는 Notification 정보 목록을 조회합니다.
 */
searchTriggerAlram: async () => {
    console.log("[+] 보류 중인 트리거 아이디 혹은 알람 정보를 조회합니다.")

    const triggerIds = await notifee.getTriggerNotificationIds();
    console.log("triggerIds :: ", triggerIds);

    const notifications = await notifee.getTriggerNotifications();
    console.log("notifications :: ", notifications)
},

 

 

💡 아래와 같이 triggerId 값을 반환받거나 Notification 정보를 반환받습니다.

 

 

💡 [참고] 해당 함수에서 사용된 중 메서드와 주요 속성입니다.
메서드 설명
getTriggerNotificationIds 보류 중인 트리거 알림의 ID를 반환하는 메서드
getTriggerNotifications 현재 설정된 모든 트리거 알림의 정보를 반환하는 메서드
 

Reference | Notifee

Notifee provides Reference documentation for all publicly available APIs. The public JavaScript API for React Native is written with TypeScript. The Notifee reference documentation is automatically generated to provide users with further detail into the fu

notifee.app

 

 

 

6. 트리거 알람 취소


💡 트리거 알람 취소

- 트리거 알람 취소는 모두 취소를 하는 방법이나 트리거 아이디를 기반으로 특정 알람에 대해서 취소가 가능한 예시입니다.


1. cancleTriggerAlarm() 메서드의 경우는 state에 저장된 triggerId 값을 가져와서 트리거 알람을 취소하는 기능을 수행합니다.

2. cancleAllTriggerAlarm() 메서드의 경우는 전체 트리거 알람을 조회하여 아이디 값을 기반으로 모든 트리거 알람을 취소하는 기능을 수행합니다.
/**
 * 트리거 아이디를 기반으로 트리거 알람을 취소합니다.
 */
cancleTriggerAlarm: async () => {
    console.log("[+] 단건의 트리거를 취소합니다.")
    await notifee.cancelNotification(notificationId);
},

/**
 * 현재 디바이스 추가된 트리거 알람을 모두 제거합니다.
 */
cancleAllTriggerAlarm: async () => {
    console.log("[+] 모든 트리거 알람을 취소합니다.")

    // 모든 트리거 아이디를 가져옵니다.
    const triggerIds = await notifee.getTriggerNotificationIds();
    console.log("triggerIds :: ", triggerIds);

    // 모든 트리거 알람을 제거합니다.
    await notifee.cancelAllNotifications(triggerIds);
},

 

 

💡 아래와 같이 단건의 트리거가 취소됨을 확인할 수 있습니다.

 

💡 아래와 같이 모든 트리거가 삭제됨을 확인할 수 있습니다.

 

 

💡 [참고] 해당 함수에서 사용된 중 메서드와 주요 속성입니다.
주요 메서드 설명
getTriggerNotificationIds() 보류 중인 트리거 알림의 ID를 반환하는 메서드
cancelNotification() 지정된 ID를 가진 알림을 취소하는 메서드
getTriggerNotificationIds() 보류 중인 트리거의 알림 정보를 반환하는 메서드
 

Reference | Notifee

Notifee provides Reference documentation for all publicly available APIs. The public JavaScript API for React Native is written with TypeScript. The Notifee reference documentation is automatically generated to provide users with further detail into the fu

notifee.app

 

 

 

7. 트리거 알람 업데이트


💡 트리거 알람 업데이트

- 기존 트리거 생성과 동일한 createTriggerNotification() 메서드를 사용합니다. 단, 해당 메서드의 파라미터로 id 값을 이전에 생성된 triggerId로 사용하여 트리거 알람을 업데이트합니다.


1. Date.now() 함수를 통해서 현재 시간을 가져와서 현재 시간 기준으로 이후 시간으로 알람을 정합니다.
- 해당 부분에 변경하려는 시간을 추가하였습니다.

2. createChannel() 메서드를 통해 채널을 생성합니다. TimestampTrigger를 통해 지정한 시간을 객체로 만듭니다.

- createTriggerNotification() 메서드를 통해 지정한 알람시간에 메시지를 받습니다. 처리 이후 트리거 아이디를 반환받습니다.
- 해당 부분에서 일반 Notification() 생성의 경우 id 속성이 포함되지 않았지만, 해당 업데이트의 경우는 id를 기존에 있는 트리거 아이디로 가져와서 이를 수정합니다.
- 해당 id가 존재하지 않으면 Notification이 추가됩니다.
/**
 * 트리거 아이디 값을 기반으로 트리거 알람을 변경합니다.
 */
updateTriggerAlarm: async () => {

    console.log("[+] 특정 트리거를 수정합니다.")

    console.log("[+] 변경하려는 triggerId :: ", triggerId)

    // 트리거 알람 시간 설정
    const date = new Date(Date.now());
    date.setMinutes(date.getMinutes() + 1);
    date.setSeconds(0);

    // 채널 생성
    const channelId = await notifee.createChannel({
        id: 'default',
        name: 'Default Channel',
    });

    console.log("[+] 채널이 생성되었습니다. :", channelId)

    // 트리거 생성
    const trigger: TimestampTrigger = {
        type: TriggerType.TIMESTAMP,
        timestamp: date.getTime(), // 현재 시간 기준 1분뒤 알람 설정
    };

    // 트리거 생성 후 지정한 시간에 푸시 메시지 알람. : 결과 값으로 트리거 아이디를 반환받습니다.
    const _triggerId = await notifee.createTriggerNotification(
        {
            id: triggerId,                  // 해당 값을 기반으로 트리거를 변경합니다.
            title: '미팅이 1분뒤에 있습니다(변경!)',
            body: `Today at ${cvtDateHandler.getHourMin(date)}`,
            android: {
                channelId: channelId,
            },
        },
        trigger,
    );

    console.log("triggerId ::" + _triggerId)

}

 

 

 

 

4) Notifee Trigger 활용 종합


💡 Notifee Trigger 활용 종합

- 위에서 활용한 내용을 공통되는 부분을 정리하여 최종 정리한 소스코드입니다.
import { useEffect, useState } from "react";
import { Text, TouchableHighlight, View } from "react-native"
import messaging from '@react-native-firebase/messaging';
import notifee, { IntervalTrigger, RepeatFrequency, TimestampTrigger, TimeUnit, TriggerType } from '@notifee/react-native';

const NotificationScreen = () => {

    const [triggerId, setTriggerId] = useState("");
    const [channelIdInfo, setChannelIdInfo] = useState<string>("");
    const [notificationId, setNotificationId] = useState("");

    useEffect(() => {
        initSetting();

        const subscribeForeground = messaging().onMessage(onMessageReceived);

        return () => {
            subscribeForeground;
        }
    }, []);

    /**
     * 최초 채널을 생성하여 state에 저장합니다.
     */
    const initSetting = async () => {
        const channelId = await notifee.createChannel({
            id: 'default',
            name: 'Default Channel',
        });
        console.log("[+] 채널이 생성되었습니다. :", channelId)
        setChannelIdInfo(channelId);
    }

    /**
     * FCM 메시지 수신 리스너를 등록합니다. (Foreground, Background 상태)
     * @param message 
     */
    const onMessageReceived = async (message) => {

        const { title, body } = message.notification!;
        const messageId = message.messageId;

        setNotificationId(messageId);

        console.log(message)
        // 디바이스에 알림을 표시합니다.
        await notifee.displayNotification({
            title: title,
            body: body,
            android: {
                channelId: channelIdInfo,
                smallIcon: 'ic_launcher',
            },
        });
    }

    /** 
     * 트리거 알람을 통한 처리 핸들러 
    */
    const triggerAlarmHandler = (() => {

        return {

            /**
             * 트리거 알람 생성(특정 시간)합니다.
             */
            createTiggerAlarm: async () => {
                console.log("[+] 1분 뒤 알람을 생성하였습니다.")

                // 트리거 알람 시간 설정
                const date = new Date(Date.now());
                date.setMinutes(date.getMinutes() + 1);
                date.setSeconds(0);

                // 트리거 생성
                const trigger: TimestampTrigger = {
                    type: TriggerType.TIMESTAMP,
                    timestamp: date.getTime(), // 현재 시간 기준 1분뒤 알람 설정
                };

                // 트리거 생성 후 지정한 시간에 푸시 메시지 알람. : 결과 값으로 트리거 아이디를 반환받습니다.
                const _triggerId = await notifee.createTriggerNotification(
                    {
                        title: '미팅이 1분뒤에 있습니다',
                        body: `Today at ${cvtDateHandler.getHourMin(date)}`,
                        android: {
                            channelId: channelIdInfo,
                        },
                    },
                    trigger,
                );
                setTriggerId(_triggerId)
                console.log("생성된 triggerId ::" + _triggerId)
            },

            /**
             * 일정 시간 반복 트리거 알림을 생성합니다.
             */
            createRepeatTiggerAlarm: async () => {
                console.log("[+] 매일 오후 5시의 알람을 생성하였습니다.")

                const date = new Date(Date.now());
                date.setHours(17)
                date.setMinutes(0);
                date.setSeconds(0);

                const trigger: TimestampTrigger = {
                    type: TriggerType.TIMESTAMP,
                    timestamp: date.getTime(),
                    repeatFrequency: RepeatFrequency.DAILY,
                };

                const _triggerId = await notifee.createTriggerNotification(
                    {
                        title: '매일 17:00에 미팅이 있습니다.',
                        body: '주간보고 미팅',
                        android: {
                            channelId: channelIdInfo,
                        },
                    },
                    trigger,
                );

                setTriggerId(_triggerId)
                console.log("생성된 triggerId ::" + _triggerId)
            },

            /**
             * 현재 시간 기준 일정 기간(시간, 분, 초) 반복 트리거 알람을 생성합니다.
             */
            createIntervalTriggerAlarm: async () => {
                console.log("[+] 현재 시간 기준 30분 마다 알람을 생성하였습니다.")

                const trigger: IntervalTrigger = {
                    type: TriggerType.INTERVAL,
                    interval: 1,
                    timeUnit: TimeUnit.MINUTES
                };

                const triggerId = await notifee.createTriggerNotification(
                    {
                        title: '30분 마다 물 마실 시간입니다.',
                        body: '건강을 위해 30분 마다 물을 마셔야합니다.',
                        android: {
                            channelId: channelIdInfo,
                        },
                    },
                    trigger,
                );

                console.log("triggerId ::" + triggerId)
            },
            /**
             * 트리거의 아이디 또는 Notification 정보 목록을 조회합니다.
             */
            searchTriggerAlram: async () => {
                console.log("[+] 보류 중인 트리거 아이디 혹은 알람 정보를 조회합니다.")

                const triggerIds = await notifee.getTriggerNotificationIds();
                console.log("triggerIds :: ", triggerIds);

                const notifications = await notifee.getTriggerNotifications();
                console.log("notifications :: ", notifications)
            },

            /**
             * 트리거 아이디를 기반으로 트리거 알람을 취소합니다.
             */
            cancleTriggerAlarm: async () => {
                console.log("[+] 단건의 트리거를 취소합니다.")
                await notifee.cancelNotification("Rq5PfQ1e1VkV6wnwQMW0");
            },

            /**
             * 현재 디바이스 추가된 트리거 알람을 모두 제거합니다.
             */
            cancleAllTriggerAlarm: async () => {
                console.log("[+] 모든 트리거 알람을 취소합니다.")

                // 모든 트리거 아이디를 가져옵니다.
                const triggerIds = await notifee.getTriggerNotificationIds();
                console.log("triggerIds :: ", triggerIds);

                // 모든 트리거 알람을 제거합니다.
                await notifee.cancelAllNotifications(triggerIds);
            },

            /**
             * 트리거 아이디 값을 기반으로 트리거 알람을 변경합니다.
             */
            updateTriggerAlarm: async () => {

                console.log("[+] 특정 트리거를 수정합니다.")

                console.log("[+] 변경하려는 triggerId :: ", triggerId)

                // 트리거 알람 시간 설정
                const date = new Date(Date.now());
                date.setMinutes(date.getMinutes() + 1);
                date.setSeconds(0);

                // 트리거 생성
                const trigger: TimestampTrigger = {
                    type: TriggerType.TIMESTAMP,
                    timestamp: date.getTime(), // 현재 시간 기준 1분뒤 알람 설정
                };

                // 트리거 생성 후 지정한 시간에 푸시 메시지 알람. : 결과 값으로 트리거 아이디를 반환받습니다.
                const _triggerId = await notifee.createTriggerNotification(
                    {
                        id: triggerId,                  // 해당 값을 기반으로 트리거를 변경합니다.
                        title: '미팅이 1분뒤에 있습니다(변경!)',
                        body: `Today at ${cvtDateHandler.getHourMin(date)}`,
                        android: {
                            channelId: channelIdInfo,
                        },
                    },
                    trigger,
                );

                console.log("triggerId ::" + _triggerId)

            }

        }
    })();

    /** 
     * DATE 타입을 입맛에 맞게 변경하는 Handler
    */
    const cvtDateHandler = (() => {
        return {

            getDate: (date: Date) => {
                const hours = date.getHours();
                const minutes = "0" + date.getMinutes();
                const seconds = "0" + date.getSeconds();
                return hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);
            },
            getHourMin: (date: Date) => {
                const hours = date.getHours();
                const minutes = date.getMinutes();

                return `${hours}시 ${minutes}분`
            }

        }

    })();

    return (
        <>
            <View style={{ marginBottom: 30 }}></View>

            <View style={{ margin: 20 }}>
                <TouchableHighlight onPress={triggerAlarmHandler.createTiggerAlarm} style={{ borderWidth: 1, borderColor: "black" }}>
                    <Text>트리거 알람 만들기  </Text>
                </TouchableHighlight>
            </View>

            <View style={{ margin: 20 }}>
                <TouchableHighlight onPress={triggerAlarmHandler.createRepeatTiggerAlarm} style={{ borderWidth: 1, borderColor: "black" }}>
                    <Text>특정 시간 반복 트리거 알람 만들기  </Text>
                </TouchableHighlight>
            </View>

            <View style={{ margin: 20 }}>
                <TouchableHighlight onPress={triggerAlarmHandler.createIntervalTriggerAlarm} style={{ borderWidth: 1, borderColor: "black" }}>
                    <Text>특정 기간 반복 트리거 알람 만들기  </Text>
                </TouchableHighlight>
            </View>

            <View style={{ margin: 20 }}>
                <TouchableHighlight onPress={triggerAlarmHandler.searchTriggerAlram} style={{ borderWidth: 1, borderColor: "black" }}>
                    <Text>현재 알람 목록 </Text>
                </TouchableHighlight>
            </View>

            <View style={{ margin: 20 }}>
                <TouchableHighlight onPress={triggerAlarmHandler.cancleAllTriggerAlarm} style={{ borderWidth: 1, borderColor: "black" }}>
                    <Text>단건 알람 삭제</Text>
                </TouchableHighlight>
            </View>

            <View style={{ margin: 20 }}>
                <TouchableHighlight onPress={triggerAlarmHandler.updateTriggerAlarm} style={{ borderWidth: 1, borderColor: "black" }}>
                    <Text>트리거 알람 변경하기  </Text>
                </TouchableHighlight>
            </View>
        </>
    )

}
export default NotificationScreen

 

 

 

 

 

 

오늘도 감사합니다. 😀

 

 

 

 

반응형