본문
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() 가 처리
- 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_key
parameter 포함
- 동시에 사용가능한 서로다른 축소 키를 기기당 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 |
댓글