Firebase Summit에서 발표된 모든 내용을 살펴보고 Firebase로 앱을 빠르게 개발하고 안심하고 앱을 실행하는 방법을 알아보세요. 자세히 알아보기

FCM 메시지 정보

Firebase 클라우드 메시징(FCM)은 광범위한 메시징 옵션과 기능을 제공합니다. 이 페이지의 정보는 다양한 유형의 FCM 메시지와 이러한 메시지로 수행할 수 있는 작업을 이해하는 데 도움을 주기 위한 것입니다.

메시지 유형

FCM을 사용하면 두 가지 유형의 메시지를 클라이언트에 보낼 수 있습니다.

  • 알림 메시지, 때로는 "표시 메시지"로 간주됩니다. 이는 FCM SDK에서 자동으로 처리됩니다.
  • 클라이언트 앱에서 처리하는 데이터 메시지입니다.

알림 메시지에는 사용자가 볼 수 있는 미리 정의된 키 집합이 포함되어 있습니다. 대조적으로 데이터 메시지에는 사용자 정의 사용자 정의 키-값 쌍만 포함됩니다. 알림 메시지에는 선택적 데이터 페이로드가 포함될 수 있습니다. 두 메시지 유형의 최대 페이로드는 4000바이트입니다. 단, Firebase 콘솔에서 메시지를 보낼 때는 1024자 제한이 적용됩니다.

시나리오 사용 보내는 방법
알림 메시지 FCM은 클라이언트 앱을 대신하여 최종 사용자 장치에 메시지를 자동으로 표시합니다. 알림 메시지에는 사용자가 볼 수 있는 미리 정의된 키 집합과 사용자 지정 키-값 쌍의 선택적 데이터 페이로드가 있습니다.
  1. Cloud Functions 또는 앱 서버와 같은 신뢰할 수 있는 환경에서 Admin SDK 또는 FCM 서버 프로토콜 사용: notification 키를 설정합니다. 선택적 데이터 페이로드가 있을 수 있습니다. 항상 접을 수 있습니다.

    알림 표시 및 요청 페이로드 보내기의 몇 가지 예를 참조하세요.

  2. 알림 작성기 사용 : 메시지 텍스트, 제목 등을 입력하고 전송합니다. 사용자 지정 데이터를 제공하여 선택적 데이터 페이로드를 추가합니다.
데이터 메시지 클라이언트 앱은 데이터 메시지 처리를 담당합니다. 데이터 메시지에는 예약된 키 이름이 없는 사용자 지정 키-값 쌍만 있습니다(아래 참조). Cloud Functions 또는 앱 서버와 같은 신뢰할 수 있는 환경에서 Admin SDK 또는 FCM 서버 프로토콜 사용: data 키만 설정합니다.

FCM이 클라이언트 앱을 대신하여 알림 표시를 처리하도록 하려면 알림 메시지를 사용합니다. 클라이언트 앱에서 메시지를 처리하려는 경우 데이터 메시지를 사용합니다.

FCM은 선택적 데이터 페이로드를 포함하는 알림 메시지를 보낼 수 있습니다. 이러한 경우 FCM은 알림 페이로드 표시를 처리하고 클라이언트 앱은 데이터 페이로드를 처리합니다.

알림 메시지

테스트 또는 마케팅 및 사용자 재참여 를 위해 Firebase 콘솔을 사용하여 알림 메시지를 보낼 수 있습니다. Firebase 콘솔은 마케팅 메시지를 수정하고 개선하는 데 도움이 되는 분석 기반 A/B 테스트 를 제공합니다.

Admin SDK 또는 FCM 프로토콜을 사용하여 프로그래밍 방식으로 알림 메시지를 보내려면 알림 메시지의 사용자에게 표시되는 부분에 대해 미리 정의된 필수 키-값 옵션 집합으로 notification 키를 설정합니다. 예를 들어 다음은 IM 앱의 JSON 형식 알림 메시지입니다. 사용자는 "Portugal vs. Denmark"라는 제목과 "훌륭한 경기!"라는 텍스트가 포함된 메시지를 볼 수 있습니다. 장치에서:

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    }
  }
}

