본문 바로가기
오류 log

Flutter WebView에서 FCM 푸시 메시지가 안올 때? 실전 해결 과정 공유!

by Alan__kang__morlang 2025. 5. 13.
반응형

Flutter 에서 WebView를 구성한 후에 FCM 을 이용하는 과정에서 메시지가 정상적으로 호출되지 않고 원인을 찾기 위해 수정을 했던 방식

  1. 메인 파일 (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}'); });
  2. 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>
  3. 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()

이러한 수정을 통해 다음과 같은 기능이 정상적으로 작동하게 되었습니다:

  1. 앱이 백그라운드 상태일 때도 푸시 알림 수신 가능
  2. 앱이 포그라운드 상태일 때 푸시 알림 수신 가능
  3. FCM 토큰이 갱신될 때 자동으로 감지 및 처리
  4. iOS와 Android 모두에서 푸시 알림 권한 요청 및 처리
  5. 푸시 알림 클릭 시 앱 실행 기능

이러한 설정들이 모두 제대로 구성되어 있어 FCM 푸시 알림이 정상적으로 작동하게 된 것입니다.

 


 

상세한 위치 경로

수정한 파일들의 위치를 상세히 설명해드리겠습니다:

  1. 메인 파일
    • 위치: lib/main.dart
    • 경로: 프로젝트 루트 디렉토리의 lib 폴더 내
    • 주요 수정사항:
      • FCM 초기화 및 설정
      • 백그라운드/포그라운드 메시지 핸들링
      • 토큰 관리
  2. Android 매니페스트 파일
    • 위치: android/app/src/main/AndroidManifest.xml
    • 경로: 프로젝트 루트 디렉토리의 android/app/src/main 폴더 내
    • 주요 수정사항:
      • FCM 관련 권한 추가
      • 알림 클릭 시 앱 실행을 위한 인텐트 필터
  3. iOS AppDelegate 파일
    • 위치: ios/Runner/AppDelegate.swift
    • 경로: 프로젝트 루트 디렉토리의 ios/Runner 폴더 내
    • 주요 수정사항:
      • Firebase 초기화
      • FCM 알림 권한 설정
      • 원격 알림 등록

파일 구조는 다음과 같습니다:

프로젝트_루트/
├── lib/
│   └── main.dart
├── android/
│   └── app/
│       └── src/
│           └── main/
│               └── AndroidManifest.xml
└── ios/
    └── Runner/
        └── AppDelegate.swift

각 파일의 역할:

  1. main.dart: Flutter 앱의 메인 진입점으로, FCM의 핵심 설정을 담당
  2. AndroidManifest.xml: Android 플랫폼에서 필요한 권한과 설정을 정의
  3. AppDelegate.swift: iOS 플랫폼에서 필요한 초기화와 설정을 담당

이 세 파일의 수정을 통해 FCM이 Android와 iOS 모두에서 정상적으로 작동하게 되었습니다.

 

 

반응형