etc

[FCM] node.js fcm 알림 지연 누락 현상, 우선순위 설정

냐옹멍멍 2024. 11. 28. 14:07
반응형

앱 기능을 위해 node환경에서 fcm을 사용 중인데,
테스트를 위해 알림을 보내면 여러개를 보내도 하나만 도착 하는 현상이 발생됐다.

지연 된 것인지 누락 된 것인지 확인은 못했지만
관련 현상을 찾던 중, 우선순위 관련 옵션을 알게됐다.

우선순위

FCM 메시지에서 우선순위는 "high""normal" 두 가지로 설정할 수 있다.

각 우선순위의 기능은 다음과 같다.

high:

  • 즉시 전송되고 디바이스가 절전 상태라도 깨워서 처리.
  • 주로 즉각적인 사용자 알림(예: 채팅 메시지, 긴급 알림)에 사용.
  • 배터리 소모가 조금 더 클 수 있음.

normal:

  • 디바이스가 절전 상태이면 네트워크 연결을 기다렸다가 전송.
  • 주로 백그라운드 데이터 업데이트(예: 비긴급 데이터 동기화)에 사용.
  • 디바이스 배터리 및 네트워크 자원을 절약.

코드

/**
 * 푸시 알림을 특정 토픽으로 전송하는 함수
 * @param {string} topic - 전송할 토픽
 * @param {string} title - 알림 제목
 * @param {string} body - 알림 내용
 * @returns {Promise<string>} - 메시지 전송 결과
 */
async function sendPushNotificationToTopic(topic, title, body, image) {
    
    const message = {
        notification: {
            title: title,
            body: body,
            image: image
        },
        android: {
            priority: 'high'
        },
        topic: topic,
    };

    try {
        const response = await messaging.send(message);
        console.log('메시지 전송 성공:', response);
        return response;
    } catch (error) {
        console.error('메시지 전송 실패:', error.code, error.message);
        if (error.code === 'messaging/invalid-argument') {
            console.error('잘못된 메시지 형식:', message);
        } else if (error.code === 'messaging/authentication-error') {
            console.error('Firebase 인증 오류');
        }
        throw error;
    }
}

 

ios의 경우 아래 옵션을 사용한다.

apns: {
  headers: {
    'apns-priority': '10', // 높은 우선순위
  },
  payload: {
    aps: {
      'content-available': 1,
    },
  },
}

 

적용 한 뒤로는 아직까진 누락되지 않았다.

반응형