알림 메시지는 앱이 백그라운드에 있을 때 알림 트레이로 전달됩니다. 포그라운드에 있는 앱의 경우 메시지는 콜백 함수로 처리됩니다.

알림 메시지 작성에 사용할 수 있는 사전 정의된 키의 전체 목록은 참조 문서를 참조하십시오.

데이터 메시지

사용자 지정 키-값 쌍으로 적절한 키를 설정하여 클라이언트 앱에 데이터 페이로드를 보냅니다.

예를 들어 다음은 위와 동일한 IM 앱의 JSON 형식 메시지입니다. 여기서 정보는 공통 data 키로 캡슐화되고 클라이언트 앱은 콘텐츠를 해석해야 합니다.

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    }
  }
}

위의 예는 메시지를 수신하는 모든 플랫폼의 클라이언트가 해석하는 최상위 또는 공통 data 필드의 사용법을 보여줍니다. 각 플랫폼에서 클라이언트 앱은 콜백 함수에서 데이터 페이로드를 수신합니다.

데이터 메시지 암호화

Android 전송 계층( FCM 아키텍처 참조)은 지점 간 암호화를 사용합니다. 필요에 따라 데이터 메시지에 종단 간 암호화를 추가할 수 있습니다. FCM은 종단 간 솔루션을 제공하지 않습니다. 그러나 Capillary 또는 DTLS 와 같은 외부 솔루션을 사용할 수 있습니다.

선택적 데이터 페이로드가 있는 알림 메시지

프로그래밍 방식으로 또는 Firebase 콘솔을 통해 맞춤 키-값 쌍의 선택적 페이로드가 포함된 알림 메시지를 보낼 수 있습니다. 알림 작성기 에서 고급 옵션사용자 정의 데이터 필드를 사용하십시오.

알림과 데이터 페이로드가 모두 포함된 메시지를 수신할 때 앱 동작은 앱이 백그라운드에 있는지 포그라운드에 있는지, 기본적으로 수신 시점에 활성 상태인지 여부에 따라 다릅니다.

  • 백그라운드 에서 앱은 알림 트레이에서 알림 페이로드를 수신하고 사용자가 알림을 탭할 때만 데이터 페이로드를 처리합니다.
  • 포그라운드 에서 앱은 두 페이로드를 모두 사용할 수 있는 메시지 객체를 수신합니다.

다음은 notification 키와 data 키를 모두 포함하는 JSON 형식의 메시지입니다.

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
      "title":"Portugal vs. Denmark",
      "body":"great match!"
    },
    "data" : {
      "Nick" : "Mario",
      "Room" : "PortugalVSDenmark"
    }
  }
}

여러 플랫폼에서 메시지 사용자 지정

Firebase Admin SDK와 FCM v1 HTTP 프로토콜 모두 메시지 요청이 message 객체에서 사용 가능한 모든 필드를 설정할 수 있도록 합니다. 여기에는 다음이 포함됩니다.

  • 메시지를 수신하는 모든 앱 인스턴스에서 해석할 공통 필드 세트입니다.
  • AndroidConfigWebpushConfig 와 같은 플랫폼별 필드 세트는 지정된 플랫폼에서 실행되는 앱 인스턴스에 의해서만 해석됩니다.

플랫폼별 블록을 사용하면 수신 시 올바르게 처리되도록 다양한 플랫폼에 대한 메시지를 사용자 정의할 수 있는 유연성을 제공합니다. FCM 백엔드는 지정된 모든 매개변수를 고려하고 각 플랫폼에 대한 메시지를 사용자 정의합니다.

공통 필드를 사용하는 경우

다음과 같은 경우 공통 필드를 사용합니다.

  • Apple, Android 및 웹의 모든 플랫폼에서 앱 인스턴스 타겟팅
  • 주제에 메시지 보내기

