Showing posts with label fcm. Show all posts
Showing posts with label fcm. Show all posts

Wednesday, June 10, 2020

MissingPluginException 오류: Flutter에서 FCM Background Handler 설정하기

Flutter에서 firebase_messaging 및 local_notification 패키지 연동 시 background 문제 해결

Flutter에서 firebase_messaging과 local_notifcation 패키지를 활용하여 연동하던 중, background 처리와 관련하여 문제가 발생했습니다. 특히 Android의 경우에는 onBackgroundMessage 처리 중에 local_notifcation 사용 시 missingpluginexception이 발생하였습니다.

아마도 백그라운드 상태에서는 패키지들이 로딩되지 않아서 이런 문제가 발생하는 것 같습니다. 이를 해결하기 위한 방법을 아래에 간단하게 공유합니다.

해결 방법: FlutterLocalNotificationPluginRegistrant 생성

먼저, Android 폴더의 MainActivity가 위치한 곳에 FlutterLocalNotificationPluginRegistrant를 만들어줍니다. 제 경우에는 kt 파일로 작성하였습니다:


package <프로젝트 패키지>

import io.flutter.plugin.common.PluginRegistry
import com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin

class FlutterLocalNotificationPluginRegistrant {
    companion object {
        fun registerWith(registry: PluginRegistry) {
            if (alreadyRegisteredWith(registry)) {
                return
            }
            FlutterLocalNotificationsPlugin.registerWith(registry.registrarFor("com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin"));
        }

        private fun alreadyRegisteredWith(registry: PluginRegistry): Boolean {
            val key = FlutterLocalNotificationPluginRegistrant::class.java.canonicalName
            if (registry.hasPlugin(key)) {
                return true
            }
            registry.registrarFor(key)
            return false
        }
    }
}

FCM 연동을 위한 Application 파일 수정

그런 다음, FCM 연동을 위해 만들어둔 Application 파일로 가서 registerWith 메소드에 FlutterLocalNotificationPluginRegistrant.registerWith(registry)를 추가해줍니다.

Sunday, May 3, 2020

Flutter firebase fcm과 local notification package 같이 사용할 경우 iOS에서 나오는 문제 해결

Flutter에서 Firebase Messaging과 Flutter Local Notifications 연동하기

Flutter에서 Firebase Messaging과 Flutter Local Notifications를 연동하는 방법에 대해 설명하겠습니다. 이를 통해 푸시 알림 기능을 더욱 효과적으로 활용할 수 있습니다.

연동 과정의 어려움

이 연동 과정은 여러 케이스들이 있어서 쉽지 않습니다. 대부분 공식 문서를 따라하면 적용이 가능하지만, 특히 iOS에서는 까다로운 부분이 있습니다.

오류 상황

FCM을 받는 것은 성공했지만, Notification을 연결하면 오류가 생기는 경우가 많습니다. 이는 Firebase Messaging 6.0.13과 Flutter Local Notifications 1.4.0 이상의 버전에서 대부분 해결되었다고 하지만, 모든 경우에 적용되지 않습니다.

문제 해결 방법

제가 발견한 문제의 원인은 공식 문서의 가이드에 있었습니다. 문서에서는 <key>FirebaseAppDelegateProxyEnabled</key><false/>를 info.plist에 넣으라고 하지만, 이는 동작하지 않습니다.

대신, <key>FirebaseAppDelegateProxyEnabled</key><string>NO</string>라고 작성해야 정상적으로 동작합니다. 이에 주의하여 활용하시기 바랍니다.

참고자료

더 자세한 내용은 Firebase Messaging의 공식 문서를 참조하시기 바랍니다.

Thursday, January 30, 2020

FCM (Firebase Cloud Messaging)에서 topic을 한글로 사용하는 방법

FCM에서 한글 토픽 사용 방법과 활용 사례

FCM에서 지원하는 알림 설정 문자 포맷은 [a-zA-Z0-9-_.~%]로, 이 때문에 한글이나 띄어쓰기 등은 토픽으로 사용할 수 없습니다. 물론, 띄어쓰기는 언더바(_)로 치환하여 사용할 수 있지만, 한글은 직접적으로 사용할 수 없습니다.

URI 인코딩을 활용한 한글 토픽 사용

하지만, 간단한 방법으로 한글 토픽도 사용 가능합니다. 그 방법은 바로 URI 인코딩을 활용하는 것입니다! 한글 문자를 URI 인코딩으로 변환하면 '%ED%85%8C%EC%8A%A4%ED%8A'와 같이 변환되며 이를 토픽으로 사용할 수 있게 됩니다.

참고로, 문자열 길이에 대한 테스트는 진행하지 않았으나 최소 7자까지는 가능했습니다. 따라서 한글뿐만 아니라 다른 어떤 문자든(특수문자 포함) 모두 가능합니다.

FCM 활용 사례: 키워드 알림 구현

저의 경우에는 FCM을 활용해 키워드 알림을 구현했습니다. 문자열 그대로를 토픽구독하면 되므로 아주 쉽게 구현할 수 있었습니다. 이 외에도 한글토픽을 응용 할 수 있는 여러가지 경우가 많을 것입니다.

추가 정보: 최대 등록 가능 글자수

추가적으로, 한글 기준 100자까지 등록이 가능하다는 점을 공유드립니다.(인코딩 후 글자수 900)

Friday, December 13, 2019

Flutter에서 FCM을 이용한 메세지 수신 시 onResume, onLaunch 동작하지 않는 문제 해결법

FCM을 이용한 메세지 수신 시 onResume, onLaunch 동작하지 않는 문제 해결법

Firebase Messaging 패키지를 이용하여 설정을 마치고 메세지 수신까지 테스트를 완료했으나, onMessage만 동작하고 onResume, onLaunch가 동작하지 않는 문제에 직면했습니다. 이 문제의 원인을 찾기 위해 여러 저장소의 이슈들을 살펴보았지만, 명확한 해결책은 찾기 어려웠습니다.

결론적으로, 해당 문제는 패키지 자체의 문제라기보다 FCM 사용법에 관한 문제였습니다(server side). 제 경우에는 FCM v1로 마이그레이션 하지 못하여 이전 HTTP 방식의 다운스트림을 사용하고 있었습니다. 이 때문에 메세지 형식에서 notification 안에 click_action 값을 설정해야 했습니다(예시: FLUTTER_NOTIFICATION_CLICK).

따라서 같은 문제로 고민 중인 분들께 조언드리자면, Firebase 콘솔에서 바로 메세지를 생성하여 보내진 않았는 지 확인해보세요. 그리고 직접 서버를 구성하여 click_action 값을 넣은 후 전송해 보시길 권장합니다.