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

Android에서 장치 그룹에 메시지 보내기

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

장치 그룹 메시징을 사용하면 단일 그룹에 여러 장치를 추가할 수 있습니다. 이것은 토픽 메시징과 유사하지만 그룹 구성원이 서버에서만 관리되도록 하는 인증을 포함합니다. 예를 들어 다른 전화 모델에 다른 메시지를 보내려는 경우 서버에서 적절한 그룹에 등록을 추가/제거하고 각 그룹에 적절한 메시지를 보낼 수 있습니다. 장치 그룹 메시징은 애플리케이션 내에서 직접 관리하는 대신 서버에서 장치 그룹을 관리한다는 점에서 주제 메시징과 다릅니다.

앱 서버에서 레거시 XMPP 또는 HTTP 프로토콜을 통해 장치 그룹 메시징을 사용할 수 있습니다. Node.js용 Firebase Admin SDK 의 이전 버전은 기존 프로토콜을 기반으로 하며 기기 그룹 메시징 기능도 제공합니다. 알림 키에 허용되는 최대 구성원 수는 20명입니다.

장치 그룹 관리

장치 그룹에 메시지를 보내기 전에 다음을 수행해야 합니다.

  1. 그룹에 추가하려는 각 장치에 대한 등록 토큰을 얻습니다.

  2. 특정 그룹(일반적으로 사용자)을 그룹의 모든 관련 등록 토큰에 매핑하여 장치 그룹을 식별하는 notification_key 를 만듭니다. 앱 서버에서 알림 키를 생성할 수 있습니다.

장치 그룹의 기본 관리(그룹 생성 및 제거, 장치 추가 또는 제거)는 앱 서버를 통해 수행됩니다. 지원되는 키 목록은 레거시 HTTP 프로토콜 참조 를 참조하세요.

앱 서버에서 장치 그룹 관리

장치 그룹 만들기

장치 그룹을 생성하려면 그룹의 이름과 장치의 등록 토큰 목록을 제공하는 POST 요청을 보냅니다. FCM은 장치 그룹을 나타내는 새로운 notification_key 를 반환합니다.

HTTP POST 요청

https://fcm.googleapis.com/fcm/notification 으로 다음과 같은 요청을 보냅니다.

https://fcm.googleapis.com/fcm/notification
Content-Type:application/json
Authorization:key=API_KEY
project_id:SENDER_ID

