FCM 구현은 잘 적힌 글이 많으니 생략하겠습니다.
- 구현하고싶은 알림 화면 ( Heads-up ) push notification image

구현하는데 애먹은 부분은 안드로이드에서 FCM 을 받았을때
앱이 종료/비활성화 일때 다음과 같이 배너 알림 (혹은 heads-up 알림) 띄우기였습니다.
결론부터 말하자면 해결책은 백엔드에 있다!!
다음은 구글에서 안내하는 서버 알림 예제입니다.
기존 HTTP에서 HTTP v1로 마이그레이션 | Firebase Cloud Messaging
의견 보내기 기존 HTTP에서 HTTP v1로 마이그레이션 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. FCM의 기존 HTTP API를 사용하는 앱은 이 가이드의 안내에 따라
firebase.google.com
{
"message": {
"topic": "news",
"notification": {
"title": "Breaking News",
"body": "New news story available."
},
"data": {
"story_id": "story_12345"
},
"android": {
"notification": {
"click_action": "TOP_STORY_ACTIVITY",
"body": "Check out the Top Story"
}
},
"apns": {
"payload": {
"aps": {
"category" : "NEW_MESSAGE_CATEGORY"
}
}
}
}
}
위와 같이 예제를 따라 서버단에서 FCM 에 전송할 json을 구현했다고 가정하면,
flutter 단에서는 해당 데이터를 받아 패키지나 firebase 함수를 통해 메시지를 화면에 띄워줍니다.
Flutter단에서 필요한 작업 :
1. AndroidManifest.xml
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel_id"
android:value="high_importance_channel"
/>
2. FlutterLocalNotificationPlugin 설정
final NotificationDetails notiDetail = const NotificationDetails(
android: AndroidNotificationDetails(
'high_importance_channel',
'High Importance Notifications',
importance: Importance.high,
priority: Priority.high,
playSound: true,
enableVibration: true,
icon: "mipmap/m_logo",
),
iOS: DarwinNotificationDetails(
presentAlert: true,
presentBadge: true,
presentSound: true,
presentBanner: true,
),
);
await flutterLocalNotificationsPlugin
.resolvePlatformSpecificImplementation<AndroidFlutterLocalNotificationsPlugin>()
?.createNotificationChannel(
const AndroidNotificationChannel(
'high_importance_channel', // id
'High Importance Notifications', // title
description:
'This channel is used for important notifications.', // description
importance: Importance.high,
showBadge: true,
)
);
백엔드에서 해주어야할 작업:
{
"message": {
"topic": "news",
"notification": {
"title": "Breaking News",
"body": "New news story available."
},
"data": {
"story_id": "story_12345"
},
"android": {
"priority": "high", // 코드 추가
"notification": {
"channel_id": "high_importance_channel", // 코드 추가
"click_action": "TOP_STORY_ACTIVITY",
"body": "Check out the Top Story"
}
},
"apns": {
"payload": {
"aps": {
"category" : "NEW_MESSAGE_CATEGORY"
}
}
}
}
}
'// 코드 추가' 주석을 달아놓은 줄을 추가해주면 된다.
메시지를 전달할때 안드로이드에서 priority와 channel_id 를 추가하는 것이 중요!
'Flutter' 카테고리의 다른 글
[Flutter/iOS] InAppWebView whiteScreen / Touch Event not working / 웹뷰 흰 화면 에러 iOS 18.2+ (0) | 2025.02.10 |
---|---|
[Flutter] InAppWebView mailto: open 메일 앱으로 연동 / 열기 (0) | 2024.09.11 |
[Flutter] Android InAppWebView download / 다운로드 구현 (1) | 2024.09.10 |
[Flutter] AndroidID 확인방법 / android SSAID 확인 방법 (2) | 2024.09.10 |
[Flutter] iOS app badge count handle / iOS 배지 숫자 제어 (4) | 2024.08.30 |