플랫폼에 관계없이 모든 앱 인스턴스는 다음 공통 필드를 해석할 수 있습니다.

플랫폼별 필드를 사용하는 경우

다음을 수행하려는 경우 플랫폼별 필드를 사용합니다.

  • 특정 플랫폼에만 필드 보내기
  • 공통 필드 외에 플랫폼별 필드 보내기

특정 플랫폼에만 값을 보내려는 경우 공통 필드를 사용 하지 마십시오 . 플랫폼별 필드를 사용합니다. 예를 들어, 알림을 Apple 플랫폼과 웹에만 보내고 Android에는 보내지 않으려면 두 개의 개별 필드 집합을 사용해야 합니다. 하나는 Apple용이고 다른 하나는 웹용입니다.

특정 전송 옵션 이 있는 메시지를 보낼 때 플랫폼별 필드를 사용하여 설정합니다. 원하는 경우 플랫폼별로 다른 값을 지정할 수 있습니다. 그러나 기본적으로 플랫폼 간에 동일한 값을 설정하려는 경우에도 플랫폼별 필드를 사용해야 합니다. 이는 각 플랫폼에서 값을 약간 다르게 해석할 수 있기 때문입니다. 예를 들어 Android에서는 TTL(time-to-live)이 초 단위 만료 시간으로 설정되고 Apple에서는 만료 날짜 로 설정됩니다.

예: 플랫폼별 전달 옵션이 있는 알림 메시지

다음 v1 보내기 요청은 공통 알림 제목과 콘텐츠를 모든 플랫폼에 보내지만 일부 플랫폼별 재정의도 보냅니다. 특히 요청:

  • APN(Apple 플랫폼) 메시지 우선 순위를 낮은 설정으로 설정하는 동안 Android 및 웹 플랫폼에 대해 긴 수명을 설정합니다.
  • Android 및 Apple에서 사용자가 알림을 탭한 결과를 정의하기 위해 적절한 키를 설정합니다(각각 click_actioncategory ).
{
  "message":{
     "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
     "notification":{
       "title":"Match update",
       "body":"Arsenal goal in added time, score is now 3-0"
     },
     "android":{
       "ttl":"86400s",
       "notification"{
         "click_action":"OPEN_ACTIVITY_1"
       }
     },
     "apns": {
       "headers": {
         "apns-priority": "5",
       },
       "payload": {
         "aps": {
           "category": "NEW_MESSAGE_CATEGORY"
         }
       }
     },
     "webpush":{
       "headers":{
         "TTL":"86400"
       }
     }
   }
 }

메시지 본문의 플랫폼별 블록에서 사용 가능한 키에 대한 자세한 내용은 HTTP v1 참조 문서 를 참조하세요. 메시지 본문이 포함된 전송 요청 작성에 대한 자세한 내용은 전송 요청 작성 을 참조하십시오.

배송 옵션

FCM은 Android 장치로 전송되는 메시지에 대한 특정 전송 옵션 세트를 제공하고 Apple 플랫폼 및 웹에서 유사한 옵션을 허용합니다. 예를 들어, "접을 수 있는" 메시지 동작은 FCM의 collapse_key 를 통해 Android에서 지원되고, Apple에서 apns-collapse-id 를 통해, JavaScript/Web에서 Topic 을 통해 지원됩니다. 자세한 내용은 이 섹션의 설명과 관련 참조 문서를 참조하십시오.

접을 수 없고 접을 수 없는 메시지

접을 수 없는 메시지는 각 개별 메시지가 장치로 전달됨을 나타냅니다. 접을 수 없는 메시지는 데이터를 가져오기 위해 서버에 연결하기 위해 모바일 앱에 내용이 없는 "ping"과 같은 접을 수 있는 메시지와 달리 몇 가지 유용한 내용을 전달합니다.

