[Firebase Cloud Messaging] FCM에 대해서 알아보자 (1탄)

InnomDB·2023년 2월 7일
1

FCM

목록 보기
1/1
post-custom-banner

들어가며

FCM을 이용한 서비스를 개발하고 있습니다. 그 과정에서 배웠던 것들을 다른 개발자분들이 도움이 될까 해서 적어봅니다. 그 중에서도 FCM을 처음 사용하는 개발자분들이 많은 도움을 받았으면 좋겠습니다.

FCM 이란?

FCM

  • 무료로 메세지를 전송할 수 있는 플랫폼

왜 FCM을 사용하는건가요?

  • 특정 플랫폼에 종속되지 않고 푸시 메세지를 전송할 수 있음. 무엇보다 무료입니다!!

푸시 알림 흐름

출저: dev.to

1.FCM에 앱을 등록, 앱도 FCM과 연동.
2. Client App에서 Firebase Token을 발급 받고 App에 저장 후 Server로 전송.
3. 서버에서 DEVICE에 대한 정보를 저장할 때 해당 토큰에 대한 정보까지 DB에 저장한다.

큰 흐름은 위와 같습니다. 서버에 저장된 Device Token을 이용해서 Server에서 Push Message를 보내는 것입니다.

FCM 토큰의 생성 및 삭제

  • 생성
    첫 앱 실행 시 FCM SDK는 Client APP 인스턴스(Device)에 대한 등록 토큰을 생성한다.
  • 만료
    보통 다른 블로그를 보면 FCM에 대해서 정해진 수명이나 갱신 주기가 없다고 설명합니다
    이것은 어떻게 보면 맞고 어떻게 보면 틀린 정보입니다. 정확한 정보를 여러분들께 전달해드리겠습니다.

보통 다른 블로그들은 FCM링크를 보고 설명을 하는 것 같습니다.
설명에 따르면 등록 토큰은 아래 3가지의 경우에 변경될 수 있다고 나와있습니다.

  • 앱이 새 기기에서 복원됩니다.
  • 사용자가 앱을 제거/재설치합니다.
  • 사용자가 앱 데이터를 지웁니다.

하지만 실제로도 그럴까요? 저는 실사용중 FCM 토큰이 주기적으로 소멸되고 다시 생성되는 것을 목격하여 FCM에게 직접 메일을 보내봤습니다. 그 결과를 아래에 공개하겠습니다.

Firebase may replace your tokens regularly. A token can last around 1-2 months before it expires and is automatically replaced by FCM. And in addition to what I've mentioned above, it could also become invalidated as soon as one of the following conditions are met:

  • If the client app unregisters with FCM.
  • If the client app is automatically unregistered, which can happen if the user uninstalls the application. For example, on iOS, if the APNs Feedback Service reported the APNs token as invalid.
  • If the client app is updated but the new version is not configured to receive messages.

해석하자면 아래와 같습니다.

파이어베이스는 정기적으로 토큰을 교체할 수 있습니다. 토큰은 만료되기 전까지 약 1-2개월 동안 지속될 수 있으며 FCM에 의해 자동으로 대체됩니다. 또한 위에서 언급한 것 외에도 다음 조건 중 하나가 충족되는 즉시 무효화될 수 있습니다:

  • 클라이언트 앱이 FCM에 등록 취소된 경우.
  • 클라이언트 앱이 자동으로 등록 취소된 경우, 사용자가 응용 프로그램을 제거할 때 발생할 수 있습니다. 예를 들어, iOS에서 APNs 피드백 서비스가 APNs 토큰을 잘못된 것으로 보고한 경우.
  • 클라이언트 앱이 업데이트되었지만 새 버전이 메시지를 수신하도록 구성되지 않은 경우.

위의 내용에서 알 수 있듯이 실제로는 FCM에 의해 주기적으로 교체가 됩니다.

네. 물론 한 토큰을 교체되지 않고 사용하게 하는 방법도 있는 것으로 알고 있습니다. 하지만 이 방법을 사용하지 않는 이유에 대해서 알아보겠습니다.

만약, 특정 Token이 FCM Message Topic에 등록되어 있고 이 토큰의 사용자가 더 이상 앱을 사용하지 않고 지우지 않은 유저가 상당히 많다면 어떻게 될까요??

FCM에서는 해당 사용자자에게도 메세지를 보내므로 푸시 메세지의 속도는 느려질 것입니다.
성능 향상을 위해서 일일히 토픽을 구독 해제 시키는 방법도 있지만 해당 유저가 다시 사용을 시작한다면 토픽을 새로 구독시켜줘야되고 무척 귀찮을 일이 많이 벌어질 것입니다.

그럼 어떤 방법을 사용할 수 있을까요?

그 방법은 바로 FCM에서 자동으로 토큰이 Rotate되도록 가만히 내비두는 방법이 있습니다.

해당 방법의 장점으로는 주제에서 오래된 토큰 구독 취소에서 볼 수 있듯이 FCM이 자체적으로 위의 모든 상황을 해결해줍니다.

  • 앱은 한 달에 한 번 또는 등록 토큰이 변경될 때마다 주제를 다시 구독해야 합니다. 이는 앱이 다시 활성화되면 구독이 자동으로 다시 나타나는 자가 치유 솔루션을 형성합니다.

서버 개발자는 FCM에서 새로 발급한 토큰을 Refresh 해주기만 하면 됩니다. Client App에서 새로 발급받은 토큰을 서버로 보내주면 서버는 그 값을 교체하기만 하면 되는 것입니다.

푸시 메세지 사용량이 많다면 수동으로 주제 구독을 컨트롤 하시는게 성능에는 좋습니다! 해당 방법에 대해서는 위의 문서에서 찾아 보실 수 있습니다.

FCM 메세지

  • 메세지 타입

    • FCM 메세지는 2개의 메세지로 구분 할 수 있습니다.
      • Notification message
      • Data message
  • 타겟팅 (구독할 수 있는 기기양)

    • 단일 기기, 기기 그룹, 주제 구독 3가지 방식으로 메세지를 전송할 수 있습니다.
      • 단일 기기 (1개)
      • 기기 그룹 (20개)
      • 주제 구독 (1000개)
        위의 갯수는 한번에 보낼 수 있는 메시지의 양입니다.

    다음 시간에는 실제 어떻게 메세지를 보내는지 코드와 함께 타겟팅에 대해서 알아보겠습니다!!

참고.
donghL-dev-Velog
seungwookim 이 블로그가 도움이 많이 되었습니다.

profile
이노오오옴
post-custom-banner

0개의 댓글