이 문서에서는 Firebase Cloud Messaging을 통해 앱 서버에서 클라이언트 앱으로 메시지를 전달하는 데 사용되는 HTTP 구문의 참조를 제공합니다.
기존 HTTP 프로토콜을 사용할 때는 앱 서버가 모든 HTTP 요청을 다음 엔드포인트로 전송해야 합니다.
https://fcm.googleapis.com/fcm/send
사용 가능한 매개변수와 옵션은 크게 다음 카테고리로 분류할 수 있습니다.
다운스트림 메시지 구문
이 섹션에서는 다운스트림 메시지를 보내고 Firebase Cloud Messaging의 HTTP 응답을 해석하기 위한 구문을 제공합니다.
다운스트림 HTTP 메시지(JSON)
다음 표에서는 HTTP JSON 메시지의 대상, 옵션 및 페이로드를 보여줍니다.
매개변수 | 사용 | 설명 | |
---|---|---|---|
대상 | |||
to |
선택사항, 문자열 |
이 매개변수는 메시지의 수신자를 지정합니다. 이 값은 기기의 등록 토큰, 기기 그룹의 알림 키 또는 단일 주제( |
|
registration_ids | 선택사항, 문자열 배열 |
이 매개변수는 멀티캐스트 메시지(둘 이상의 등록 토큰으로 전송된 메시지)의 수신자를 지정합니다.
이 값은 멀티캐스트 메시지를 보낼 등록 토큰의 배열이어야 합니다. 배열에 포함될 수 있는 등록 토큰 수는 1~1,000개입니다. 단일 기기로 메시지를 보내려면 멀티캐스트 메시지에는 HTTP JSON 형식만 사용할 수 있습니다. |
|
condition |
선택사항, 문자열 | 이 매개변수는 메시지 대상을 결정하는 조건의 논리식을 지정합니다. 지원되는 조건은 형식이 ''yourTopic' in topics'로 지정된 주제입니다. 이 값은 대소문자를 구분하지 않습니다. 지원되는 연산자: |
|
notification_key 지원 중단됨 |
선택사항, 문자열 | 이 매개변수는 지원 중단되었습니다. 대신 |
|
옵션 | |||
collapse_key |
선택사항, 문자열 | 이 매개변수는 축소 가능한 메시지 그룹(예: 메시지가 전송되는 순서는 보장되지 않는다는 점에 유의하세요. 참고: 지정한 기간에 최대 4개의 다른 축소 키가 허용됩니다. 즉, FCM은 클라이언트 앱당 4개의 서로 다른 메시지를 동시에 저장할 수 있습니다. 이 한도를 초과하면 FCM이 어떤 축소 키 4개를 유지할지 확실히 알 수 없습니다. |
|
priority |
선택사항, 문자열 | 메시지의 우선순위를 설정합니다. 유효한 값은 'normal' 및 'high'입니다. Apple 플랫폼에서는 APNs 우선순위 5 및 10에 해당합니다. 기본적으로 알림 메시지는 높은 우선순위로, 데이터 메시지는 보통 우선순위로 전송됩니다. 보통 우선순위는 클라이언트 앱의 배터리 사용을 최적화하기 때문에 즉시 전송해야 하는 경우가 아니라면 이 우선순위를 사용하는 것이 좋습니다. 우선순위가 보통인 메시지의 경우 앱이 메시지를 수신할 때 알 수 없는 지연이 발생할 수 있습니다. 높은 우선순위로 메시지를 보내면 즉시 전송되며 앱에 알림이 표시될 수 있습니다. |
|
content_available |
선택사항, 부울 | Apple 플랫폼에서는 이 필드를 사용하여 APNs 페이로드의 |
|
mutable_content |
선택사항, JSON 불리언 | Apple 플랫폼에서는 이 필드를 사용하여 APNs 페이로드의 |
|
time_to_live |
선택사항, 숫자 | 이 매개변수는 기기가 오프라인 상태인 경우 FCM 스토리지에 메시지를 보관해야 하는 시간(초)을 지정합니다. 지원되는 최대 수명은 4주이며 기본값도 4주입니다. 자세한 내용은 메시지 수명 설정을 참조하세요. |
|
restricted_package_
(Android 전용) |
선택사항, 문자열 | 이 매개변수는 등록 토큰이 일치해야 메시지를 수신할 수 있는 애플리케이션의 패키지 이름을 지정합니다. | |
dry_run |
선택사항, 부울 | 이 매개변수가 기본값은 |
|
페이로드 | |||
data |
선택사항, 객체 | 이 매개변수는 메시지 페이로드의 커스텀 키-값 쌍을 지정합니다. 예를 들면 Apple 플랫폼에서는 메시지가 APN을 통해 전송되는 경우 커스텀 데이터 필드를 나타냅니다. FCM을 통해 전송되는 경우에는 Android에서는 문자열 값이 키는 예약어('google'이나 'gcm'으로 시작하는 모든 단어 또는 'from', 'message_type')여서는 안 됩니다. 이 표에 정의되어 있는 모든 단어(예: 문자열 유형의 값을 사용하는 것이 좋습니다. 객체 또는 문자열이 아닌 기타 데이터 유형(예: 정수 또는 불리언)으로 된 값은 문자열로 변환해야 합니다. |
|
notification |
선택사항, 객체 | 이 매개변수는 사용자에게 표시되는 사전 정의된 알림 페이로드의 키-값 쌍을
지정합니다. 자세한 내용은 알림 페이로드 지원을 참조하세요.
알림 메시지 및 데이터 메시지 옵션의 자세한 내용은 메시지 유형을 참조하세요. Apple 기기로 보내는 메시지에 알림 페이로드가 제공되었거나 content_available 옵션이 true 로 설정된 경우 메시지는 APNs를 통해 전송되고, 그렇지 않은 경우에는 FCM을 통해 전송됩니다.
|
알림 페이로드 지원
다음 표에서는 iOS 및 Android용 알림 메시지를 작성하는 데 사용할 수 있는 사전 정의된 키를 보여줍니다.
매개변수 | 사용 | 설명 |
---|---|---|
title |
선택사항, 문자열 |
알림의 제목입니다. 이 필드는 휴대전화(iPhone)와 태블릿(iPad)에는 표시되지 않습니다. |
body |
선택사항, 문자열 |
알림의 본문입니다. |
sound |
선택사항, 문자열 |
기기가 알림을 수신하면 재생할 알림음입니다.
클라이언트 앱의 기본 번들 또는 앱 데이터 컨테이너의 |
badge |
선택사항, 문자열 |
홈 화면 앱 아이콘의 배지 값입니다. 지정하지 않으면 배지가 변경되지 않습니다.
|
click_action |
선택사항, 문자열 |
사용자의 알림 클릭과 관련된 작업입니다. APN 페이로드의 |
subtitle |
선택사항, 문자열 |
알림의 부제목입니다. |
body_loc_key |
선택사항, 문자열 |
앱의 문자열 리소스에서 본문을 사용자의 현재 지역으로 현지화하는 데 사용할 본문 문자열의 키입니다. APN 페이로드의 자세한 내용은 Payload Key Reference 및 Localizing the Content of Your Remote Notifications를 확인하세요. |
body_loc_args |
선택사항, 문자열인 JSON 배열 |
본문을 사용자의 현재 지역으로 현지화하는 데 사용하기 위해 APN 페이로드의 자세한 내용은 Payload Key Reference 및 Localizing the Content of Your Remote Notifications를 확인하세요. |
title_loc_key |
선택사항, 문자열 |
앱의 문자열 리소스에서 제목을 사용자의 현재 지역으로 현지화하는 데 사용할 제목 문자열의 키입니다. APN 페이로드의 자세한 내용은 Payload Key Reference 및 Localizing the Content of Your Remote Notifications를 확인하세요. |
title_loc_args |
선택사항, 문자열인 JSON 배열 |
제목을 사용자의 현재 지역으로 현지화하는 데 사용하기 위해 APN 페이로드의 자세한 내용은 Payload Key Reference 및 Localizing the Content of Your Remote Notifications를 확인하세요. |
매개변수 | 사용 | 설명 |
---|---|---|
title |
선택사항, 문자열 |
알림의 제목입니다. |
body |
선택사항, 문자열 |
알림의 본문입니다. |
android_channel_id |
선택사항, 문자열 |
Android O에서 새로 추가된 알림의 채널 ID입니다. 이 채널 ID가 있는 알림을 받으려면 앱에서 이 채널 ID로 채널을 만들어야 합니다. 요청에서 이 채널 ID를 보내지 않거나 제공된 채널 ID가 앱에서 아직 만들어지지 않은 경우 FCM은 앱 매니페스트에 지정된 채널 ID를 사용합니다. |
icon |
선택사항, 문자열 |
알림 아이콘입니다.
드로어블 리소스 |
sound |
선택사항, 문자열 |
기기가 알림을 수신하면 재생할 알림음입니다.
|
tag |
선택사항, 문자열 |
알림 창에서 기존 알림을 대체하는 데 사용되는 식별자입니다. 지정하지 않으면 각 요청이 새 알림을 만듭니다. 지정하면 태그가 동일한 알림이 이미 표시되고 있는 경우 새 알림이 알림 창의 기존 알림을 대체합니다. |
color |
선택사항, 문자열 |
|
click_action |
선택사항, 문자열 |
사용자의 알림 클릭과 관련된 작업입니다. 지정하면 사용자가 알림을 클릭할 때 일치하는 인텐트 필터가 있는 액티비티가 실행됩니다. |
body_loc_key |
선택사항, 문자열 |
앱의 문자열 리소스에서 본문을 사용자의 현재 지역으로 현지화하는 데 사용할 본문 문자열의 키입니다. 자세한 내용은 문자열 리소스를 참조하세요. |
body_loc_args |
선택사항, 문자열인 JSON 배열 |
본문을 사용자의 현재 지역으로 현지화하는 데 사용하기 위해 자세한 내용은 형식 및 스타일 지정을 참조하세요. |
title_loc_key |
선택사항, 문자열 |
앱의 문자열 리소스에서 제목을 사용자의 현재 지역으로 현지화하는 데 사용할 제목 문자열의 키입니다. 자세한 내용은 문자열 리소스를 참조하세요. |
title_loc_args |
선택사항, 문자열인 JSON 배열 |
제목을 사용자의 현재 지역으로 현지화하는 데 사용하기 위해 자세한 내용은 형식 및 스타일 지정을 참조하세요. |
매개변수 | 사용 | 설명 |
---|---|---|
title |
선택사항, 문자열 |
알림의 제목입니다. |
body |
선택사항, 문자열 |
알림의 본문입니다. |
icon |
선택사항, 문자열 |
알림 아이콘에 사용할 URL입니다. |
click_action |
선택사항, 문자열 |
사용자의 알림 클릭과 관련된 작업입니다. 모든 URL 값은 보안 HTTPS여야 합니다. |
다운스트림 HTTP 메시지(일반 텍스트)
다음 표에는 일반 텍스트 다운스트림 HTTP 메시지의 대상, 옵션, 페이로드용 구문이 나와 있습니다.
매개변수 | 사용 | 설명 |
---|---|---|
대상 | ||
registration_id |
필수, 문자열 | 이 매개변수는 메시지를 수신하는 클라이언트 앱의 등록 토큰을 지정합니다. 2개 이상의 등록 토큰으로 보내는 멀티캐스트 메시징에는 HTTP JSON 형식만 사용할 수 있습니다. |
옵션 | ||
collapse_key |
선택사항, 문자열 | 자세한 내용은 표 1을 참조하세요. |
time_to_live |
선택사항, 숫자 | 자세한 내용은 표 1을 참조하세요. |
restricted_package_name |
선택사항, 문자열 | 자세한 내용은 표 1을 참조하세요. |
dry_run |
선택사항, 부울 | 자세한 내용은 표 1을 참조하세요. |
페이로드 | ||
data.<key> |
선택사항, 문자열 | 이 매개변수는 메시지 페이로드의 키-값 쌍을 지정합니다. 키-값 매개변수의 수에는 제한이 없지만 총 메시지 크기가 4,096바이트로 제한됩니다. 예를 들어 Android에서 키는 예약어('google'이나 'gcm'으로 시작하는 모든 단어 또는 'from', 'message_type')여서는 안 됩니다. 이 표에 정의되어 있는 모든 단어(예: |
다운스트림 메시지 응답 해석
앱 서버는 FCM에서 보낸 메시지 응답을 해석하기 위해 메시지 응답 헤더와 본문을 모두 평가해야 합니다. 다음 표에서는 수신할 수 있는 응답에 대해 설명합니다.
응답 | 설명 |
---|---|
200 | 메시지가 성공적으로 처리되었습니다. 응답 본문에 메시지 상태에 대한 자세한 내용이 포함되지만 요청이 JSON이었는지 아니면 일반 텍스트였는지에 따라 형식이 다릅니다. 자세한 내용은 표 5를 참조하세요. |
400 | JSON 요청에만 적용됩니다. 요청을 JSON으로 파싱하지 못했거나 잘못된 필드가 포함되었음을 나타냅니다. 예를 들어 숫자를 전달해야 하는데 문자열을 전달한 경우입니다. 정확한 실패 사유는 응답에 설명되어 있으며 요청을 다시 시도하기 전에 문제를 해결해야 합니다. |
401 | 발신자 계정을 인증하는 중에 오류가 발생했습니다. |
5xx | 500이나 503 같은 500~599 범위 내의 오류는 요청을 처리하려고 시도하는 중에
FCM 백엔드에 내부 오류가 발생했거나 시간 초과 등으로 인해 서버를 일시적으로
사용할 수 없다는 의미입니다. 발신자는 응답에 포함된 Retry-After 헤더를 반영하여 나중에 다시 시도해야 합니다. 애플리케이션 서버는 지수 백오프 방식을 구현해야 합니다. |
다음 표에는 다운스트림 메시지 응답 본문(JSON)의 필드가 나와 있습니다.
매개변수 | 사용 | 설명 |
---|---|---|
multicast_id |
필수항목, 숫자 | 멀티캐스트 메시지를 식별하는 숫자로 된 고유 ID입니다. |
success |
필수항목, 숫자 | 오류 없이 처리된 메시지 수입니다. |
failure |
필수항목, 숫자 | 처리하지 못한 메시지 수입니다. |
results |
필수항목, 객체 배열 | 처리된 메시지의 상태를 나타내는 객체의 배열입니다. 객체는 요청과 동일한 순서로 표시됩니다. 즉, 요청의 각 등록 ID마다 응답의 동일한 색인에 표시됩니다.
|
매개변수 | 사용 | 설명 |
---|---|---|
message_id |
선택사항, 숫자 | FCM이 성공적으로 요청을 수신한 경우 모든 구독 기기로 전송을 시도하는 주제 메시지 ID입니다. |
error |
선택사항, 문자열 | 메시지를 처리할 때 발생한 오류입니다. 가능한 값은 표 9에서 확인할 수 있습니다. |
매개변수 | 사용 | 설명 |
---|---|---|
id |
필수, 문자열 | 이 매개변수는 FCM이 성공적으로 처리한 고유한 메시지 ID를 지정합니다. |
registration_id |
선택사항, 문자열 | 이 매개변수는 메시지가 처리되어 전송된 클라이언트 앱의 등록 토큰을 지정합니다. |
매개변수 | 사용 | 설명 |
---|---|---|
Error |
필수, 문자열 | 이 매개변수는 수신자의 메시지를 처리하는 중에 발생한 오류 값을 지정합니다. 자세한 내용은 표 9를 참조하세요. |
다운스트림 메시지 오류 응답 코드
다음 표에는 다운스트림 메시지의 오류 응답 코드가 나와 있습니다.
오류 | HTTP 코드 | 권장 작업 |
---|---|---|
누락된 등록 토큰 | 200 + error:MissingRegistration | 요청에 등록 토큰이 포함되어 있는지 확인하세요. 일반 텍스트 메시지의 registration_id 나 JSON의 to 또는 registration_ids 필드를 확인하세요. |
잘못된 등록 토큰 | 200 + error:InvalidRegistration | 서버에 전달한 등록 토큰의 형식을 확인하세요. Firebase 알림을 사용해 등록할 때 클라이언트 앱이 수신한 등록 토큰과 일치해야 합니다. 일부분 자르거나 다른 문자를 추가해서는 안 됩니다. |
등록되지 않은 기기 | 200 + error:NotRegistered | 다음을 비롯한 몇몇 상황에서는 기존 등록 코드가 더 이상 유효하지 않게 될 수 있습니다.
|
잘못된 패키지 이름 | 200 + error:InvalidPackageName | 요청에서 전달한 값과 패키지 이름과 일치하는 등록 토큰으로 메시지를 보내도록 지정했는지 확인합니다. |
인증 오류 | 401 | 메시지를 보내는 데 사용한 발신자 계정을 인증할 수 없습니다. 가능한 원인은 다음과 같습니다.
|
일치하지 않는 발신자 | 200 + error:MismatchSenderId | 등록 토큰은 특정 발신자 그룹에 연결됩니다. 클라이언트 앱을 FCM에 등록할 때 메시지를 보낼 수 있는 발신자를 지정해야 합니다. 클라이언트 앱에 메일을 보낼 때는 발신자 ID 중 하나를 사용해야 합니다. 다른 발신자로 전환하면 기존 등록 토큰이 작동하지 않습니다. |
JSON이 잘못되었습니다. | 400 | JSON 메시지의 형식이 올바르게 지정되었으며 올바른 필드가 포함되어 있는지 확인하세요. 예를 들어 올바른 데이터 유형이 전달되는지 확인해야 합니다. |
잘못된 파라미터 | 400 + error:InvalidParameters | 제공한 매개변수의 이름과 유형이 올바른지 확인하세요. |
너무 큰 메시지 | 200 + error:MessageTooBig | 메시지에 포함된 페이로드 데이터의 총 크기가 FCM 한도를 초과하지 않았는지 확인하세요. 대부분의 메시지는 4,096바이트이며 주제로 보내는 메시지의 경우는 2,048바이트입니다. 여기에는 키와 값이 모두 포함됩니다. |
잘못된 데이터 키 | 200 + error:
InvalidDataKey |
페이로드 데이터에 FCM에서 내부적으로 사용하는 키(예: from , gcm 또는 프리픽스가 google 인 모든 값)가 포함되지 않았는지 확인하세요. 또한 페이로드 값이 FCM 값에 의해 재정의되는 경우에는 FCM에서 사용하는 collapse_key 와 같은 일부 단어가 페이로드에도 허용된다는 점에 유의하세요. |
잘못된 수명 | 200 + error:InvalidTtl | time_to_live 에서 사용한 값이 0초에서 2,419,200초(4주) 사이의 기간을 나타내는 정수인지 확인하세요. |
시간 초과 | 5xx 또는 200 + error:Unavailable | 서버에서 시간 내에 요청을 처리하지 못했습니다. 동일한 요청을 다시 시도하되 다음을 수행해야 합니다.
문제를 유발하는 발신자는 차단될 수 있습니다. |
내부 서버 오류 | 500 또는 200 + error:InternalServerError | 요청을 처리하려고 시도하는 중에 서버에 오류가 발생했습니다. '제한 시간'에 나와 있는 요구사항에 따라 동일한 요청을 다시 시도할 수 있습니다. 오류가 계속되면 Firebase 지원팀에 문의하시기 바랍니다. |
기기 메시지 비율 초과 | 200 + error:
DeviceMessageRate Exceeded |
특정 기기로 전달되는 메시지 비율이 너무 높습니다. Apple 앱의 메시지 전송 속도가 APNs 한도를 초과하면 이 오류 메시지가 표시될 수 있습니다. 이 기기로 보내는 메시지 수를 줄이고 전송을 재시도할 때 지수 백오프를 사용하세요. |
주제 메시지 비율 초과 | 200 + error:
TopicsMessageRate Exceeded |
특정 주제의 구독자에게 전달되는 메시지 비율이 너무 높습니다. 이 주제로 보내는 메시지 수를 줄이고 전송을 재시도할 때 지수 백오프를 사용하세요. |
잘못된 APNs 인증 정보 | 200 + error:
InvalidApnsCredential |
필수 APNs 인증 키가 업로드되지 않았거나 만료되어 Apple 기기를 타겟팅한 메시지를 보내지 못했습니다. 개발 및 프로덕션 인증 정보의 유효성을 확인하세요. |
기기 그룹 관리
다음 표에는 기기 그룹을 만들고 구성원을 추가 및 삭제하기 위한 키가 나와 있습니다. 자세한 내용은 플랫폼별 가이드(iOS+ 또는 Android)를 참조하세요.
매개변수 | 사용 | 설명 |
---|---|---|
operation |
필수, 문자열 | 실행할 연산입니다. 유효한 값은 create , add , remove 입니다. |
notification_key_name |
필수, 문자열 | 만들거나 수정할 기기 그룹의 사용자 정의 이름입니다. |
notification_key |
필수(create 작업 제외), 문자열
|
기기 그룹의 고유한 식별자입니다. create 작업이 성공했을 때 반환하는 값으로 기기 그룹의 모든 후속 작업에 필요한 값입니다. |
registration_ids |
필수, 문자열 배열 | 추가 또는 삭제할 기기 토큰입니다. 기기 그룹에서 기존 등록 토큰을 모두 삭제하면 FCM에서 기기 그룹을 삭제합니다. |