접을 수 없는 메시지의 일반적인 사용 사례는 채팅 메시지 또는 중요한 메시지입니다. 예를 들어 IM 앱에서는 모든 메시지에 다른 콘텐츠가 있기 때문에 모든 메시지를 전달하려고 합니다.

Android의 경우 접지 않고 저장할 수 있는 메시지는 100개로 제한됩니다. 제한에 도달하면 저장된 모든 메시지가 삭제됩니다. 장치가 다시 온라인 상태가 되면 한계에 도달했음을 나타내는 특수 메시지를 수신합니다. 그러면 앱은 일반적으로 앱 서버에서 전체 동기화를 요청하여 상황을 적절하게 처리할 수 있습니다.

접을 수 있는 메시지 는 아직 장치에 전달되지 않은 경우 새 메시지로 대체될 수 있는 메시지입니다.

접을 수 있는 메시지의 일반적인 사용 사례는 서버에서 데이터를 동기화하도록 모바일 앱에 지시하는 데 사용되는 메시지입니다. 사용자에게 최신 점수를 업데이트하는 스포츠 앱을 예로 들 수 있습니다. 가장 최근 메시지만 관련이 있습니다.

Android에서 메시지를 접을 수 있는 것으로 표시하려면 메시지 페이로드에 collapse_key 매개변수를 포함합니다. 기본적으로 축소 키는 Firebase 콘솔에 등록된 앱 패키지 이름입니다. FCM 서버는 각각 다른 축소 키를 사용하여 장치당 4개의 서로 다른 축소 가능한 메시지를 동시에 저장할 수 있습니다. 이 수를 초과하면 FCM은 4개의 축소 키만 유지하며 어떤 키가 유지되는지 보장하지 않습니다.

페이로드가 없는 주제 메시지는 기본적으로 접을 수 있습니다. 알림 메시지는 항상 접을 수 있으며 collapse_key 매개변수를 무시합니다.

어느 것을 사용해야 합니까?

축소 가능한 메시지는 앱에서 축소할 수 없는 메시지를 사용할 필요가 없다면 성능 관점에서 더 나은 선택입니다. 그러나 축소 가능한 메시지를 사용하는 경우 FCM은 지정된 시간에 등록 토큰당 최대 4개의 다른 축소 키만 FCM에서 사용할 수 있도록 허용합니다. 이 숫자를 초과해서는 안 됩니다. 그렇지 않으면 예측할 수 없는 결과가 발생할 수 있습니다.

시나리오 사용 보내는 방법
접을 수 없음 모든 메시지는 클라이언트 앱에 중요하며 전달되어야 합니다. 알림 메시지를 제외한 모든 메시지는 기본적으로 접을 수 없습니다.
접을 수 있는 클라이언트 앱과 관련이 없는 오래된 관련 메시지를 렌더링하는 새로운 메시지가 있는 경우 FCM은 이전 메시지를 대체합니다. 예: 서버에서 데이터 동기화를 시작하는 데 사용되는 메시지 또는 오래된 알림 메시지. 메시지 요청에서 적절한 매개변수를 설정합니다.
  • Android의 collapseKey
  • Apple apns-collapse-id
  • Topic
  • 레거시 프로토콜의 collapse_key (모든 플랫폼)

메시지의 우선 순위 설정

다운스트림 메시지에 배달 우선 순위를 지정하는 데는 보통과 높은 우선 순위의 두 가지 옵션이 있습니다. 플랫폼마다 동작이 약간 다르지만 일반 및 높은 우선 순위 메시지의 전달은 다음과 같이 작동합니다.

  • 보통 우선순위. 일반 우선 순위 메시지는 앱이 포그라운드에 있을 때 즉시 전달됩니다. 백그라운드 앱의 경우 배송이 지연될 수 있습니다. 새 이메일 알림, UI 동기화 유지 또는 백그라운드에서 앱 데이터 동기화와 같이 시간에 덜 민감한 메시지의 경우 일반 전송 우선 순위를 선택하십시오.

  • 높은 우선 순위. FCM은 장치가 잠자기 모드에 있더라도 우선 순위가 높은 메시지를 즉시 전달하려고 시도합니다. 높은 우선 순위 메시지는 시간에 민감한 사용자가 볼 수 있는 콘텐츠를 위한 것입니다.

