안녕하세요~ 챠니입니다! :)
개인적으로 사이드 프로젝트를 진행하고 있는데요~
FCM, Firebase Push 관련 개발을 하던 중 이상한 점이 있었습니다..
그것은 바로!!
앱을 포그라운드가 아닌, 백그라운드에서 푸시 메세지를 받았을 때 HeadUp Display가 NotWorking하다는 점인데요!!
이런 멘붕..
FCM 기본적으로 테스트하는 부분에서는 정상적으로 작동을 하는것으로 보아
서버쪽에서 설정이 미흡하지 않았나 생각이 들어서 몇시간을 삽질을 시작..!
해결방법을 가지고 왔습니다!
* 안드로이드 (Android)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val importance = NotificationManager.IMPORTANCE_HIGH // 중요도 (HIGH: 상단바 표시 가능)
val channel = NotificationChannel(channelId, channelName, importance).apply {
description = channelDescription
}
notificationManager.createNotificationChannel(channel)
}
다음처럼 Android O버전이상에서 NotificationChannel을 설정해주는데요
channelId, channelName, importance 3가지 속성을 확인!
[안드로이드 부분에서 확인]
1. importance "HIGH"으로 설정되어있는지 확인
2. channelId, channelName 설정 (ex. "FcmTest")
* 서버 (API)
sendCommentRegister(deviceToken: string, title: string, body: string, postId: number) {
const androidConfig: admin.messaging.AndroidConfig = { // Android 설정
priority: 'high',
notification: {
channelId: 'FcmTest-- 여기부분을 꼭 추가!',
title,
body,
},
data: {
title: title,
contents: body,
postId: postId.toString(),
},
};
const message: admin.messaging.Message = {
notification: {
title,
body,
},
data: {
title: title,
contents: body,
postId: postId.toString(),
},
token: deviceToken,
apns: { // IOS 설정
payload: {
aps: {
postId: postId.toString()
},
},
},
android: androidConfig,
};
try {
admin.messaging().send(message);
console.log('Successfully sent FCM message:');
} catch (error) {
console.error('Error sending FCM message:', error);
}
}
[서버에서 확인] - 저는 NestJS로 API서버를 구축했습니다.
1. androidConfig에서 priority를 "HIGH" 설정
2. andrioid: androidConfig 부분에서 notification 및 data 설정
-> API → androidConfig → channelId를 Android → channelId와 일치하게 작성!
(이부분이 동일하지 않으면 백그라운드에서 HeadUpDisplay 작동 안함!)
Android, API서버의 설정이 모두 되었다면
Android 스마트폰 백그라운드 상태에서 정상적으로 작동하는지 확인하면 되겠습니다 :)
질문 또는 궁굼한 부분은 댓글을 남겨주세요! 친절하게 답변드리겠습니다!
응원의 댓글은 저에게 큰 힘이 된답니다! :)
즐거운 하루되세요!
깃허브 보러 놀러오세요 👇 (맞팔환영)
https://github.com/younminchan
'🖥 Programming > 📱 Android (Kotlin)' 카테고리의 다른 글
[Android] Android Gradle plugin requires Java 17 to run. You are currently using Java 11. 해결방법 (2) | 2024.01.08 |
---|---|
[Android] 머티리얼 디자인(Material Design) (0) | 2023.12.27 |
[Andorid][kotlin] 날짜형식 변경관련(SimpleDateFormat, getTimeZone) (2) | 2023.12.05 |
[Android] SSL Error Handler 구글 스토어 대응 (2) | 2023.11.23 |
[Android][kotlin] Fragment간 통신 방법 (0) | 2023.09.08 |
[Android] 앱 아이콘 변경 방법 (logo, icon) (2) | 2023.08.24 |
[Android][kotlin] 이미지 1:1 비율 동일하게 맞추기 (0) | 2023.08.21 |
[Android] 다크모드 비활성화 하는 방법 (0) | 2023.08.17 |