| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
- 삽질로그
- 프로그래머스
- ARRANGEMENT
- memory leak
- JetpackCompose
- java
- Inner Class
- 구현
- broadcastAsUser
- Android
- NextPermutaion
- hidden-api
- compose
- programmers
- FCM
- BFS
- 알고리즘
- Alignment
- Today
- Total
undefined
[ANDROID] 백그라운드 상태에서 fcm메시지 알림 띄워주기 본문
fcm 기능을 구현하면서 공식문서의 애매한 설명때문에 많은 시간을 날린? 나를 위해 구현했던 방법을 간략하게 정리해보려고 한다.
FCM 메시지 유형
fcm은 알림 메시지(notification)과, 데이터 메시지(data) 두 가지를 지원한다.
공식문서에는 이 두 메시지의 차이를 이렇게 설명한다.

요약하자면, 메시지를 보낼 때 넘길수 있는 값은 "notification", "data"가 있는데, 앱이 백그라운드에 있는 경우 "notification"만 넘기거나, "notification" 과 "data"를 모두 넘기는 경우에는 onMessageReceived()가 호출되지 않는다 는 얘기다. (이걸 제대로 읽었어야 했다)
나는 백그라운드에서도 받은 데이터를 가지고 알림을 띄워주어야 했기 때문에 fcm메시지를 받을 경우 onMessageReceived()가 호출되어야 했다.
그렇기 때문에 데이터 페이로드만 넘겨주어야 했다.
결과
결론부터 말하자면 "data" 만 넘겨 준 경우 백그라운드에서도 노티가 잘 뜬다.

이 방법을 테스트 해보기 위해 몇가지 방법을 시도했다.
Firebase Cloud Messaging API(V1)
기존 방법은 굉장히 간단한 편이기 때문에 넘기고, 구글에서 권장하는 방법으로 테스트 해보기로 했다.

{
"message": {
"token": "{디바이스 토큰값}",
"data": {
"title": "test title",
"body": "test body",
"other": " ~~~~~ "
}
}
}
이 테스트를 해 보려면 디바이스 토큰값, 프로젝트 아이디, gcloud Auth token이 필요하다.
FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
if (task.isSuccessful) {
// 할 작업
return@OnCompleteListener
}
})
{Authorization=토큰값} // 이런 형태로 출력됨.
위 코드를 실행해서 로그로 디바이스 토큰값을 확인하고 파이어 베이스 프로젝트 설정 창에서 id를 가져왔다.
마지막으로 OAuth id를 만들어서 서비스 엑세스 토큰을 받아 사용했다.


위와 동일하게 python코드로도 테스트를 해봤다.
서비스 계정 탭에서 FirebaseAdmin SDK의 하단에 비공개 키 생성을 해서 받은 파일을 코드에 넣어주었다.
def fcm_test():
cred = credentials.Certificate("서비스 계정 키 파일.json")
firebase_admin.initialize_app(cred)
registration_token = "~~~~~~"
message = messaging.Message(
data={
"title": "test data title",
"body": "test data body",
"others": " ~~~ "
},
token=registration_token,
)
response = messaging.send(message)
print('Successfully sent message:', response)

'삽질로그' 카테고리의 다른 글
| [Android] 중첩된 뷰가 닫히지 않을 때 (0) | 2023.09.10 |
|---|