다음은 잡지 구독자에게 새 콘텐츠를 다운로드할 수 있음을 알리기 위해 FCM HTTP v1 프로토콜을 통해 전송된 일반 우선 순위 메시지의 예입니다.

{
  "message":{
    "topic":"subscriber-updates",
    "notification":{
      "body" : "This week's edition is now available.",
      "title" : "NewsMagazine.com",
    },
    "data" : {
      "volume" : "3.21.15",
      "contents" : "http://www.news-magazine.com/world-week/21659772"
    },
    "android":{
      "priority":"normal"
    },
    "apns":{
      "headers":{
        "apns-priority":"5"
      }
    },
    "webpush": {
      "headers": {
        "Urgency": "high"
      }
    }
  }
}

메시지 우선 순위 설정에 대한 플랫폼별 세부 정보:

메시지 수명 설정

FCM은 일반적으로 메시지를 보낸 직후에 배달합니다. 그러나 이것이 항상 가능한 것은 아닙니다. 예를 들어 플랫폼이 Android인 경우 기기가 꺼져 있거나 오프라인이거나 사용할 수 없습니다. 또는 FCM은 앱이 과도한 리소스를 소비하고 배터리 수명에 부정적인 영향을 미치는 것을 방지하기 위해 의도적으로 메시지를 지연시킬 수 있습니다.

이 경우 FCM은 메시지를 저장하고 가능한 한 빨리 전달합니다. 대부분의 경우 문제가 없지만 늦은 메시지가 배달되지 않는 일부 앱이 있습니다. 예를 들어 메시지가 수신 전화나 영상 채팅 알림인 경우 통화가 종료되기 전까지 짧은 시간 동안만 의미가 있습니다. 또는 메시지가 이벤트 초대인 경우 이벤트가 종료된 후 수신된 메시지는 쓸모가 없습니다.

Android 및 웹/자바스크립트에서 메시지의 최대 수명을 지정할 수 있습니다. 값은 0에서 2,419,200초(28일) 사이의 기간이어야 하며 FCM이 메시지를 저장하고 전달을 시도하는 최대 기간에 해당합니다. 이 필드가 포함되지 않은 요청은 기본적으로 최대 4주의 기간으로 설정됩니다.

다음은 이 기능을 사용할 수 있는 몇 가지 예입니다.

  • 영상 채팅 수신 전화
  • 만료되는 초대 이벤트
  • 캘린더 이벤트

메시지 수명 지정의 또 다른 이점은 FCM이 TTL 값이 0초인 메시지를 제한하지 않는다는 것입니다. 즉, FCM은 "지금 아니면 절대" 배달되어야 하는 메시지에 대해 최선의 노력을 보장합니다. time_to_live 값이 0이면 즉시 전달할 수 없는 메시지가 삭제됩니다. 그러나 이러한 메시지는 저장되지 않으므로 알림 메시지를 보내기 위한 최상의 대기 시간을 제공합니다.

다음은 TTL이 포함된 요청의 예입니다.

{
  "message":{
    "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "data":{
      "Nick" : "Mario",
      "body" : "great match!",
      "Room" : "PortugalVSDenmark"
    },
    "apns":{
      "headers":{
        "apns-expiration":"1604750400"
      }
    },
    "android":{
      "ttl":"4500s"
    },
    "webpush":{
      "headers":{
        "TTL":"4500"
      }
    }
  }
}

메시지의 수명

앱 서버가 FCM에 메시지를 게시하고 메시지 ID를 다시 수신한다고 해서 메시지가 이미 기기에 전달되었다는 의미는 아닙니다. 오히려 배송을 수락했다는 의미입니다. 메시지가 수락된 후 어떻게 되는지는 여러 요인에 따라 달라집니다.

