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)
를 추가해줍니다.
앱이 종료 됐을 때 푸시알람이 왔을 때 콜백함수로 Sqlite 데이터 베이스에 데이터 insert 할 때도 SQLite 관련 패키지를 로딩하기 위한 코틀린 코드를 추가 해야 할까요?
ReplyDelete