반응형
Flutter 에서 WebView를 구성한 후에 FCM 을 이용하는 과정에서 메시지가 정상적으로 호출되지 않고 원인을 찾기 위해 수정을 했던 방식
- 메인 파일 (lib/main.dart) 수정사항:
- 백그라운드 메시지 핸들러 추가:
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async { await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); print('백그라운드 메시지 수신: ${message.messageId}'); }
- FCM 권한 요청 개선:
NotificationSettings settings = await FirebaseMessaging.instance.requestPermission( alert: true, badge: true, sound: true, );
- 토큰 갱신 리스너 추가:
FirebaseMessaging.instance.onTokenRefresh.listen((String token) { print('FCM 토큰 갱신: $token'); });
- 포그라운드 메시지 핸들링 추가:
FirebaseMessaging.onMessage.listen((RemoteMessage message) { print('포그라운드 메시지 수신: ${message.messageId}'); });
- Android 설정 (AndroidManifest.xml) 수정사항:
- 필요한 권한 추가:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
- FCM 알림 클릭 시 앱 실행을 위한 인텐트 필터 추가:
<intent-filter> <action android:name="FLUTTER_NOTIFICATION_CLICK" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter>
- iOS 설정 (AppDelegate.swift) 수정사항:
- Firebase 초기화 추가:
FirebaseApp.configure()
- FCM 알림 권한 설정:
if #available(iOS 10.0, *) { UNUserNotificationCenter.current().delegate = self let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] UNUserNotificationCenter.current().requestAuthorization( options: authOptions, completionHandler: { _, _ in } ) }
- 원격 알림 등록:
application.registerForRemoteNotifications()
이러한 수정을 통해 다음과 같은 기능이 정상적으로 작동하게 되었습니다:
- 앱이 백그라운드 상태일 때도 푸시 알림 수신 가능
- 앱이 포그라운드 상태일 때 푸시 알림 수신 가능
- FCM 토큰이 갱신될 때 자동으로 감지 및 처리
- iOS와 Android 모두에서 푸시 알림 권한 요청 및 처리
- 푸시 알림 클릭 시 앱 실행 기능
이러한 설정들이 모두 제대로 구성되어 있어 FCM 푸시 알림이 정상적으로 작동하게 된 것입니다.
상세한 위치 경로
수정한 파일들의 위치를 상세히 설명해드리겠습니다:
- 메인 파일
- 위치:
lib/main.dart
- 경로: 프로젝트 루트 디렉토리의
lib
폴더 내 - 주요 수정사항:
- FCM 초기화 및 설정
- 백그라운드/포그라운드 메시지 핸들링
- 토큰 관리
- 위치:
- Android 매니페스트 파일
- 위치:
android/app/src/main/AndroidManifest.xml
- 경로: 프로젝트 루트 디렉토리의
android/app/src/main
폴더 내 - 주요 수정사항:
- FCM 관련 권한 추가
- 알림 클릭 시 앱 실행을 위한 인텐트 필터
- 위치:
- iOS AppDelegate 파일
- 위치:
ios/Runner/AppDelegate.swift
- 경로: 프로젝트 루트 디렉토리의
ios/Runner
폴더 내 - 주요 수정사항:
- Firebase 초기화
- FCM 알림 권한 설정
- 원격 알림 등록
- 위치:
파일 구조는 다음과 같습니다:
프로젝트_루트/
├── lib/
│ └── main.dart
├── android/
│ └── app/
│ └── src/
│ └── main/
│ └── AndroidManifest.xml
└── ios/
└── Runner/
└── AppDelegate.swift
각 파일의 역할:
main.dart
: Flutter 앱의 메인 진입점으로, FCM의 핵심 설정을 담당AndroidManifest.xml
: Android 플랫폼에서 필요한 권한과 설정을 정의AppDelegate.swift
: iOS 플랫폼에서 필요한 초기화와 설정을 담당
이 세 파일의 수정을 통해 FCM이 Android와 iOS 모두에서 정상적으로 작동하게 되었습니다.
반응형
'오류 log' 카테고리의 다른 글
iOS에서 Flutter Firebase 푸시 알림 충돌? APNs 오류 해결 방법 (0) | 2025.05.16 |
---|---|
mariaDB 한글 등록 시 오류 해결 _ Spring (0) | 2022.05.29 |
SPRING 어노테이션 등록 시 오류 _ ex) @service (0) | 2022.05.28 |