최상의 시나리오에서는 장치가 FCM에 연결되어 있고 화면이 켜져 있고 조절 제한이 없으면 메시지가 즉시 전달됩니다.

장치가 연결되어 있지만 잠자기 상태인 경우 장치가 잠자기 상태에서 해제될 때까지 FCM에서 낮은 우선 순위 메시지를 저장합니다. 그리고 그것이 바로 collapse_key 플래그가 역할을 하는 곳입니다. 동일한 축소 키(및 등록 토큰)가 저장되어 있고 전달을 기다리는 메시지가 이미 있는 경우 이전 메시지가 삭제되고 새 메시지가 그 자리를 차지합니다(즉, 이전 메시지가 새 메시지로 축소됨). 그러나 접기 키가 설정되지 않은 경우 새 메시지와 이전 메시지가 모두 나중에 배달될 수 있도록 저장됩니다.

장치가 FCM에 연결되어 있지 않으면 연결이 설정될 때까지 메시지가 저장됩니다(다시 축소 키 규칙 준수). 연결이 설정되면 FCM은 보류 중인 모든 메시지를 장치로 전달합니다. 기기가 다시 연결되지 않으면(예: 공장 초기화된 경우) 메시지가 결국 시간 초과되고 FCM 저장소에서 삭제됩니다. time_to_live 플래그가 설정되지 않은 경우 기본 시간 제한은 4주입니다.

메시지 전달에 대한 자세한 정보를 얻으려면 다음 단계를 따르세요.

    Android 또는 Apple 플랫폼에서 메시지 전달에 대한 자세한 정보를 얻으려면 FCM 보고 대시보드 를 참조하십시오. FCM 보고 대시보드 에는 Apple 및 Android 장치에서 보내고 열었던 메시지 수와 함께 "노출"(사용자가 본 알림)에 대한 데이터가 기록됩니다. 안드로이드 앱.

직접 채널 메시징이 활성화된 Android 기기의 경우 기기가 한 달 이상 FCM에 연결되지 않은 경우 FCM은 여전히 ​​메시지를 수락하지만 즉시 삭제합니다. 장치에 보낸 마지막 데이터 메시지로부터 4주 이내에 장치가 연결되면 클라이언트는 onDeletedMessages() 콜백을 수신합니다. 그러면 앱은 일반적으로 앱 서버에서 전체 동기화를 요청하여 상황을 적절하게 처리할 수 있습니다.

마지막으로 FCM이 장치에 메시지를 전달하려고 시도하고 앱이 제거되면 FCM은 해당 메시지를 즉시 삭제하고 등록 토큰을 무효화합니다. 이후에 해당 장치로 메시지를 보내려고 하면 NotRegistered 오류가 발생합니다.

조절 및 크기 조정

우리의 목표는 항상 FCM을 통해 전송되는 모든 메시지를 전달하는 것입니다. 그러나 모든 메시지를 전달하면 전체 사용자 환경이 좋지 않은 경우가 있습니다. 다른 경우에는 FCM이 모든 발신자에게 확장 가능한 서비스를 제공하도록 경계를 제공해야 합니다.

축소 가능한 메시지 조절

위에서 설명한 대로 접을 수 있는 메시지는 서로 겹쳐서 접히도록 설계된 콘텐츠 없는 알림입니다. 개발자가 앱에 동일한 메시지를 너무 자주 반복하는 경우 사용자의 배터리에 미치는 영향을 줄이기 위해 메시지를 지연(조절)합니다.

예를 들어 단일 장치에 많은 수의 새 이메일 동기화 요청을 보내는 경우 장치가 더 낮은 평균 속도로 동기화할 수 있도록 다음 이메일 동기화 요청을 몇 분 지연시킬 수 있습니다. 이 조절은 사용자가 경험하는 배터리 영향을 엄격하게 제한하기 위해 수행됩니다.