{
   "operation": "create",
   "notification_key_name": "appUser-Chris",
   "registration_ids": ["bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
                        "cR1rjyj4_Kc:APA91bGusqbypSuMdsh7jSNrW4nzsM...",
                        ... ]

notification_key_name 은 주어진 그룹에 고유한 이름 또는 식별자(예: 사용자 이름일 수 있음)입니다. notification_key_namenotification_key 는 등록 토큰 그룹에 고유합니다. 동일한 발신자 ID 에 대해 여러 클라이언트 앱이 있는 경우 notification_key_name 은 클라이언트 앱별로 고유해야 합니다. 이렇게 하면 메시지가 의도한 대상 앱으로만 이동합니다.

응답 형식

성공적인 요청은 다음과 같은 notification_key 를 반환합니다.

{
   "notification_key": "APA91bGHXQBB...9QgnYOEURwm0I3lmyqzk2TXQ"
}

후속 작업에서 사용할 notification_key 및 해당 notification_key_name 을 저장합니다.

알림 키 검색

기존 알림 키를 검색해야 하는 경우 다음과 같이 GET 요청에서 notification_key_name 을 사용합니다.

https://fcm.googleapis.com/fcm/notification?notification_key_name=appUser-Chris
Content-Type:application/json
Authorization:key=API_KEY
project_id:SENDER_ID
{}

지정된 알림 키 이름에 대한 각 GET 요청에 대해 서버는 고유한 인코딩된 문자열을 반환합니다. 각 문자열이 다른 키로 보일 수 있지만 실제로는 유효한 'notification_key' 값입니다.

장치 그룹에서 장치 추가 및 제거

기존 그룹에서 장치를 추가하거나 제거하려면 add 또는 remove 로 설정된 operation 매개변수와 함께 POST 요청을 보내고 add 또는 remove 를 위한 등록 토큰을 제공하십시오.

HTTP POST 요청

예를 들어 bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1... 등록 토큰이 있는 장치를 appUser-Chris 에 추가하려면 다음 요청을 보냅니다.

{
   "operation": "add",
   "notification_key_name": "appUser-Chris",
   "notification_key": "APA91bGHXQBB...9QgnYOEURwm0I3lmyqzk2TXQ",
   "registration_ids": ["bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."]
}

응답 형식

장치를 추가하거나 제거하기 위한 성공적인 요청은 다음과 같은 notification_key 를 반환합니다.

{
   "notification_key": "APA91bGHXQBB...9QgnYOEURwm0I3lmyqzk2TXQ"
}

장치 그룹에 다운스트림 메시지 보내기

장치 그룹에 메시지를 보내는 것은 개별 장치에 메시지를 보내는 것과 매우 유사합니다. to 매개변수를 장치 그룹에 대한 고유한 알림 키로 설정하십시오. 페이로드 지원에 대한 자세한 내용은 메시지 유형 을 참조하세요. 이 페이지의 예는 레거시 HTTP 및 XMPP 프로토콜의 장치 그룹에 데이터 메시지를 보내는 방법을 보여줍니다.

장치 그룹 HTTP POST 요청

https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

{
  "to": "aUniqueKey",
  "data": {
    "hello": "This is a Firebase Cloud Messaging Device Group Message!",
   }
}

장치 그룹 HTTP 응답

다음은 "성공"의 예입니다. notification_key 에는 2개의 등록 토큰이 연결되어 있고 메시지가 둘 다 성공적으로 전송되었습니다.

{
  "success": 2,
  "failure": 0
}

다음은 "부분적 성공"의 예입니다. notification_key 에는 3개의 등록 토큰이 연결되어 있습니다. 메시지가 등록 토큰 중 1개에만 성공적으로 전송되었습니다. 응답 메시지는 메시지 수신에 실패한 등록 토큰( registration_ids )을 나열합니다.

{
  "success":1,
  "failure":2,
  "failed_registration_ids":[
     "regId1",
     "regId2"
  ]
}

메시지가 notification_key 와 연결된 하나 이상의 등록 토큰으로 전달되지 않으면 앱 서버는 재시도 사이에 백오프를 사용하여 재시도해야 합니다.

서버가 구성원이 없는 장치 그룹에 메시지를 보내려고 하면 응답은 다음과 같으며 성공은 0이고 실패는 0입니다.

{
  "success": 0,
  "failure": 0
}

장치 그룹 XMPP 메시지

<message id="">
  <gcm xmlns="google:mobile:data">
  {
      "to": "aUniqueKey",
      "message_id": "m-1366082849205" ,
      "data": {
          "hello":"This is a Firebase Cloud Messaging Device Group Message!"
      }
  }
  </gcm>
</message>

장치 그룹 XMPP 응답

메시지가 그룹의 장치 중 하나로 성공적으로 전송되면 XMPP 연결 서버는 ACK로 응답합니다. 그룹의 모든 장치로 보내는 모든 메시지가 실패하면 XMPP 연결 서버는 NACK으로 응답합니다.

다음은 "성공"의 예입니다. notification_key 에는 3개의 등록 토큰이 연결되어 있고 메시지가 모두 성공적으로 전송되었습니다.

{
  "from": "aUniqueKey",
  "message_type": "ack",
  "success": 3,
  "failure": 0,
  "message_id": "m-1366082849205"
}

다음은 "부분적 성공"의 예입니다. notification_key 에는 3개의 등록 토큰이 연결되어 있습니다. 메시지가 등록 토큰 중 1개에만 성공적으로 전송되었습니다. 응답 메시지에는 메시지 수신에 실패한 등록 토큰이 나열됩니다.

{
  "from": "aUniqueKey",
  "message_type": "ack",
  "success":1,
  "failure":2,
  "failed_registration_ids":[
     "regId1",
     "regId2"
  ]
}

FCM 연결 서버가 그룹의 모든 장치에 전달하지 못하는 경우. 앱 서버는 nack 응답을 받습니다.

메시지 옵션의 전체 목록은 선택한 연결 서버 프로토콜, HTTP 또는 XMPP 에 대한 참조 정보를 참조하십시오.