컴퓨터 공학

👉 [Flutter] FCM 사용시, iOS에서 백그라운드 작동이 안될 때

bitcodic 2021. 5. 5. 18:46

 

Flutter 로 iOS에서 작업 중이다.

FCM 사용중이고 최근에 앱 아이콘에 뱃지를 달아주기 위해서 background or terminated 상태에서도 동작하는 코드를 구현해야 했다. (ex. 메인 위젯에서 1, 2, 3 푸시 알림 쌓이는거 ...) 

 

firebase_messaging 패키지 8.0.0 버전을 썼는데, 문제는 해당 동작이 이뤄지지 않았다는 것이다.

 

FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);

Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  AppIconBadger().add();
}

*이때 콜백함수는 class 단위가 아닌 바깥에 최상위에 구현되어야 한다.

 

머지 머지 Merge 하다가, 답을 찾았는데 정답은 클라이언트단이 아닌 서버단에서 문제였다..

 

서버단에서 이런식으로 보내고 있었다.

{
    "registration_ids": ["유저 클라이언트 토큰" ],
   
    "notification": {
        "title": "title",
        "body": "zdzd"
    }
}

이렇게 하면 앱이 foreground 상태일 때는 문제가 없지만 background or terminated 에서는 안 돌아간다.

 

{
    "registration_ids": ["유저 클라이언트 토큰" ],
   
    "notification": {
        "title": "title",
        "body": "zdzd"
    },
    "content_available" : true
}

content_available 옵션을 걸어줘야한다. iOS는 FCM을 활용하면 백그라운드에서는 APN을 거치는데 얘를 활성화 시키기 위해 해당 옵션이 푸시하는 쪽에서 걸려있어야 한다.

 

자세한건 공식문서에 나와있다.

firebase.google.com/docs/cloud-messaging/http-server-ref

 

Firebase 클라우드 메시징 HTTP 프로토콜

firebase.ml.naturallanguage.translate

firebase.google.com

아 처음부터 확인하고 할걸.