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
아 처음부터 확인하고 할걸.
'컴퓨터 공학' 카테고리의 다른 글
👉 [Infra] 서버 상태 모니터링 하기 with Slack Webhook (0) | 2021.06.12 |
---|---|
👉 [Flutter] 앱 아이콘 뱃지 만들기(iOS/Android) 방법론 삽질기 (3) | 2021.06.04 |
👉 [CS] Join (0) | 2021.02.14 |
👉 [네트워크] 나는 왜 SocketIO 대신 Websocket 서버를 구축하였는가? (0) | 2021.01.12 |
👉 [네트워크] HTTP 는 소켓 통신이에욧 !!! (4) | 2020.09.24 |