반응형
앱 기능을 위해 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,
},
},
}
적용 한 뒤로는 아직까진 누락되지 않았다.
반응형
'etc' 카테고리의 다른 글
블로그 이사 준비 - NAS + jekyll (0) | 2024.12.03 |
---|---|
[Flutter/Dart] dart의 기본적인 구조, UI가 그려지는 과정 정리 (0) | 2024.11.26 |
안드로이드 스튜디오, Flutter _key.jks, key.properties 위치 관련 (0) | 2024.11.23 |
[git] git actions에서 .env, secrets, 환경 변수 사용하기 (0) | 2024.06.12 |
[github/discord] 깃 헙 디스코드 웹 훅 연결 / github discord Webhooks / 400 error (0) | 2024.06.12 |