사용 사례에 높은 버스트 전송 패턴이 필요한 경우 축소할 수 없는 메시지가 올바른 선택일 수 있습니다. 이러한 메시지의 경우 배터리 비용을 줄이기 위해 해당 메시지에 내용을 포함해야 합니다.

접을 수 있는 메시지는 기기당 앱당 20개의 메시지 버스트로 제한되며 3분마다 1개의 메시지가 다시 채워집니다.

XMPP 서버 조절

FCM XMPP 서버에 연결할 수 있는 속도는 프로젝트당 분당 400개로 제한됩니다. 이것은 메시지 전달에는 문제가 되지 않지만 시스템의 안정성을 보장하는 데 중요합니다.

각 프로젝트에 대해 FCM은 2500개의 병렬 연결을 허용합니다.

단일 장치에 대한 최대 메시지 속도

Android의 경우 단일 장치에 최대 240개의 메시지/분 및 5,000개의 메시지를 보낼 수 있습니다. 이 높은 임계값은 사용자가 채팅을 통해 빠르게 상호 작용하는 경우와 같이 단기적인 트래픽 버스트를 허용하기 위한 것입니다. 이 제한은 논리를 보낼 때 오류가 장치의 배터리를 실수로 소모하는 것을 방지합니다.

iOS의 경우 속도가 APN 제한을 초과하면 오류가 반환됩니다.

업스트림 메시지 제한

업스트림 대상 서버의 과부하를 방지하기 위해 프로젝트당 업스트림 메시지 를 분당 1,500,000개로 제한합니다.

잘못된 앱 동작으로 인한 배터리 소모를 방지하기 위해 기기당 업스트림 메시지를 분당 1,000개로 제한합니다.

주제 메시지 제한

주제 구독 추가/제거 비율은 프로젝트당 3,000QPS로 제한됩니다.

메시지 전송 속도는 팬아웃 조절 을 참조하십시오.

팬아웃 조절

메시지 팬아웃은 주제 및 그룹을 대상으로 할 때 또는 알림 작성기 를 사용하여 청중 또는 사용자 세그먼트를 대상으로 할 때와 같이 여러 장치에 메시지를 보내는 프로세스입니다.

메시지 팬아웃은 즉각적이지 않으므로 때때로 여러 팬아웃이 동시에 진행됩니다. 프로젝트당 동시 메시지 팬아웃 수를 1,000개로 제한합니다. 그 후 추가 팬아웃 요청을 거부하거나 이미 진행 중인 팬아웃 중 일부가 완료될 때까지 요청 팬아웃을 연기할 수 있습니다.

실제 달성 가능한 팬아웃 비율은 동시에 팬아웃을 요청하는 프로젝트 수의 영향을 받습니다. 개별 프로젝트에 대한 10,000 QPS의 팬아웃 비율은 드문 일이 아니지만 그 숫자는 보장되지 않으며 시스템의 총 부하의 결과입니다. 사용 가능한 팬아웃 용량은 팬아웃 요청이 아니라 프로젝트 간에 나누어집니다. 따라서 프로젝트에 두 개의 팬아웃이 진행 중인 경우 각 팬아웃에는 사용 가능한 팬아웃 비율의 절반만 표시됩니다. 팬아웃 속도를 최대화하는 권장 방법은 한 번에 하나의 활성 팬아웃만 진행하는 것입니다.

FCM 포트 및 방화벽

조직에 인터넷을 오가는 트래픽을 제한하는 방화벽이 있는 경우 네트워크의 장치가 메시지를 수신할 수 있도록 모바일 장치가 FCM에 연결할 수 있도록 방화벽을 구성해야 합니다. FCM은 일반적으로 포트 5228을 사용하지만 때로는 443, 5229 및 5230을 사용합니다.

