본문

170816(수) - Firebase Cloud Messaging

Firebase Cloud Messaging (FCM)


FCM

ㆍ알림 메시지 또는 데이터 메시지 전송

ㆍMessage 타겟팅

단일기기, 기기 그룹, 동일 주제를 구독한 기기 등 3가지 방식으로 message 배포 가능

ㆍClient App에서 message 전송

기기에서 다시 서버로 채팅 및 기타 mesasage를 보낼 수 있다.



작동원리

ㆍHTTP or XMPP 프로토콜(Trusted Environment)을 통해 FCM과 상호작용



Implements path

1. FCM SDK 설정

2. 클라이언트 앱에 메시지 처리 등 부가 기능 추가

3. 앱 서버 개발

ㆍ프로토콜 선택

ㆍ인증 로직 추가

ㆍUpstream message 사용시 XMPP를 사용해야 한다.



FCM message informations

다양한 메시징 옵션 제공


- Message 유형

1. 알림 message

ㆍFCM이 알림표시 작업 처리

ㆍDisplay message

ㆍ2KB로 제한

ㆍ키 모음이 사전 정의

ㆍData payload 포함 가능


2. Data message

ㆍClient App에서 처리

ㆍ4KB 맞춤 key-value set을 보낼 수 있음


- Notification message

1. console 방식

Test, marketing 및 사용자 재참여 유도를 위해 console에서 notification을 작성하여 보낼 수 있음


2. programming 방식

{
   
"to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
   
"notification" : {
     
"body" : "great match!",
     
"title" : "Portugal vs. Denmark",
     
"icon" : "myicon"
   
}
 
}

ㆍbackground status

notification list로 전송


ㆍforeground status

onMessageReceived() 가 처리


 notification payload support



- Data message

ㆍkey-value set으로 data 키를 설정하고 client app 으로 data payload를 보낼 수 있다.

ㆍ4KB payload 포함 가능

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


- Data payload가 포함된 message

ㆍ수신당시 앱의 상태가 중요함

1. Background

ㆍ알림 payload가 app의 알림 목록에 수신

ㆍ탭한 경우에만 처리


2. Foreground    

payload가 둘다 제공되는 message 개체를 수신

  {

    "to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
   
"notification" : {
     
"body" : "great match!",
     
"title" : "Portugal vs. Denmark",
     
"icon" : "myicon"
   
},
   
"data" : {
     
"Nick" : "Mario",
     
"Room" : "PortugalVSDenmark"
   
}
 
}


- 비축소형(non-collapsible) & 축소형(collapsible) 메시지

ㆍ비축소형

- 각각의 개별 message가 기기로 전송됨을 의미

- 서버에 접속해서 data를 가져오기 위해 mobile app으로 ping을 보내는것이 아니라 콘텐츠를 전송

- FCM은 전송순서를 보장하지 않는다.

- 알림 메시지를 제외하고는 default로 비축소형

- 예) 채팅 메시지, 중요한 메시지, 메신저앱에서 메시지마다 콘텐츠가 다르기 때문에 모든 메시지 전송


- 축소 없이 저장할 수 있는 메시지 최대 개수 100개

- 한도에 도달하면 저장된 메시지 모두 삭제

- 한도에 도달했음을 나타내는 특수한 메시지 수신 -> 앱 서버에 전체 동기화 요청


ㆍ축소형

- 예) 동기화 전송 메시지

서버 데이터와 동기화 할 것을 알리는 ping


- 예) 알림 메시지

- message payload에 collapse_keyparameter 포함

- 동시에 사용가능한 서로다른 축소 키를 기기당 4개씩 허용

- 어떤키를 유지할지는 보장되지 않음



- Message 우선순위

ㆍnormal

- 기본 우선순위

- 절전모드 및 배터리 절약을 위해 전송지연 가능


ㆍhigh

- 즉시 전송 시도

- 절전 모드를 해제하고 네트워크 연결 시도

- 배터리 소모 심함

{
 
"to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
 
"priority" : "normal",
 
"notification" : {
   
"body" : "This week's edition is now available.",
   
"title" : "NewsMagazine.com",
   
"icon" : "new"
 
},
 
"data" : {
   
"volume" : "3.21.15",
   
"contents" : "http://www.news-magazine.com/world-week/21659772"
 
}
}


- Message 수명

ㆍ즉각적인 메시지 전송이 불가능한 경우 (기기 off, offline, 기타 사용 불가능 상태)

ㆍ과도한 리소스 소비와 배터리 수명 저하 방지를 위해 의도적으로 message 지연 가능

ㆍHTTP 및 XMPP에서 모두 지원되는 time_to_live (0초 ~ 2,419,200초 (28일)) parameter 사용

ㆍdefalut는 4주

{
   
"collapse_key" : "demo",
   
"to" : "xyz",
   
"data" : {
     
"key1" : "value1",
     
"key2" : "value2"
   
},
   
"time_to_live" : 3
 
}


- Multiple senders의 message 수신

ㆍ여러 발신자가 동일한 client app으로 message를 보낼 수 있도록 허용

ㆍ100명으로 제한됨



- Message lifetime

ㆍApp server가 message 게시 후 message ID를 다시 수신했다

-> message가 기기로 전송됐다  (X)

-> message 전송이 수락되었다. (O)


ㆍDoze mode

- 낮은 우선순위

ㆍmode가 해제될 때까지 FCM이 보관

ㆍcollapes_key 와 동일 token이 이미 저장되어 대기중이면 덮어씀

ㆍcollapes key가 설정되어있지 않다면, 계속 저장해 놓는다.


ㆍ기기가 FCM 미연결

- 연결 될때까지 축소키 규칙을 반영하여 message 저장

- 연결이 설정되면 모든 message 전송

- 1개월 초과시 FCM이 message 즉각 폐기

- 4주 초과전에 연결되면 onDeletedMessages() 메소드 호출로 동기화 요청하는 방식으로 처리 가능


ㆍ앱 미설치

- FCM이 message 즉각 폐기

- 토큰 무효화

- notRegistered 오류 발생

'Mobile > Firebase' 카테고리의 다른 글

170816(수) - Firebase Authentication  (0) 2017.08.16
170816(수) - Cloud Functions  (0) 2017.08.16
140816(수) - Firebase Analytics  (0) 2017.08.16
170814(월) - Start Firebase  (0) 2017.08.14

공유

댓글