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

FCM 메시지 정보

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

FCM(Firebase Cloud Messaging)은 광범위한 메시징 옵션과 기능을 제공합니다. 이 페이지의 정보는 다양한 유형의 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 형식 알림 메시지입니다. 사용자는 "포르투갈 대 덴마크"라는 제목과 "훌륭한 경기!"라는 텍스트가 있는 메시지를 볼 수 있습니다. 기기에서:

{
  "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 및 웹)에서 앱 인스턴스 대상 지정
  • 주제에 메시지 보내기

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

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

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

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

특정 플랫폼에만 값을 보내려는 경우 공통 필드를 사용 하지 마십시오 . 플랫폼별 필드를 사용합니다. 예를 들어 Android가 아닌 Apple 플랫폼과 웹에만 알림을 보내려면 두 개의 개별 필드 세트(Apple 및 웹용)를 사용해야 합니다.

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

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

다음 v1 전송 요청은 공통 알림 제목과 콘텐츠를 모든 플랫폼에 전송하지만 일부 플랫폼별 재정의도 전송합니다. 구체적으로 요청:

  • APNs(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에서, apns-collapse-id 를 통해 Apple에서, Topic 을 통해 JavaScript/Web에서 지원됩니다. 자세한 내용은 이 섹션의 설명 및 관련 참조 문서를 참조하십시오.

접을 수 없는 메시지와 접을 수 있는 메시지

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

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

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

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

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

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

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

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

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

시나리오 사용 보내는 방법
접을 수 없음 모든 메시지는 클라이언트 앱에 중요하며 전달되어야 합니다. 알림 메시지를 제외한 모든 메시지는 기본적으로 접을 수 없습니다.
접을 수 있는 클라이언트 앱과 관련이 없는 이전 관련 메시지를 렌더링하는 최신 메시지가 있는 경우 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 및 Web/JavaScript에서 메시지의 최대 수명을 지정할 수 있습니다. 값은 0에서 2,419,200초(28일) 사이의 기간이어야 하며 FCM이 메시지를 저장하고 전달을 시도하는 최대 기간에 해당합니다. 이 필드를 포함하지 않는 요청은 최대 기간인 4주로 기본 설정됩니다.

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

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

메시지의 수명을 지정하는 또 다른 이점은 FCM이 TTL(Time-to-Live) 값이 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 보고 대시보드 를 참조하십시오. 이 대시보드는 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,000 QPS로 제한됩니다.

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

팬아웃 스로틀링

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

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

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

FCM 포트 및 방화벽

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

네트워크에 연결된 장치의 경우 IP 범위가 너무 자주 변경되고 방화벽 규칙이 오래되어 사용자 환경에 영향을 미칠 수 있으므로 FCM은 특정 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 Cloud Messaging 레거시 프로토콜을 통한 메시지 전송을 포함하여 Google 서비스에 액세스할 수 있도록 앱 서버를 승인하는 서버 키입니다. Firebase 프로젝트를 만들 때 서버 키를 얻습니다. Firebase 콘솔 설정 창의 클라우드 메시징 탭에서 볼 수 있습니다.

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