네트워크에 연결하는 장치의 경우 FCM은 IP 범위가 너무 자주 변경되고 방화벽 규칙이 오래되어 사용자 경험에 영향을 줄 수 있기 때문에 특정 IP를 제공하지 않습니다. 이상적으로는 IP 제한 없이 포트 5228-5230 및 443을 허용 목록에 추가합니다. 그러나 IP 제한이 있어야 하는 경우 goog.json 에 나열된 모든 IP 주소를 허용 목록에 추가해야 합니다. 이 큰 목록은 정기적으로 업데이트되며 매월 규칙을 업데이트하는 것이 좋습니다. 방화벽 IP 제한으로 인한 문제는 종종 간헐적이며 진단하기 어렵습니다.

IP 주소 대신 허용 목록에 추가할 수 있는 도메인 이름 집합을 제공합니다. 해당 호스트 이름은 아래에 나열되어 있습니다. 추가 호스트 이름을 사용하기 시작하면 여기에서 목록을 업데이트합니다. 방화벽 규칙에 도메인 이름을 사용하면 방화벽 장치에서 작동할 수도 있고 작동하지 않을 수도 있습니다.

열려는 TCP 포트:

  • 5228
  • 5229
  • 5230
  • 443

열려는 호스트 이름:

  • mtalk.google.com
  • mtalk4.google.com
  • mtalk-staging.google.com
  • mtalk-dev.google.com
  • alt1-mtalk.google.com
  • alt2-mtalk.google.com
  • alt3-mtalk.google.com
  • alt4-mtalk.google.com
  • alt5-mtalk.google.com
  • alt6-mtalk.google.com
  • alt7-mtalk.google.com
  • alt8-mtalk.google.com
  • android.apis.google.com
  • device-provisioning.googleapis.com
  • firebaseinstallations.googleapis.com

네트워크 주소 변환 및/또는 상태 저장 패킷 검사 방화벽:

네트워크에서 NAT(Network Address Translation) 또는 SPI(Stateful Packet Inspection)를 구현하는 경우 포트 5228-5230을 통한 연결에 대해 30분 이상의 제한 시간을 구현하십시오. 이를 통해 사용자 모바일 장치의 배터리 소모를 줄이면서 안정적인 연결을 제공할 수 있습니다.

신임장

구현하는 FCM 기능에 따라 Firebase 프로젝트에서 다음 자격 증명이 필요할 수 있습니다.

프로젝트 ID FCM v1 HTTP 엔드포인트에 대한 요청에 사용되는 Firebase 프로젝트의 고유 식별자입니다. 이 값은 Firebase 콘솔 설정 창에서 사용할 수 있습니다.
등록 토큰

각 클라이언트 앱 인스턴스를 식별하는 고유한 토큰 문자열입니다. 단일 장치 및 장치 그룹 메시징에는 등록 토큰이 필요합니다. 등록 토큰은 비밀로 유지해야 합니다.

발신자 ID Firebase 콘솔 설정 창의 클라우드 메시징 탭에서 사용할 수 있는 Firebase 프로젝트를 만들 때 생성되는 고유한 숫자 값입니다. 발신자 ID는 클라이언트 앱에 메시지를 보낼 수 있는 각 발신자를 식별하는 데 사용됩니다.
액세스 토큰 HTTP v1 API에 대한 요청을 승인하는 단기 OAuth 2.0 토큰입니다. 이 토큰은 Firebase 프로젝트에 속한 서비스 계정과 연결되어 있습니다. 액세스 토큰을 만들고 교체하려면 전송 요청 승인 에 설명된 단계를 따르세요.
서버 키(레거시 프로토콜용)

Firebase 클라우드 메시징 레거시 프로토콜을 통한 메시지 전송을 포함하여 Google 서비스에 대한 액세스 권한을 앱 서버에 부여하는 서버 키입니다. Firebase 프로젝트를 만들 때 서버 키를 얻습니다. Firebase 콘솔 설정 창의 클라우드 메시징 탭에서 볼 수 있습니다.

중요: 클라이언트 코드의 어디에도 서버 키를 포함하지 마십시오. 또한 서버 키만 사용하여 앱 서버를 인증해야 합니다. Android, Apple 플랫폼 및 브라우저 키는 FCM에서 거부되었습니다.