본문 바로가기
🖥 Programming/📱 Android (Kotlin)

[Android][kotlin][NestJS] FCM, Firebase Background HeadUp Display not working 관련 문제 해결

by MinChan-Youn 2023. 10. 5.

안녕하세요~ 챠니입니다! :)

 

개인적으로 사이드 프로젝트를 진행하고 있는데요~

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 → channelIdAndroid → channelId와 일치하게 작성!

(이부분이 동일하지 않으면 백그라운드에서 HeadUpDisplay 작동 안함!)

 

 

 

 

 

 

 

Android, API서버의 설정이 모두 되었다면

Android 스마트폰 백그라운드 상태에서 정상적으로 작동하는지 확인하면 되겠습니다 :)

 

백그라운드 상태에서 Firebase Push - HeadUp Dispaly 작동

 

 

 

 

 

 

 

질문 또는 궁굼한 부분은 댓글을 남겨주세요! 친절하게 답변드리겠습니다!

응원의 댓글은 저에게 큰 힘이 된답니다! :)

즐거운 하루되세요!

 

깃허브 보러 놀러오세요 👇 (맞팔환영)

https://github.com/younminchan

 

younminchan - Overview

안드로이드 2년차 개발자 •⚽️/🎤/🥁/🖥/🏃‍♂️/🚴‍♂️/🤟 TechBlog⬇️ minchanyoun.tistory.com - younminchan

github.com