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링크를 보고 설명을 하는 것 같습니다.
설명에 따르면 등록 토큰은 아래 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:
해석하자면 아래와 같습니다.
파이어베이스는 정기적으로 토큰을 교체할 수 있습니다. 토큰은 만료되기 전까지 약 1-2개월 동안 지속될 수 있으며 FCM에 의해 자동으로 대체됩니다. 또한 위에서 언급한 것 외에도 다음 조건 중 하나가 충족되는 즉시 무효화될 수 있습니다:
위의 내용에서 알 수 있듯이 실제로는 FCM에 의해 주기적으로 교체가 됩니다.
네. 물론 한 토큰을 교체되지 않고 사용하게 하는 방법도 있는 것으로 알고 있습니다. 하지만 이 방법을 사용하지 않는 이유에 대해서 알아보겠습니다.
만약, 특정 Token이 FCM Message Topic에 등록되어 있고 이 토큰의 사용자가 더 이상 앱을 사용하지 않고 지우지 않은 유저가 상당히 많다면 어떻게 될까요??
FCM에서는 해당 사용자자에게도 메세지를 보내므로 푸시 메세지의 속도는 느려질 것입니다.
성능 향상을 위해서 일일히 토픽을 구독 해제 시키는 방법도 있지만 해당 유저가 다시 사용을 시작한다면 토픽을 새로 구독시켜줘야되고 무척 귀찮을 일이 많이 벌어질 것입니다.
그럼 어떤 방법을 사용할 수 있을까요?
그 방법은 바로 FCM에서 자동으로 토큰이 Rotate되도록 가만히 내비두는 방법이 있습니다.
해당 방법의 장점으로는 주제에서 오래된 토큰 구독 취소에서 볼 수 있듯이 FCM이 자체적으로 위의 모든 상황을 해결해줍니다.
서버 개발자는 FCM에서 새로 발급한 토큰을 Refresh 해주기만 하면 됩니다. Client App에서 새로 발급받은 토큰을 서버로 보내주면 서버는 그 값을 교체하기만 하면 되는 것입니다.
푸시 메세지 사용량이 많다면 수동으로 주제 구독을 컨트롤 하시는게 성능에는 좋습니다! 해당 방법에 대해서는 위의 문서에서 찾아 보실 수 있습니다.
타겟팅 (구독할 수 있는 기기양)
다음 시간에는 실제 어떻게 메세지를 보내는지 코드와 함께 타겟팅에 대해서 알아보겠습니다!!